2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フューチャーAdvent Calendar 2024

Day 12

Looker Studio APIを利用してレポートのデータ一覧を取得する方法

Last updated at Posted at 2024-12-11

はじめに

フューチャー 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の有効化
  • Google Cloud Consoleで「Looker Studio API」を検索
  • 「有効にする」をクリック
    image.png
OAuth クライアントの作成
  • Google Cloud Consoleの「APIとサービス」から「認証情報を選択」
    image.png
  • 「認証情報を作成」からOAUTHクライアントを作成(↓作成結果)
    image.png
作成した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"
      }
      
  • これでアクセストークンを取得できました。
  • 上記で取得したアクセストークンを利用して、下記のように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のデータと一致していそうですね!
image.png

サービスアカウントで利用する方法

こちらの方法では、手動での認証を実施せずに、Looker Studio APIを利用することができます。
下記の手順を実施した場合にデータを取得することができました。

  1. サービスアカウントを作成
  2. 1で作成したサービスアカウントに対してドメイン全体の委任を実施し、Looker StudioへアクセスするScopeを付与。
  3. サービスアカウントのキーファイルを作成
  4. 下記のような実装で、アクセストークンを取得し、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の権限に関しての知識を学ぶことができてよかったです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?