הורדת מדיה מקובץ מצורף

במדריך הזה מוסבר איך להשתמש בשיטה download במשאב Media של Google Chat API כדי להוריד מדיה (קובץ) מהודעה ב-Google Chat.

כשהמשתמש שולח הודעה לאפליקציה, מערכת Google Chat שולחת אירוע אינטראקציה MESSAGE. אירוע האינטראקציה שמתקבל באפליקציה כולל גוף בקשה, שהוא מטען ייעודי (payload) בפורמט JSON שמייצג את אירוע האינטראקציה, כולל קבצים מצורפים. הנתונים בקובץ המצורף שונים בהתאם לסוג הקובץ המצורף: תוכן שהועלה (קובץ מקומי) או קובץ ששמור ב-Drive. המשאב Media מייצג קובץ שהועלה ל-Google Chat, כמו תמונות, סרטונים ומסמכים. המשאב Attachment מייצג מכונה של מדיה – קובץ – שמצורפת להודעה. Attachmentהמשאב כולל את המטא-נתונים של הקובץ המצורף, כמו המיקום שבו הוא נשמר.

דרישות מוקדמות

Python

הורדה מקובץ מצורף

כדי להוריד מדיה מקובץ מצורף, צריך להעביר את הפרטים הבאים בבקשה:

בדוגמה הבאה מוסבר איך מורידים קובץ שמצורף להודעה:

Python

  1. בספריית העבודה, יוצרים קובץ בשם chat_media_and_attachment_download.py.
  2. מוסיפים את הקוד הבא אל chat_media_and_attachment_download.py:

    import io
    
    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    from googleapiclient.http import MediaIoBaseDownload
    
    # Define your app's authorization scopes.
    # When modifying these scopes, delete the file token.json, if it exists.
    SCOPES = ["https://www.googleapis.com/auth/chat.messages"]
    
    def main():
        '''
        Authenticates with Chat API via user credentials,
        then downloads a file attached to a message.
        '''
    
        # Authenticate with Google Workspace
        # and get user authorization.
        flow = InstalledAppFlow.from_client_secrets_file(
                    'credentials.json', SCOPES)
        creds = flow.run_local_server()
    
        # Build a service endpoint for Chat API.
        chat = build('chat', 'v1', credentials=creds)
    
        # Download media resource.
        request = chat.media().download_media(
            resourceName=RESOURCE_NAME,
        )
        file = io.BytesIO()
        downloader = MediaIoBaseDownload(file, request)
    
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            if status.total_size:
                print(f'Total size: {status.total_size}')
            print(f'Download {int(status.progress() * 100)}')
    
    if __name__ == '__main__':
        main()
    
  3. בקוד, מחליפים את RESOURCE_NAME ב-attachmentDataRef.resourceName. אפשר לאחזר את הערך הזה באחת מהדרכים הבאות:

  4. בספריית העבודה, מבצעים build ומריצים את הדוגמה:

    python3 chat_media_and_attachment_download.py

אם הפעולה בוצעה ללא שגיאות, השיטה הזו מחזירה את תוכן הקובץ כבייטים.

כדי להוריד את תוכן הקובץ, בוחרים באחת מהשיטות הבאות:

  • מומלץ להשתמש במחלקה MediaIoBaseDownload ב-Python, שמכילה שיטות להורדת הקובץ בקטעים ולשמירת התוכן בזרם פלט.

  • אם אתם צריכים לבצע את בקשת ה-HTTP באופן ידני, צריך לקרוא לשיטה download ולציין את החלק בקובץ שרוצים להוריד באמצעות טווח בייטים עם הכותרת Range – לדוגמה: Range: bytes=500-999.