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

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

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

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