Tải nội dung nghe nhìn xuống từ một tệp đính kèm

Hướng dẫn này giải thích cách sử dụng phương thức download trên tài nguyên Media của Google Chat API để tải nội dung nghe nhìn (tệp) xuống từ một tin nhắn trong Google Chat.

Khi người dùng gửi tin nhắn đến ứng dụng của bạn, Google Chat sẽ gửi một sự kiện tương tác MESSAGE. Sự kiện tương tác mà ứng dụng của bạn nhận được bao gồm một phần nội dung yêu cầu. Đây là tải trọng JSON đại diện cho sự kiện tương tác, bao gồm cả mọi tệp đính kèm. Dữ liệu trong tệp đính kèm sẽ khác nhau tuỳ thuộc vào việc tệp đính kèm đó là nội dung được tải lên (tệp cục bộ) hay là tệp được lưu trữ trên Drive. Tài nguyên Media đại diện cho một tệp được tải lên Google Chat, chẳng hạn như hình ảnh, video và tài liệu. Tài nguyên Attachment biểu thị một phiên bản của nội dung nghe nhìn (một tệp) được đính kèm vào tin nhắn. Tài nguyên Attachment bao gồm siêu dữ liệu về tệp đính kèm, chẳng hạn như vị trí lưu tệp.

Điều kiện tiên quyết

Python

Tải xuống từ tệp đính kèm

Để tải nội dung nghe nhìn xuống từ một tệp đính kèm, hãy truyền nội dung sau vào yêu cầu của bạn:

  • Với xác thực người dùng, hãy chỉ định phạm vi uỷ quyền chat.messages.readonly hoặc chat.messages. Với xác thực ứng dụng, hãy chỉ định phạm vi uỷ quyền chat.bot.
  • Gọi các phương thức sau của Google Chat:
    1. Lấy attachmentDataRef bằng cách gọi một trong các phương thức sau:
    2. Gọi phương thức download trên tài nguyên Media, rồi chỉ định attachmentDataRef.resourceName đã truy xuất trước đó làm media.download.resourceName.

Ví dụ sau đây tải một tệp đính kèm vào một thông báo:

Python

  1. Trong thư mục làm việc, hãy tạo một tệp có tên là chat_media_and_attachment_download.py.
  2. Thêm mã sau vào 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. Trong mã, hãy thay thế RESOURCE_NAME bằng attachmentDataRef.resourceName. Bạn có thể truy xuất một trong các cách sau:

  4. Trong thư mục làm việc, hãy tạo và chạy mẫu:

    python3 chat_media_and_attachment_download.py

Nếu thành công, phương thức này sẽ trả về nội dung tệp dưới dạng byte.

Để tải nội dung tệp xuống, hãy chọn một trong các phương pháp sau:

  • Bạn nên sử dụng lớp MediaIoBaseDownload trong Python. Lớp này chứa các phương thức để tải tệp xuống theo từng phần và lưu nội dung vào một luồng đầu ra.

  • Nếu bạn phải thực hiện yêu cầu HTTP theo cách thủ công, hãy gọi phương thức download và chỉ định phần tệp mà bạn muốn tải xuống bằng cách sử dụng dải byte với tiêu đề Range – ví dụ: Range: bytes=500-999.