Medien aus einem Dateianhang herunterladen

In diesem Leitfaden wird erläutert, wie Sie die Methode download für die Ressource Media der Google Chat API verwenden, um Medien (eine Datei) aus einer Nachricht in Google Chat herunterzuladen.

Wenn der Nutzer eine Nachricht an Ihre App sendet, sendet Google Chat ein MESSAGE-Interaktionsereignis. Das von Ihrer Anwendung empfangene Interaktionsereignis enthält einen Anfragetext. Das ist die JSON-Nutzlast, die das Interaktionsereignis darstellt, einschließlich aller Anhänge. Die Daten im Anhang unterscheiden sich je nachdem, ob es sich um einen hochgeladenen Inhalt (eine lokale Datei) oder eine in Google Drive gespeicherte Datei handelt. Die Ressource Media stellt eine in Google Chat hochgeladene Datei dar, z. B. Bilder, Videos und Dokumente. Die Ressource Attachment stellt eine Medieninstanz – eine Datei – dar, die an eine Nachricht angehängt ist. Die Ressource Attachment enthält die Metadaten des Anhangs, z. B. den Speicherort.

Voraussetzungen

Python

  • Python 3.6 oder höher
  • Das Paketverwaltungstool pip
  • Die neuesten Google-Clientbibliotheken für Python. Führen Sie den folgenden Befehl in der Befehlszeile aus, um sie zu installieren oder zu aktualisieren:

    pip3 install --upgrade google-api-python-client google-auth-oauthlib
    
  • Ein Google Cloud-Projekt mit aktivierter und konfigurierter Google Chat API. Eine Anleitung dazu finden Sie unter Google Chat-App erstellen.
  • Für die Chat-App konfigurierte Autorisierung. Das Herunterladen von Medien unterstützt Folgendes:

Aus einem Dateianhang herunterladen

Wenn Sie Medien aus einem Dateianhang herunterladen möchten, übergeben Sie in Ihrer Anfrage Folgendes:

Im folgenden Beispiel wird eine Datei heruntergeladen, die an eine Nachricht angehängt ist:

Python

  1. Erstellen Sie in Ihrem Arbeitsverzeichnis eine Datei mit dem Namen chat_media_and_attachment_download.py.
  2. Fügen Sie den folgenden Code in chat_media_and_attachment_download.py ein:

    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()
    
  3. Ersetzen Sie im Code RESOURCE_NAME durch attachmentDataRef.resourceName. Sie haben folgende Möglichkeiten:

  4. Erstellen Sie das Beispiel in Ihrem Arbeitsverzeichnis und führen Sie es aus:

    python3 chat_media_and_attachment_download.py
    

Wenn der Vorgang erfolgreich ist, gibt diese Methode den Dateiinhalt in Byte zurück.

Wählen Sie eine der folgenden Methoden aus, um den Dateiinhalt herunterzuladen:

  • Wir empfehlen die Verwendung der Klasse MediaIoBaseDownload in Python. Sie enthält Methoden zum Herunterladen der Datei in Abschnitten und zum Speichern der Inhalte in einem Ausgabestream.

  • Wenn Sie die HTTP-Anfrage manuell stellen müssen, rufen Sie die Methode download auf und geben Sie den Teil der Datei an, den Sie herunterladen möchten. Verwenden Sie dazu einen Bytebereich mit dem Header Range, z. B. Range: bytes=500-999.