GoogleのOAuth2を利用したAPIを使う

GoogleのOAuth2利用のAPIを使用するまでの流れは以下の通りです。

  1. APIを有効化する
  2. OAuth2を取得する
  3. APIを使用する

※OAuth2認証が必要なGoogleAPIを使用する場合、だいたい同じ流れになります。

APIを有効化する

OAuth2を取得する

  1. GoogleAPIsでAPIのOAuth2に<リダイレクトURI>を設定する
    • Google API Console API Library
    • 上記ページで<リダイレクトURI>を設定する
      • 例:https://www.bugbugnow.net/
      • 自身のWebページ等を設定する
  2. 以下のアドレスにWebブラウザからアクセスして承認する
    • https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=<クライアントID>&redirect_uri=<リダイレクトURI>&scope=https://www.googleapis.com/auth/photoslibrary&access_type=offline
    • <クライアントID>と<リダイレクトURI>をメモした値に置き換える
    • ※scopeを変更することで別のAPIにも流量できます
  3. リダイレクト先のURLをメモする
    • URL内の<コード>をメモする
      • 例:4/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  4. curlコマンドを使用して<アクセストークン>と<リフレッシュトークン>を取得する
    • curl -s --data "code=<コード>" --data "client_id=<クライアントID>" --data "client_secret=<シークレットID>" --data "redirect_uri=<リダイレクトURI>" --data "grant_type=authorization_code" --data "access_type=offline" https://www.googleapis.com/oauth2/v4/token
    • <コード>、<クライアントID>、<シークレットID>、<リダイレクトURI>をメモした値に置き換える
    • 取得した<リフレッシュトークン>をメモする。
      • 例:1/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

APIを使用する

以下がGoogleAppsScriptでAPIを使用してアルバムタブ一覧を取得するサンプルコードです。

test.gsfunction photos() {
  var url = 'https://photoslibrary.googleapis.com/v1/albums';
  var options = {
    method:"GET",
    contentType:"application/json",
    headers:{
      Authorization:"Bearer "+fetchAccessToken().access_token,
    }
  };
  var res = UrlFetchApp.fetch(url, options);

  // ログに取得データを出力
  Logger.log(res.getContentText('UTF-8'));
}

// アクセストークンの取得
function fetchAccessToken(client_id, client_secret, redirect_uri, refresh_token) {
  var client_id     = '<クライアントID>';
  var client_secret = '<シークレットID>';
  var redirect_uri  = '<リダイレクトURI>';
  var refresh_token = '<リフレッシュトークン>';

  var url = "https://www.googleapis.com/oauth2/v4/token";
  var options = {
    method: "POST",
    payload: {
      refresh_token: refresh_token,
      client_id: client_id,
      client_secret: client_secret,
      redirect_uri: redirect_uri,
      grant_type: "refresh_token"
    },
    muteHttpExceptions : true
  };
  var res = UrlFetchApp.fetch(url, options);
  return JSON.parse(res.getContentText());
  // fetchAccessToken().access_token;
}