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 des contenus multimédias (un fichier) à partir d'un message dans Google Chat.

Lorsque l'utilisateur envoie un message à votre application, Google Chat distribue un MESSAGE événement d'interaction. 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 pièces jointes. Les données de la pièce jointe varient selon qu'il s'agit d'un contenu importé (un fichier local) ou d'un fichier stocké sur Drive. La ressource Media `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) jointe à un message. Elle inclut les métadonnées de la pièce jointe, par exemple l'emplacement où elle est enregistrée.Attachment

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(
                    '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. 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 la requête aboutit, 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 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).