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

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

כשמשתמש שולח הודעה לאפליקציה שלכם, Google Chat שולח אירוע אינטראקציה MESSAGE. אירוע האינטראקציה שהאפליקציה שלכם מקבלת כולל גוף בקשה, שהוא המטען הייעודי (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 באופן ידני, קוראים ל-method download ומציינים את החלק בקובץ שרוצים להוריד באמצעות טווח בייטים עם הכותרת Range, לדוגמה: Range: bytes=500-999.