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 du 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 correspond à la charge utile JSON représentant l'événement d'interaction, y compris les éventuelles pièces jointes. Les données de la pièce jointe diffèrent 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, par exemple des images, des vidéos et des documents. La ressource Attachment représente une instance de contenu multimédia (fichier) jointe à un message. La ressource Attachment inclut les métadonnées sur le rattachement, telles que son emplacement d'enregistrement.

Prérequis

Python

  • Python 3.6 ou version ultérieure
  • L'outil de gestion des packages pip
  • Les dernières bibliothèques clientes Google pour Python. Pour les installer ou les mettre à jour, exécutez la commande suivante dans votre interface de ligne de commande:

    pip3 install --upgrade google-api-python-client google-auth-oauthlib
    
  • Un projet Google Cloud avec l'API Google Chat activée et configurée Pour connaître la procédure à suivre, consultez Créer une application Google Chat.
  • Autorisation configurée pour l'application Chat. Le téléchargement de contenus multimédias prend en charge:

Télécharger à partir d'un fichier joint

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

L'exemple suivant permet de télécharger 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
    

Lorsque cette méthode fonctionne, elle 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 son 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 en utilisant une plage d'octets avec l'en-tête Range, par exemple: Range: bytes=500-999.