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

يشرح هذا الدليل كيفية استخدام طريقة 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(
                    'credentials.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.