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, löst Google Chat ein MESSAGE-Interaktionsereignis aus. Das von Ihrer App empfangene Interaktionsereignis enthält einen Anfragetext. Dabei handelt es sich um die JSON-Nutzlast, die das Interaktionsereignis darstellt, einschließlich etwaiger Anhänge. Die Daten im Anhang unterscheiden sich je nachdem, ob es sich um hochgeladene Inhalte (eine lokale Datei) oder um eine in Drive gespeicherte Datei handelt. Die Ressource Media steht für eine in Google Chat hochgeladene Datei, 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 zum Anhang, z. B. den Speicherort.

Voraussetzungen

Python

  • Python 3.6 oder höher
  • Das Paketverwaltungstool pip
  • Die aktuellen 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, in dem die Google Chat API aktiviert und konfiguriert ist. Eine entsprechende Anleitung 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

Um Medien aus einem Dateianhang herunterzuladen, ü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 können dann auf eine der folgenden Arten abrufen:

  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, die Methoden zum Herunterladen der Datei in Abschnitten und zum Speichern des Inhalts in einem Ausgabestream enthält.

  • 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.