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

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

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

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

Python

  • Python 3.6 ואילך
  • הכלי pip לניהול חבילות
  • ספריות הלקוח העדכניות של Google ל-Python. כדי להתקין או לעדכן אותן, מריצים את הפקודה הבאה בממשק שורת הפקודה:

    pip3 install --upgrade google-api-python-client google-auth-oauthlib
    
  • פרויקט ב-Google Cloud עם ממשק Google Chat API פעיל ומוגדר. במאמר איך יוצרים אפליקציה ל-Google Chat מוסבר איך עושים זאת.
  • ההרשאות שהוגדרו לאפליקציית Chat. בהורדה של קובצי מדיה אפשר:

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

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

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

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(
                    'client_secrets.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. בספריית העבודה, יוצרים ומריצים את הדוגמה:

    python3 chat_media_and_attachment_download.py
    

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

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

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

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