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 API Google Chat để tải nội dung nghe nhìn xuống (tệp) trong 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 nội dung yêu cầu 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 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
đại diện cho một thực thể của nội dung nghe nhìn, một tệp và được đính kèm vào một thông báo. 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
- Python 3.6 trở lên
- Công cụ quản lý gói pip
Các thư viện ứng dụng mới nhất của Google dành cho Python. Để cài đặt hoặc cập nhật các công cụ này, hãy chạy lệnh sau trong giao diện dòng lệnh của bạn:
pip3 install --upgrade google-api-python-client google-auth-oauthlib
- Một dự án trên Google Cloud đã bật và thiết lập API Google Chat. Để biết các bước, hãy xem bài viết Tạo ứng dụng Google Chat.
Hoạt động uỷ quyền đã được định cấu hình cho ứng dụng Chat. Việc tải nội dung nghe nhìn xuống hỗ trợ cả:
- Xác thực người dùng với phạm vi uỷ quyền
chat.messages.readonly
hoặcchat.messages
. - Xác thực ứng dụng với phạm vi uỷ quyền
chat.bot
.
- Xác thực người dùng với phạm vi uỷ quyền
Tải xuống từ mộ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 tính năng xác thực người dùng, hãy chỉ định phạm vi uỷ quyền
chat.messages.readonly
hoặcchat.messages
. Với tính năng xác thực ứng dụng, hãy chỉ định phạm vi uỷ quyềnchat.bot
. - Gọi các phương thức sau đây trong Google Chat:
- Tải
attachmentDataRef
bằng cách gọi một trong các phương thức sau: - Gọi phương thức
download
trên tài nguyênMedia
và chỉ địnhattachmentDataRef.resourceName
đã truy xuất trước đó dưới dạngmedia.download.resourceName
.
- Tải
Ví dụ sau đây tải xuống một tệp được đính kèm vào thư:
Python
- Trong thư mục đang làm việc, hãy tạo một tệp có tên là
chat_media_and_attachment_download.py
. Đưa 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( '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()
Trong mã này, hãy thay thế
RESOURCE_NAME
bằngattachmentDataRef.resourceName
. Bạn có thể truy xuất bằng một trong các cách sau:Trong thư mục đang 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 có chứa các phương thức để tải tệp xuống trong các phần và lưu nội dung vào 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
rồi chỉ định phần tệp bạn muốn tải xuống bằng cách sử dụng phạm vi byte với tiêu đềRange
, ví dụ:Range: bytes=500-999
.
Chủ đề có liên quan
- Nếu thông báo là một tệp trên Drive, hãy sử dụng API Drive để truy cập vào tệp đó.
- Tải nội dung nghe nhìn lên dưới dạng tệp đính kèm
- Tải nội dung nghe nhìn xuống dưới dạng tệp đính kèm
- Xem siêu dữ liệu về tệp đính kèm cho tin nhắn