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, wird in Google Chat ein MESSAGE-Interaktionsereignis gesendet. Das von Ihrer App empfangene Interaktionsereignis enthält einen Anfragetext, der die JSON-Nutzlast für 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 eine in Drive gespeicherte Datei handelt. Die Media-Ressource stellt eine in Google Chat hochgeladene Datei dar, 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 Ressource Attachment enthält die Metadaten des Anhangs, z. B. den Speicherort.

Vorbereitung

Python

Aus einem Dateianhang herunterladen

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

Im folgenden Beispiel wird eine an eine Nachricht angehängte Datei heruntergeladen:

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(
                    '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. Ersetzen Sie im Code RESOURCE_NAME durch attachmentDataRef.resourceName. Sie können attachmentDataRef.resourceName 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

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

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

  • Wir empfehlen, die Klasse MediaIoBaseDownload in Python zu verwenden, 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, indem Sie mit dem Header Range einen Bytebereich angeben, z. B. Range: bytes=500-999.