Pobieranie multimediów z załącznika

Z tego przewodnika dowiesz się, jak używać metody download w zasobie Media interfejsu Google Chat API do pobierania multimediów (pliku) z wiadomości w Google Chat.

Gdy użytkownik wyśle wiadomość do Twojej aplikacji, Google Chat wyśle MESSAGE zdarzenie interakcji. Zdarzenie interakcji odebrane przez Twoją aplikację zawiera treść żądania, która jest ładunkiem JSON reprezentującym zdarzenie interakcji, w tym wszelkie załączniki. Dane w załączniku różnią się w zależności od tego, czy załącznik jest przesłaną treścią (plikiem lokalnym), czy plikiem przechowywanym na Dysku. Zasób Media reprezentuje plik przesłany do Google Chat, np. obrazy, filmy i dokumenty. Zasób Attachment reprezentuje instancję multimediów – plik – dołączony do wiadomości. Zasób Attachment zawiera metadane załącznika, np. miejsce jego zapisania.

Wymagania wstępne

Python

Pobieranie z załącznika

Aby pobrać multimedia z załącznika, w żądaniu podaj te informacje:

  • W przypadku uwierzytelniania użytkownika określ chat.messages.readonly lub chat.messages zakres autoryzacji. W przypadku uwierzytelniania aplikacji, określ zakres autoryzacji chat.bot.
  • Wywołaj te metody Google Chat:
    1. Pobierz attachmentDataRef, wywołując jedną z tych metod:
    2. Wywołaj metodę download w zasobie Media i określ wcześniej pobrany element attachmentDataRef.resourceName jako media.download.resourceName.

Ten przykład pokazuje, jak pobrać plik dołączony do wiadomości:

Python

  1. W katalogu roboczym utwórz plik o nazwie chat_media_and_attachment_download.py.
  2. W pliku chat_media_and_attachment_download.py umieść 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(
                    '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. W kodzie zastąp RESOURCE_NAME elementem attachmentDataRef.resourceName, który możesz pobrać na jeden z tych sposobów:

  4. W katalogu roboczym skompiluj i uruchom próbkę:

    python3 chat_media_and_attachment_download.py

Jeśli operacja się uda, ta metoda zwróci zawartość pliku w postaci bajtów.

Aby pobrać zawartość pliku, wybierz jedną z tych metod:

  • Zalecamy używanie klasy MediaIoBaseDownload w Pythonie, która zawiera metody pobierania pliku w sekcjach i zapisywania zawartości w strumieniu wyjściowym.

  • 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łówkiem Range, np. Range: bytes=500-999.