3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

curlでGoogle BigQueryのOAuthトークンを取得しAPIにアクセスする

Posted at

本記事ではcurlを使用してGoogle BigQueryのAPIへのアクセスする方法を紹介します。Webクライアントを実装する前にアクセストークンの取得からAPIアクセスまで一連のフローをテストしたいときなどに参考にしてください。

BigQuery APIの有効化

GCPのコンソールにアクセスします。「APIとサービス」の「ライブラリ」を選択し、APIライブラリ一覧画面を開きます。

image.png

「BigQuery」で検索するとBigQuery APIが表示されますのでこれをクリックします。

image.png

BigQuery APIの内容を確認し「有効にする」をクリックします。

image.png

Google Cloud Platformでの認証情報の設定

GCPのコンソールにアクセスします。「APIとサービス」の「認証情報」を選択し、認証情報画面を開きます。

image.png

同意画面の構成

同意画面が構成されていない場合、以下の手順で同意画面を構成します。
「同意画面を構成」をクリックしOAuth同意画面設定画面を開きます。

image.png

「外部」が選択されていることを確認し「作成」をクリックします。

image.png

アプリケーション名に適当な名称を入力し、画面下の「保存」をクリックします。

image.png

認証情報の作成

画面上の「認証情報を作成」を展開し「OAuthクライアントID」をクリックします。

image.png

「アプリケーションの種類」から「ウェブアプリケーション」を選択、「名前」に適当なアプリケーション名を入力し、「承認済みリダイレクトURI」に適当なローカルのアドレスを入力します。最後に「作成」をクリックします。

image.png

作成が完了するとクライアントIDとクライアントシークレットが生成され画面に表示されるので、それぞれテキストエディタなどにメモしておきます。

image.png

これで認証情報が作成されました。作成した認証情報をクリックするとクライアントIDとクライアントシークレットを確認できます。

image.png

認証フローの実行

認可コードの取得

ブラウザで以下のURLにアクセスします。<クライアントID>には認証情報の作成時に取得したクライアントID、<リダイレクトURI>には同じく認証情報の作成時に設定したリダイレクトURIを設定してください。

https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fbigquery&<クライアントID>&response_type=code&redirect_uri=<リダイレクトURI>

上記URLにアクセスするとGoogleアカウントのログイン画面が表示されますのでBigQueryにアクセスするアカウントでログインしてください。ログインが完了すると下図のようなアプリケーションの認証画面に遷移します。アプリケーション名等を確認し「Allow」をクリックしてください。

image.png

認証が完了するとブラウザのURLに認可コードが表示されますのでこれをメモしておきます。

image.png

OAuthアクセストークンの取得

curlでOAuthアクセストークンを取得します。<認可コード>には前節で取得した認可コード、<クライアントID>、<クライアントシークレット>には認証情報の作成時に取得したクライアントIDとクライアントシークレット、<リダイレクトURI>には認証情報の作成時に設定したリダイレクトURIを設定してください。

curl -X POST -d code=<認可コード> -d client_id=<クライアントID> -d client_secret=<クライアントシークレット> -d redirect_uri=<リダイレクトURI> -d grant_type=authorization_code https://accounts.google.com/o/oauth2/token

上記コマンドを実行しOAuthアクセストークンのリクエストに成功するとアクセストークンが返ってきます。

>curl -X POST -d code=4/zgE5ZQ0xcOuDM6I207Gv4R_TiKHD-8XjSsVFKry99AkU5uoe8hIiagCoDdAPzO3t7HOsTITWUXrp9XIdcyuduko -d client_id=503930144471-9cuc9vldcq9v0cj546p44lfhhf9vk1rg.apps.googleusercontent.com -d client_secret=X-Ew1NEVWEeIAB8qMDX7lZ_T -d redirect_uri=http://localhost:33333 -d grant_type=authorization_code https://accounts.google.com/o/oauth2/token
{
  "access_token": "ya29.a0AfH6SMBYIJFoAH15uHXbxFAPbMoS0ZWCxkh3EvaCp9nrERah2QWJuqs_RAXW5t-TbpATyIsA275ZzO7e-921_iWrMOAdsHEnIHI8uANNEfr0Dy8YNgRMUuWi53_k1v5shYKq_8oYBknSa4BdvwlUOik1U5OUUlqlYTk",
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/bigquery",
  "token_type": "Bearer"
}

APIへのアクセス

それでは取得したアクセストークンを使ってAPIにアクセスしてみます。今回はテスト用に以下のようなデータを作成しました。データセット「ProductionManagement」の中に「Products」というテーブルがあります。このテーブルは3つのフィールドを持っています。

image.png

BigQueryのREST APIは以下のリファレンスを参考にしてください。

はじめに指定したテーブルの情報を取得するAPIにアクセスします。上記リファレンスの「RESTリファレンス」を展開し、「tables」の「get」の項目を表示します。

image.png

この「HTTP Request」のURLがテーブル情報のエンドポイントになります。APIへアクセスするにはリクエストヘッダに"Authorization: Bearer <アクセストークン>"を設定する必要があります。curlでアクセスする際には-Hオプションを指定してヘッダを設定してください。<アクセストークン>には先ほど取得したアクセストークンを設定します。

curl -X GET -H "Authorization: Bearer <アクセストークン>" https://bigquery.googleapis.com/bigquery/v2/projects/<プロジェクトID>/datasets/<データセットID>/tables/<テーブルID>

実際にこのAPIにアクセスした結果を示します。先ほど生成したアクセストークンを利用し、指定したテーブルの情報が取得できました。

>curl -X GET -H "Authorization: Bearer ya29.a0AfH6SMBYIJFoAH15uHXbxFAPbMoS0ZWCxkh3EvaCp9nrERah2QWJuqs_RAXW5t-TbpATyIsA275ZzO7e-921_iWrMOAdsHEnIHI8uANNEfr0Dy8YNgRMUuWi53_k1v5shYKq_8oYBknSa4BdvwlUOik1U5OUUlqlYTk" https://bigquery.googleapis.com/bigquery/v2/projects/spherical-booth-277000/datasets/ProductionManagement/tables/Products
{
  "kind": "bigquery#table",
  "etag": "7OOdMulNhhIN6uD4pOspew==",
  "id": "spherical-booth-277000:ProductionManagement.Products",
  "selfLink": "https://bigquery.googleapis.com/bigquery/v2/projects/spherical-booth-277000/datasets/ProductionManagement/tables/Products",
  "tableReference": {
    "projectId": "spherical-booth-277000",
    "datasetId": "ProductionManagement",
    "tableId": "Products"
  },
  "schema": {
    "fields": [
      {
        "name": "Code",
        "type": "STRING",
        "mode": "NULLABLE"
      },
      {
        "name": "Name",
        "type": "STRING",
        "mode": "NULLABLE"
      },
      {
        "name": "Category",
        "type": "STRING",
        "mode": "NULLABLE"
      }
    ]
  },
  "numBytes": "0",
  "numLongTermBytes": "0",
  "numRows": "0",
  "creationTime": "1589248578107",
  "expirationTime": "1594432578107",
  "lastModifiedTime": "1589248578248",
  "type": "TABLE",
  "location": "US"
}

おわりに

curlを使ってBigQueryのAPIにアクセスする方法を紹介しました。ここで紹介した方法は他のGoogle Cloud PlatformのAPIにも適用できますので参考にしてください。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?