Medien aus einem Dateianhang herunterladen

In diesem Leitfaden wird erläutert, wie Sie die Methode download für die Ressource Media von Über die Google Chat API können Sie Medien (eine Datei) aus einer Nachricht in Google Chat herunterladen.

Wenn der Nutzer eine Nachricht an Ihre App sendet, sendet Google Chat eine MESSAGE-Interaktionsereignis. Das von Ihrer App empfangene Interaktionsereignis enthält einen Anfragetext, also den JSON-Nutzlast, die das Interaktionsereignis darstellt, einschließlich etwaiger Anhänge. Die Daten im Anhang unterschiedlich sind, je nachdem, ob der Anhang hochgeladene Inhalte (eine lokale Datei) oder eine in Google Drive gespeicherte Datei. Die Media-Ressource steht für eine in Google Chat hochgeladene Datei, z. B. Bilder, Videos und Dokumente. Die Attachment-Ressource steht für eine Instanz von Medien – eine Datei –, die an eine Nachricht angehängt ist. Das Attachment Ressource die Metadaten zum Anhang enthält, z. B. wo sie gespeichert wird.

Vorbereitung

Python

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

    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 Erstellen Sie eine Google Chat App.
  • Für die Chat App konfigurierte Autorisierung Das Herunterladen von Medien unterstützt beides:

Aus einem Dateianhang herunterladen

Um Medien aus einem Dateianhang herunterzuladen, übergeben Sie Anfrage:

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, mit dem Sie eines der auf folgende Arten:

  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 des Klasse MediaIoBaseDownload in Python, die Methoden zum Herunterladen enthält und speichern Sie den Inhalt 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, indem Sie einen Byte Bereich mit dem Range-Header, z. B. Range: bytes=500-999.