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

במדריך הזה מוסבר איך להשתמש ב-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.