はじめに
フューチャー Advent Calendarの12日目の記事です。
Looker Studioに作成したレポートを、プログラムから取得したいなと思い立ち、Looker StudioのAPIがあることを知って、利用を試みたのですが、なかなかに躓いたのここで取得方法を紹介します。
Looker Studio APIでなにができる?
Looker Studioでは、レポートやデータソースなどのアセット情報や権限情報を取得できるAPIを提供しています。このAPIを利用することで、レポート管理の自動化が可能になります。
Looker Studio APIのReferenceはこちら
今回はレポートを取得してみたいと思います。
Looker Studio APIの利用方法
APIを実行するにあたり、Google Cloudの認証が必要になります。
認証方法には下記の2パターンがあります。
- OAUTHで認証して利用する方法
- サービスアカウントで利用する方法
認証方法の比較
認証方法 | メリット | デメリット |
---|---|---|
OAuth認証 | 対話的な操作に適している | ユーザー操作が必要 |
サービスアカウント | 自動化に適している | 初期設定が複雑 |
今回はそれぞれの方法で認証をし、APIを実行してみました。
OAUTHで認証してAPIを利用する方法
手順
※こちらの手順は、Google Cloudの公式ページに記載があります。
APIの有効化
OAuth クライアントの作成
作成したoauthクライアントの情報を利用して、アクセストークンの取得
※アクセストークンの取得方法は下記を参考にさせていただきました。
- まずは認可コードを取得します。
https://accounts.google.com/o/oauth2/v2/auth? scope={スコープ※1} &access_type=offline &include_granted_scope=true &response_type=code &redirect_uri={OAUTHクライアントで設定したリダイレクトURI※2} &client_id={OAUTHクライアント画面から取得したクライアントID}
※1:Looker Studio APIに必要なスコープを設定します。
今回はhttps://www.googleapis.com/auth/datastudio
を設定しています。
※2:今回はリダイレクトURLにhttp://localhost:8080
を設定しています。
- 上記のパラメータを埋めたうえで、改行コードを削除し、ブラウザにてURLにアクセスすると、認証画面に飛びます。
- 認証を実施すると、リダイレクトしたURLに「code」(認可コード)が下記のように設定されてきます。
http://localhost:8080/?code={認可コード}&scope=https://www.googleapis.com/auth/datastudio
- 続いて、上記で取得した認可コードを利用して、アクセストークンを取得します。
curl -d code={上記で取得した認可コード}\ -d client_id={OAUTHクライアント画面から取得したクライアントID} \ -d client_secret={OAUTHクライアント画面から取得したクライアントシークレット} \ -dredirect_uri={リダイレクトURI} -d grant_type=authorization_code --insecure https://accounts.google.com/o/oauth2/token
- 上記のパラメータを埋めたうえでcurlコマンドを実行すると、下記のようなレスポンスが返ってきます。
{ "access_token": "{アクセストークン}", "expires_in": 3562, "scope": "https://www.googleapis.com/auth/datastudio", "token_type": "Bearer" }
- 上記のパラメータを埋めたうえでcurlコマンドを実行すると、下記のようなレスポンスが返ってきます。
- これでアクセストークンを取得できました。
- 上記で取得したアクセストークンを利用して、下記のようにLooker Studio APIを実行すると、Looker Studioのアセットが取得できます!
# Request curl -H "Authorization: Bearer {アクセストークン}" "https://datastudio.googleapis.com/v1/assets:search?assetTypes=REPORT" # Response "assets": [ { "name": "8f57f8b2-b446-4e80-b47f-360e3c71cb21", "title": "test2", "assetType": "REPORT", "updateTime": "2024-12-10T12:07:20.011Z", "updateByMeTime": "1970-01-01T00:00:00Z", "createTime": "2024-12-10T12:07:20.011Z", "lastViewByMeTime": "2024-12-10T12:07:22.294Z", "owner": "hogehoge" }, ----割愛---- ]
私のLooker Studioのデータと一致していそうですね!
サービスアカウントで利用する方法
こちらの方法では、手動での認証を実施せずに、Looker Studio APIを利用することができます。
下記の手順を実施した場合にデータを取得することができました。
- サービスアカウントを作成
- 1で作成したサービスアカウントに対してドメイン全体の委任を実施し、Looker StudioへアクセスするScopeを付与。
- サービスアカウントのキーファイルを作成
- 下記のような実装で、アクセストークンを取得し、Looker Studio APIを実行し結果を取得する。
import jwt import requests import time def main(): data = {json形式のサービスアカウントキーを貼り付け} # アクセストークンの取得 token_url = "https://oauth2.googleapis.com/token" try: token_response = requests.post( token_url, data={ "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer", "assertion": jwt.encode( { "iss": data["client_email"], "sub": "{LookerStudioを閲覧するユーザ}", "scope": "https://www.googleapis.com/auth/datastudio", "aud": token_url, "iat": int(time.time()), "exp": int(time.time()) + 3600, }, data["private_key"], algorithm="RS256", ), }, timeout=10, ) except Exception as e: print(f"Error occurred: {e}") # Looker Studio APIを実行する。 try: headers = { "Authorization": f"Bearer {token_response.json()['access_token']}", } response = requests.get( "https://datastudio.googleapis.com/v1/assets:search?assetTypes=REPORT", headers=headers, timeout=10, ) except Exception as e: print(f"Error occurred: {e}") print(response.json) return response.json() if __name__ == "__main__": main()
サービスアカウントで認証方式での試行錯誤ポイント
- Looker Studio APIはgoogle-api-python-clientが対応していないため、アクセストークンの取得は自前で実装する必要がありました。
- アクセストークンの取得の際に、subイシューに設定するのはサービスアカウントのメールアドレスではなく、Looker Studioを見るアカウントのメールアドレスアドレスでした。
まとめ
Looker Studio APIを利用してレポートを取得することにチャレンジしてみました。
躓きのなかでOAUTHやGoogle Cloudの権限に関しての知識を学ぶことができてよかったです。