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

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

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

پیش نیازها

پایتون

  • پایتون 3.6 یا بالاتر
  • ابزار مدیریت بسته پیپ
  • جدیدترین کتابخانه های مشتری گوگل برای پایتون. برای نصب یا به روز رسانی آنها، دستور زیر را در رابط خط فرمان خود اجرا کنید:

    pip3 install --upgrade google-api-python-client google-auth-oauthlib
    
  • یک پروژه Google Cloud با Google Chat API فعال و پیکربندی شده است. برای مراحل، به ساخت برنامه گپ Google مراجعه کنید.
  • مجوز برای برنامه چت پیکربندی شد. دانلود رسانه از هر دو پشتیبانی می کند:

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

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

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

پایتون

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

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