Télécharger du contenu multimédia à partir d'un fichier joint

Ce guide explique comment utiliser la méthode download sur la ressource Media de l'API Google Chat pour télécharger un contenu multimédia (un fichier) à partir d'un message dans Google Chat.

Lorsque l'utilisateur envoie un message à votre application, Google Chat envoie un événement d'interaction MESSAGE. L'événement d'interaction reçu par votre application inclut un corps de requête, qui est la charge utile JSON représentant l'événement d'interaction, y compris les pièces jointes. Les données de la pièce jointe sont différentes selon qu'il s'agit d'un contenu importé (fichier local) ou d'un fichier stocké sur Drive. La ressource Media représente un fichier importé dans Google Chat, comme des images, des vidéos et des documents. La ressource Attachment représente une instance de contenu multimédia (un fichier) joint à un message. La ressource Attachment inclut les métadonnées sur la pièce jointe, telles que l'emplacement où elle est enregistrée.

Prérequis

Python

Télécharger à partir d'une pièce jointe

Pour télécharger des contenus multimédias à partir d'une pièce jointe, transmettez les éléments suivants dans votre requête:

L'exemple suivant télécharge un fichier joint à un message:

Python

  1. Dans votre répertoire de travail, créez un fichier nommé chat_media_and_attachment_download.py.
  2. Incluez le code suivant dans chat_media_and_attachment_download.py:

    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. Dans le code, remplacez RESOURCE_NAME par attachmentDataRef.resourceName, que vous pouvez récupérer de l'une des manières suivantes:

  4. Dans votre répertoire de travail, créez et exécutez l'exemple:

    python3 chat_media_and_attachment_download.py

Si l'opération réussit, cette méthode renvoie le contenu du fichier sous forme d'octets.

Pour télécharger le contenu du fichier, choisissez l'une des approches suivantes:

  • Nous vous recommandons d'utiliser la classe MediaIoBaseDownload en Python, qui contient des méthodes permettant de télécharger le fichier par sections et d'enregistrer le contenu dans un flux de sortie.

  • Si vous devez effectuer la requête HTTP manuellement, appelez la méthode download et spécifiez la partie du fichier que vous souhaitez télécharger à l'aide d'une plage d'octets avec l'en-tête Range (par exemple, Range: bytes=500-999).