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 le contenu multimédia (un fichier) à partir d'un message dans Google Chat ;

Lorsque l'utilisateur envoie un message à votre application, Google Chat envoie une Événement d'interaction MESSAGE. L'événement d'interaction reçu par votre application inclut un corps de requête, qui correspond au Charge utile JSON représentant l'événement d'interaction, y compris les pièces jointes. La les données de la pièce jointe varient selon que la pièce jointe est contenu importé (fichier local) ou s'il s'agit 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. Attachment ressource inclut les métadonnées sur le rattachement, telles que où elles sont enregistrées.

Prérequis

Python

  • Python 3.6 ou version ultérieure
  • La fonction pip outil de gestion des packages
  • 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 dans lequel l'API Google Chat est 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 est compatible avec les deux types de fichiers suivants:

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

Pour télécharger un contenu multimédia à partir d'une pièce jointe, transmettez ce qui suit 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. Ajoutez 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 différentes manières:

  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 en 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 à télécharger ; le fichier en sections et 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 à télécharger à l'aide d'un octet plage avec l'en-tête Range, par exemple: Range: bytes=500-999.