Pobieranie multimediów z załącznika

Ten przewodnik wyjaśnia, 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 MESSAGEzdarzenie interakcji. Zdarzenie interakcji otrzymane przez aplikację zawiera treść żądania, czyli ładunek JSON reprezentujący 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ą (plik lokalny), czy plikiem przechowywanym na Dysku. MediaZasób reprezentuje plik przesłany do Google Chat, np. obraz, film lub dokument. AttachmentZasób reprezentuje instancję multimediów, czyli plik dołączony do wiadomości. AttachmentZasób zawiera metadane załącznika, np. miejsce jego zapisania.

Wymagania wstępne

Python

Pobieranie z załącznika

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

W tym przykładzie pobierany jest plik dołączony do wiadomości:

Python

  1. W katalogu roboczym utwórz plik o nazwie chat_media_and_attachment_download.py.
  2. 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(
                    '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 ciągiem znaków attachmentDataRef.resourceName, który możesz uzyskać na jeden z tych sposobów:

  4. W katalogu roboczym skompiluj i uruchom przykład:

    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, wykonaj jedną z tych czynności:

  • Zalecamy użycie 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.