このガイドでは、Google Chat API の Media
リソースの download
メソッドを使用して、Google Chat のメッセージからメディア(ファイル)をダウンロードする方法について説明します。
ユーザーがアプリにメッセージを送信すると、Google Chat から MESSAGE
インタラクション イベントが送信されます。アプリが受信する操作イベントにはリクエストの本文が含まれます。これは、操作イベント(添付ファイルを含む)を表す JSON ペイロードです。添付ファイルのデータは、添付ファイルがコンテンツ(ローカル ファイル)としてアップロードされたものか、ドライブに保存されたファイルかによって異なります。Media
リソースは、画像、動画、ドキュメントなど、Google Chat にアップロードされたファイルを表します。Attachment
リソースは、メッセージに添付されたメディア(ファイル)のインスタンスを表します。Attachment
リソースには、アタッチメントに関するメタデータ(保存場所など)が含まれます。
前提条件
Python
- Python 3.6 以降
- pip パッケージ管理ツール
Python 用の最新の Google クライアント ライブラリ。これらをインストールまたは更新するには、コマンドライン インターフェースで次のコマンドを実行します。
pip3 install --upgrade google-api-python-client google-auth-oauthlib
- Google Chat API が有効で構成された Google Cloud プロジェクト。手順については、Google Chat アプリを作成するをご覧ください。
Chat アプリ用に構成された承認です。 メディアのダウンロードは、次の両方に対応しています。
添付ファイルからダウンロードする
添付ファイルからメディアをダウンロードするには、リクエストに次の内容を渡します。
- ユーザー認証で、承認スコープを
chat.messages.readonly
またはchat.messages
に指定します。アプリ認証で、chat.bot
承認スコープを指定します。 - 次の Google Chat メソッドを呼び出します。
- 次のいずれかのメソッドを呼び出して、
attachmentDataRef
を取得します。 Media
リソースでdownload
メソッドを呼び出し、以前に取得したattachmentDataRef.resourceName
をmedia.download.resourceName
として指定します。
- 次のいずれかのメソッドを呼び出して、
次の例では、メッセージに添付されたファイルをダウンロードします。
Python
- 作業ディレクトリに
chat_media_and_attachment_download.py
という名前のファイルを作成します。 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()
コードで
RESOURCE_NAME
をattachmentDataRef.resourceName
に置き換えます。これにより、次のいずれかの方法で取得できます。作業ディレクトリで、サンプルをビルドして実行します。
python3 chat_media_and_attachment_download.py
成功すると、このメソッドはファイル コンテンツをバイトとして返します。
ファイルの内容をダウンロードするには、次のいずれかの方法を選択します。
Python では、
MediaIoBaseDownload
クラスを使用することをおすすめします。このクラスには、ファイルをセクション単位でダウンロードし、コンテンツを出力ストリームに保存するメソッドが含まれています。HTTP リクエストを手動で作成する必要がある場合は、
download
メソッドを呼び出し、Range
ヘッダーを含むバイト範囲を使用して、ダウンロードするファイルの部分を指定します(例:Range: bytes=500-999
)。
関連トピック
- メッセージがドライブのファイルの場合は、Drive API を使用してファイルにアクセスします。
- メディアを添付ファイルとしてアップロードする
- メディアを添付ファイルとしてダウンロードする
- メッセージの添付ファイルに関するメタデータを取得する