Medien aus einem Dateianhang herunterladen

In diesem Leitfaden wird erläutert, wie Sie die download-Methode für die Media-Ressource 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 App 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 hochgeladene Inhalte (eine lokale Datei) oder um eine in Drive gespeicherte Datei handelt. Die Ressource Media steht für eine Datei, die in Google Chat hochgeladen wurde, z. B. Bilder, Videos und Dokumente. Die Attachment-Ressource stellt eine Instanz von Medien dar, also eine Datei, die an eine Nachricht angehängt ist. Die Attachment-Ressource enthält die Metadaten zum Anhang, z. B. den Speicherort.

Vorbereitung

Python

Über einen Dateianhang herunterladen

Wenn Sie Medien aus einem angehängten Dateien herunterladen möchten, geben Sie Folgendes in Ihrer Anfrage an:

  • Gib bei der Nutzerauthentifizierung den Autorisierungsbereich chat.messages.readonly oder chat.messages an. Geben Sie bei der App-Authentifizierung den Autorisierungsbereich chat.bot an.
  • Rufen Sie die folgenden Google Chat-Methoden auf:
    1. Rufen Sie eine der folgenden Methoden auf, um attachmentDataRef abzurufen:
    2. Rufen Sie die Methode download auf der Media-Ressource auf und geben Sie die zuvor abgerufene attachmentDataRef.resourceName als media.download.resourceName an.

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 in chat_media_and_attachment_download.py den folgenden Code 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 attachmentDataRef.resourceName auf eine der folgenden Arten abrufen:

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

    python3 chat_media_and_attachment_download.py

Bei Erfolg gibt diese Methode den Dateiinhalt als Bytes zurück.

Sie haben folgende Möglichkeiten, 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 des Inhalts in einem Ausgabestream.

  • Wenn Sie die HTTP-Anfrage manuell senden 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 Range-Header, z. B. Range: bytes=500-999.