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

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

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

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

Python

التنزيل من ملف مرفق

لتنزيل وسائط من مرفق ملف، مرِّر ما يلي في طلبك:

  • باستخدام مصادقة المستخدم، حدِّد نطاق تفويض chat.messages.readonly أو chat.messages. باستخدام مصادقة التطبيق، حدِّد نطاق تفويض chat.bot.
  • استدعاء طرق Google Chat التالية:
    1. احصل على attachmentDataRef من خلال استدعاء إحدى الطرق التالية:
    2. استدعِ طريقة download في المورد Media، وحدِّد attachmentDataRef.resourceName الذي تم استرداده سابقًا كـ media.download.resourceName.

ينزّل المثال التالي ملفًا مرفقًا برسالة:

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.