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

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

عندما يُرسِل المستخدم رسالة إلى تطبيقك، يُرسِل Google Chat حدث تفاعل MESSAGE. يتضمّن حدث التفاعل الذي يتلقّاه تطبيقك نص الطلب، وهو حمولة JSON الأساسية التي تمثّل حدث التفاعل، بما في ذلك أي مرفقات. تختلف البيانات في المرفق بناءً على ما إذا كان المرفق قد تم تحميل محتوى (ملف محلي) أو ملف مخزَّن على Drive. يمثل المورد Media ملفًا تم تحميله إلى Google Chat، مثل الصور والفيديوهات والمستندات. يمثل مورد Attachment مثيلاً من الوسائط - ملف - مرفق برسالة. يتضمن مورد Attachment البيانات الوصفية للمرفق، مثل مكان حفظه.

المتطلّبات الأساسية

Python

  • Python 3.6 أو أعلى
  • تتيح لك أداة pip إدارة الحزم
  • أحدث مكتبات برامج Google للغة بايثون. لتثبيتها أو تحديثها، قم بتشغيل الأمر التالي في واجهة سطر الأوامر لديك:

    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.