একটি ফাইল সংযুক্তি থেকে মিডিয়া ডাউনলোড করুন

এই নির্দেশিকায় ব্যাখ্যা করা হয়েছে, কীভাবে গুগল চ্যাট এপিআই-এর Media রিসোর্সের download মেথড ব্যবহার করে গুগল চ্যাটের কোনো মেসেজ থেকে মিডিয়া (একটি ফাইল) ডাউনলোড করা যায়।

যখন ব্যবহারকারী আপনার অ্যাপে একটি বার্তা পাঠান, তখন গুগল চ্যাট একটি MESSAGE ইন্টারঅ্যাকশন ইভেন্ট প্রেরণ করে। আপনার অ্যাপে প্রাপ্ত ইন্টারঅ্যাকশন ইভেন্টটিতে একটি রিকোয়েস্ট বডি থাকে, যা হলো ইন্টারঅ্যাকশন ইভেন্টটির প্রতিনিধিত্বকারী JSON পেলোড এবং এতে যেকোনো অ্যাটাচমেন্ট অন্তর্ভুক্ত থাকে। অ্যাটাচমেন্টটি আপলোড করা কন্টেন্ট (একটি স্থানীয় ফাইল) নাকি ড্রাইভে সংরক্ষিত ফাইল, তার উপর নির্ভর করে অ্যাটাচমেন্টের ডেটা ভিন্ন হয়। 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