Z tego przewodnika dowiesz się, jak używać metody download
w zasobie Media
interfejsu Google Chat API do pobierania multimediów (plików) z wiadomości w Google Chat.
Gdy użytkownik wysyła wiadomość do Twojej aplikacji, Google Chat wysyła zdarzenie interakcji MESSAGE
.
Zdarzenie interakcji odebrane przez aplikację zawiera treść żądania, czyli ładunek JSON reprezentujący zdarzenie interakcji, wraz ze wszystkimi załącznikami. Dane w załączniku różnią się w zależności od tego, czy jest to przesłana treść (plik lokalny) czy plik przechowywany na Dysku. Zasób Media
reprezentuje plik przesłany do Google Chat, np. obrazy, filmy i dokumenty.
Zasób Attachment
reprezentuje instancję multimediów – pliku – dołączonego do wiadomości. Zasób Attachment
zawiera metadane załącznika, np. miejsce jego zapisania.
Wymagania wstępne
Python
- Python w wersji 3.6 lub nowszej
- Narzędzie do zarządzania pakietami pip
Najnowsze biblioteki klienta Google dla języka Python. Aby je zainstalować lub zaktualizować, uruchom to polecenie w interfejsie wiersza poleceń:
pip3 install --upgrade google-api-python-client google-auth-oauthlib
- Projekt Google Cloud z włączonym i skonfigurowanym interfejsem Google Chat API. Instrukcje znajdziesz w artykule Tworzenie aplikacji w Google Chat.
Autoryzacja skonfigurowana dla aplikacji Google Chat. Pobieranie multimediów obsługuje:
- Uwierzytelnianie użytkowników z zakresem autoryzacji
chat.messages.readonly
lubchat.messages
. - Uwierzytelnianie aplikacji z zakresem autoryzacji
chat.bot
.
- Uwierzytelnianie użytkowników z zakresem autoryzacji
Pobieranie z załącznika
Aby pobrać multimedia z załącznika pliku, przekaż w żądaniu te dane:
- W przypadku uwierzytelniania użytkownika określ zakres autoryzacji
chat.messages.readonly
lubchat.messages
. Przy użyciu uwierzytelniania aplikacji określ zakres autoryzacjichat.bot
. - Wywołaj te metody w Google Chat:
- Uzyskaj
attachmentDataRef
, wywołując jedną z tych metod:- Metoda
get
w zasobieAttachment
. - Metoda
get
lub metodalist
wMessage
zasobie.
- Metoda
- Wywołaj metodę
download
w zasobieMedia
i określ wcześniej pobraneattachmentDataRef.resourceName
jakomedia.download.resourceName
.
- Uzyskaj
Ten przykład umożliwia pobranie pliku załączonego do wiadomości:
Python
- W katalogu roboczym utwórz plik o nazwie
chat_media_and_attachment_download.py
. Umieść w pliku
chat_media_and_attachment_download.py
ten kod: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()
W kodzie zastąp
RESOURCE_NAME
elementemattachmentDataRef.resourceName
. Możesz to pobrać na jeden z tych sposobów:W katalogu roboczym skompiluj i uruchom przykład:
python3 chat_media_and_attachment_download.py
Jeśli operacja się uda, metoda zwróci zawartość pliku w bajtach.
Aby pobrać zawartość pliku, wybierz jedną z tych opcji:
Zalecamy użycie w Pythonie klasy
MediaIoBaseDownload
, która zawiera metody pobierania pliku w sekcjach i zapisywania jego zawartości w strumieniu wyjściowym.Jeśli żądanie HTTP trzeba wykonać ręcznie, wywołaj metodę
download
i określ część pliku, którą chcesz pobrać, używając zakresu bajtów z nagłówkiemRange
, np.Range: bytes=500-999
.
Powiązane artykuły
- Jeśli wiadomość jest plikiem na Dysku, skorzystaj z interfejsu Drive API, aby uzyskać dostęp do pliku.
- Przesyłanie multimediów jako załącznika
- Pobieranie multimediów jako załącznika
- Uzyskiwanie metadanych załącznika do wiadomości