Ten przewodnik wyjaśnia, jak używać metody download
w zasobach Media
interfejsu Google Chat API, aby pobrać multimedia (plik) z wiadomości w Google Chat.
Gdy użytkownik wyśle wiadomość do Twojej aplikacji, Google Chat wyśle MESSAGE
zdarzenie interakcji.
Zdarzenie interakcji otrzymane przez aplikację zawiera treść żądania, czyli dane JSON reprezentujące zdarzenie interakcji, w tym wszelkie załączniki. Dane w załączniku są różne w zależności od tego, czy jest to przesłany zasób (plik lokalny) czy plik zapisany na Dysku.
Media
reprezentuje plik przesłany do Google Chat, np. obrazy, filmy i dokumenty.
Zasób Attachment
reprezentuje instancję multimediów (plik) dołączonych do wiadomości. Zasób Attachment
zawiera metadane dotyczące załącznika, takie jak miejsce jego zapisu.
Wymagania wstępne
Python
- Konto Google Workspace w wersji Business lub Enterprise z dostępem do Google Chat.
- Skonfiguruj środowisko:
- Utwórz projekt Google Cloud.
- Skonfiguruj ekran zgody OAuth.
- Włącz i skonfiguruj interfejs Google Chat API, podając nazwę, ikonę i opis swojej aplikacji do obsługi czatu.
- Zainstaluj bibliotekę klienta interfejsu API Google dla języka Python.
- Utwórz poświadczenia dostępu na podstawie sposobu uwierzytelniania w żądaniu interfejsu Google Chat API:
- Aby uwierzytelnić się jako użytkownik czatu, utwórz dane logowania OAuth z identyfikatorem klienta i zapisz je w katalogu lokalnym w pliku JSON o nazwie
client_secrets.json
. - Aby uwierzytelnić się jako aplikacja Google Chat, utwórz dane logowania do konta usługi i zapisz je w pliku JSON o nazwie
credentials.json
.
- Aby uwierzytelnić się jako użytkownik czatu, utwórz dane logowania OAuth z identyfikatorem klienta i zapisz je w katalogu lokalnym w pliku JSON o nazwie
- Wybierz zakres autoryzacji w zależności od tego, czy chcesz uwierzytelnić użytkownika czy aplikację Google Chat.
Pobieranie z załączonego pliku
Aby pobrać multimedia z załączonego pliku, w żądaniu podaj:
- W przypadku uwierzytelniania użytkownika określ zakres autoryzacji
chat.messages.readonly
lubchat.messages
. W przypadku aplikacji uwierzytelniającej określ zakres autoryzacjichat.bot
. - wywołać te metody Google Chat:
W tym przykładzie pobierany jest plik dołączony do wiadomości:
Python
- W katalogu roboczym utwórz plik o nazwie
chat_media_and_attachment_download.py
. Dodaj do 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
wartościąattachmentDataRef.resourceName
, którą możesz 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ę powiedzie, metoda zwróci zawartość pliku jako bajty.
Aby pobrać zawartość pliku, wybierz jedną z tych opcji:
Zalecamy użycie klasy
MediaIoBaseDownload
w Pythonie, która zawiera metody do pobierania pliku w sekcjach i zapisywania zawartości do strumienia wyjściowego.Jeśli musisz ręcznie wysłać żądanie HTTP, 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, użyj interfejsu Drive API, aby uzyskać do niego dostęp.
- Przesyłanie multimediów jako załącznika pliku
- Pobieranie multimediów jako załącznika pliku
- Uzyskiwanie metadanych załącznika wiadomości