رسانه را از پیوست فایل دانلود کنید

این راهنما نحوه استفاده از روش download در منبع Media از API چت گوگل برای دانلود رسانه (یک فایل) از یک پیام در چت گوگل را توضیح می‌دهد.

وقتی کاربر پیامی به برنامه شما ارسال می‌کند، گوگل چت یک رویداد تعاملی MESSAGE ارسال می‌کند. رویداد تعاملی که توسط برنامه شما دریافت می‌شود شامل یک بدنه درخواست است که همان JSON payload است که رویداد تعاملی، از جمله هرگونه پیوست، را نشان می‌دهد. داده‌های موجود در پیوست بسته به اینکه آیا پیوست محتوای آپلود شده (یک فایل محلی) است یا فایلی ذخیره شده در Drive، متفاوت است. منبع Media نشان‌دهنده فایل آپلود شده در گوگل چت، مانند تصاویر، ویدیوها و اسناد است. منبع Attachment نشان‌دهنده نمونه‌ای از رسانه - یک فایل - است که به یک پیام متصل شده است. منبع Attachment شامل ابرداده‌های مربوط به پیوست، مانند محل ذخیره آن است.

پیش‌نیازها

پایتون

دانلود از فایل پیوست

برای دانلود رسانه از پیوست فایل، موارد زیر را در درخواست خود ارسال کنید:

مثال زیر فایلی را که به یک پیام پیوست شده است دانلود می‌کند:

پایتون

  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 در پایتون را توصیه می‌کنیم، که شامل متدهایی برای دانلود فایل به صورت بخش بخش و ذخیره محتویات در یک جریان خروجی است.

  • اگر مجبورید درخواست HTTP را به صورت دستی انجام دهید، متد download را فراخوانی کنید و بخشی از فایل را که می‌خواهید دانلود کنید با استفاده از یک محدوده بایت با هدر Range مشخص کنید - برای مثال: Range: bytes=500-999 .