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

يوضّح هذا الدليل طريقة استخدام طريقة download على مورد Media لواجهة Google Chat API لتنزيل الوسائط (ملف) من رسالة في Google Chat.

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

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