این راهنما نحوه استفاده از روش download در منبع Media از API چت گوگل برای دانلود رسانه (یک فایل) از یک پیام در چت گوگل را توضیح میدهد.
وقتی کاربر پیامی به برنامه شما ارسال میکند، گوگل چت یک رویداد تعاملی MESSAGE ارسال میکند. رویداد تعاملی که توسط برنامه شما دریافت میشود شامل یک بدنه درخواست است که همان JSON payload است که رویداد تعاملی، از جمله هرگونه پیوست، را نشان میدهد. دادههای موجود در پیوست بسته به اینکه آیا پیوست محتوای آپلود شده (یک فایل محلی) است یا فایلی ذخیره شده در Drive، متفاوت است. منبع Media نشاندهنده فایل آپلود شده در گوگل چت، مانند تصاویر، ویدیوها و اسناد است. منبع Attachment نشاندهنده نمونهای از رسانه - یک فایل - است که به یک پیام متصل شده است. منبع Attachment شامل ابردادههای مربوط به پیوست، مانند محل ذخیره آن است.
پیشنیازها
پایتون
- یک حساب کاربری تجاری یا سازمانی Google Workspace با دسترسی به Google Chat .
- محیط خود را تنظیم کنید:
- یک پروژه گوگل کلود ایجاد کنید .
- صفحه رضایت OAuth را پیکربندی کنید .
- API چت گوگل را با نام، آیکون و توضیحات برای برنامه چت خود فعال و پیکربندی کنید .
- کتابخانه کلاینت API گوگل پایتون را نصب کنید.
- بر اساس نحوهی احراز هویت در درخواست API چت گوگل خود، اعتبارنامههای دسترسی ایجاد کنید:
- برای احراز هویت به عنوان کاربر چت، اعتبارنامههای OAuth client ID را ایجاد کنید و اعتبارنامهها را به عنوان یک فایل JSON با نام
credentials.jsonدر دایرکتوری محلی خود ذخیره کنید. - برای احراز هویت به عنوان برنامه چت، اعتبارنامههای حساب سرویس را ایجاد کنید و اعتبارنامهها را به عنوان یک فایل JSON با نام
credentials.jsonذخیره کنید.
- برای احراز هویت به عنوان کاربر چت، اعتبارنامههای OAuth client ID را ایجاد کنید و اعتبارنامهها را به عنوان یک فایل JSON با نام
- بر اساس اینکه میخواهید به عنوان کاربر یا برنامه چت احراز هویت کنید ، یک محدوده مجوز انتخاب کنید .
دانلود از فایل پیوست
برای دانلود رسانه از پیوست فایل، موارد زیر را در درخواست خود ارسال کنید:
- با احراز هویت کاربر ، محدوده مجوز
chat.messages.readonlyیاchat.messagesرا مشخص کنید. با احراز هویت برنامه ، محدوده مجوزchat.botرا مشخص کنید. - متدهای گوگل چت زیر را فراخوانی کنید:
- با فراخوانی یکی از متدهای زیر
attachmentDataRefدریافت کنید:- متد
getروی منبعAttachment. - متد
getیا متدlistروی منبعMessage.
- متد
- متد
downloadرا روی منبعMediaفراخوانی کنید وattachmentDataRef.resourceNameکه قبلاً بازیابی شده است را به صورتmedia.download.resourceNameمشخص کنید.
- با فراخوانی یکی از متدهای زیر
مثال زیر فایلی را که به یک پیام پیوست شده است دانلود میکند:
پایتون
- در دایرکتوری کاری خود، فایلی با نام
chat_media_and_attachment_download.pyایجاد کنید. کد زیر را در
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()در کد،
RESOURCE_NAMEرا باattachmentDataRef.resourceNameجایگزین کنید، که میتوانید آن را به یکی از روشهای زیر بازیابی کنید:- متد
getروی منبعAttachment. - متد
getروی منبعMessage. - متد
listروی منبعMessage.
- متد
در دایرکتوری کاری خود، نمونه را بسازید و اجرا کنید:
python3 chat_media_and_attachment_download.py
در صورت موفقیت، این متد محتوای فایل را به صورت بایت برمیگرداند.
برای دانلود محتوای فایل، یکی از روشهای زیر را انتخاب کنید:
ما استفاده از کلاس
MediaIoBaseDownloadدر پایتون را توصیه میکنیم، که شامل متدهایی برای دانلود فایل به صورت بخش بخش و ذخیره محتویات در یک جریان خروجی است.اگر مجبورید درخواست HTTP را به صورت دستی انجام دهید، متد
downloadرا فراخوانی کنید و بخشی از فایل را که میخواهید دانلود کنید با استفاده از یک محدوده بایت با هدرRangeمشخص کنید - برای مثال:Range: bytes=500-999.
مباحث مرتبط
- اگر پیام یک فایل Drive است، از Drive API برای دسترسی به فایل استفاده کنید.
- آپلود رسانه به عنوان پیوست فایل
- دانلود رسانه به عنوان پیوست فایل
- دریافت ابرداده در مورد پیوست پیام