このガイドでは、Google Chat API の Media リソースの download メソッドを使用して、Google Chat のメッセージからメディア(ファイル)をダウンロードする方法について説明します。
ユーザーがアプリにメッセージを送信すると、Google Chat は
MESSAGE インタラクション イベントをディスパッチします。
アプリが受信するインタラクション イベントには、リクエスト本文が含まれます。これは、添付ファイルを含むインタラクション イベントを表す JSON ペイロードです。添付ファイルのデータは、添付ファイルがアップロードされたコンテンツ(ローカル ファイル)であるか、ドライブに保存されているファイルであるかによって異なります。
Media リソース
は、画像、動画、ドキュメントなど、Google Chat にアップロードされたファイルを表します。
Attachment リソース
は、メッセージに添付されたメディア(ファイル)のインスタンスを表します。Attachment リソースには、保存場所など、添付ファイルに関するメタデータが含まれます。
前提条件
Python
- Google Chat にアクセスできる Business または Enterprise Google Workspace アカウント。
- 環境を設定します。
- Google Cloud プロジェクトを作成します。
- OAuth 同意画面を構成します。
- Chat アプリの名前、 アイコン、説明を使用して、Google Chat API を有効にして構成します。
- Python Google API クライアント ライブラリをインストールします。
-
Google Chat API リクエストで認証を行う方法に基づいて、アクセス認証情報を作成します。
- Chat ユーザーとして認証するには、
OAuth クライアント ID
認証情報を作成し、認証情報を JSON ファイルとして
credentials.jsonという名前でローカル ディレクトリに保存します。 - Chat アプリとして認証するには、
サービス アカウント
認証情報を作成し、認証情報を
credentials.jsonという名前の JSON ファイルとして保存します。
- Chat ユーザーとして認証するには、
OAuth クライアント ID
認証情報を作成し、認証情報を JSON ファイルとして
- ユーザーとして認証するか、 Chat アプリ として認証するかに応じて、認可スコープを選択します。
添付ファイルからダウンロードする
添付ファイルからメディアをダウンロードするには、リクエストで次の情報を渡します。
- ユーザー認証の場合は、
chat.messages.readonlyまたはchat.messages認可スコープを指定します。アプリ認証の場合は、 アプリ認証、chat.bot認可スコープを指定します。 - 次の Google Chat メソッドを呼び出します。
- 次のいずれかのメソッドを呼び出して、
attachmentDataRefを取得します。 downloadメソッドMediaリソースの を呼び出し、以前に取得した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( '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()コードで、
RESOURCE_NAMEをattachmentDataRef.resourceNameに置き換えます。これは、次のいずれかの方法で取得できます。作業ディレクトリでサンプルをビルドして実行します。
python3 chat_media_and_attachment_download.py
成功すると、このメソッドはファイルの内容をバイトとして返します。
ファイルの内容をダウンロードするには、次のいずれかの方法を選択します。
Python の
MediaIoBaseDownloadクラスを使用することをおすすめします。このクラスには、ファイルをセクションに分割してダウンロードし、その内容を出力ストリームに保存するメソッドが含まれています。HTTP リクエストを手動で行う必要がある場合は、
downloadメソッドを呼び出し、 バイト 範囲をRangeヘッダーで使用してダウンロードするファイルの部分を指定します(例:Range: bytes=500-999)。
関連トピック
- メッセージがドライブ ファイルの場合は、 Drive API を使用してファイルにアクセスします。
- メディアを添付ファイルとしてアップロードする
- メディアを添付ファイルとしてダウンロードする
- メッセージの添付ファイルに関するメタデータを取得する