تنزيل الوسائط من مرفق ملف

يشرح هذا الدليل كيفية استخدام طريقة download على مورد Media الخاص بـ Google Chat API لتنزيل الوسائط (ملف) من رسالة في Google Chat.

عندما يرسِل المستخدم رسالة إلى تطبيقك، يرسل Google Chat حدث تفاعل واحد (MESSAGE). يتضمّن حدث التفاعل الذي يتلقّاه تطبيقك نص الطلب، وهو حمولة 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(
                    '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 في بايثون، وتحتوي على طرق للتنزيل الملف على أقسام وحفظ المحتوى في تدفق إخراج.

  • إذا كان عليك تقديم طلب HTTP يدويًا، عليك استدعاء طريقة download حدد جزء الملف الذي تريد تنزيله باستخدام بايت النطاق مع عنوان Range، مثلاً: Range: bytes=500-999.