PHP
adMob
oauth2
GoogleAdsense

AdMobからOAuth2認証してWeb認証なしでデータ取得する

概要

AdMobからデータ取得するまでの一連の流れを説明します。バッチ等定期的にデータを取得するという用途で利用したいため、Web認証を必要としないやり方で設定及び実装しています。

手順の大まかな流れ

  1. googleのデベロッパーコンソールから必要な情報を設定し、クライアントIDとクライアントシークレットを取得する。
  2. googleのデベロッパーコンソールからAdSense Management APIを有効にする。
  3. 取得したクライアントIDから認証コードを取得する。
  4. 認証コード、クライアントIDとクライアントシークレットを使い、リフレッシュトークンを取得する。
  5. クライアントIDとクライアントシークレット、リフレッシュトークンがあればアクセストークンが取得でき、APIを実行できる。

ポイント

  • AdMobからデータを取得するためのAPIはAdSense Management APIとなっている。
  • 通常のWebからのOAuthと一部設定が異なる。コンソールで登録時、アプリケーションの種類をその他にしたり等。
  • 一回APIを取得するだけならアクセストークンを取るだけでよいが、アクセストークンは有効期限があるので、バッチで継続的に取得するような用途の場合はリフレッシュトークンを取得する必要がある。

詳細な手順

クライアントIDとクライアントシークレットを取得する。

デベロッパーコンソールを開き、認証情報を開く。「作成」を押下。

https://console.developers.google.com/

01-make-auth.png

初回はプロジェクトを作る必要があるので作成する。
02-make-project.png

認証情報に戻り、認証情報を作成。種類は「OAuthクライアントID」を選択。
03-select-oauth-client-id.png

サービスを設定する必要があるので「同意画面を設定」を押下。
04-make-client_id.png

メールアドレスは入力済み。サービス名に適切なものを設定。他は入力不要。
05-edit-client-info.png

アプリケーション種類が選べるようになっているので「その他」を設定。
06-select-other.png

OAuthクライアントのクライアントIDとシークレットを取得。記録しておく。
07-get-oauth-client_id_secret.png

AdSense Management APIを有効にする

ライブラリでAdSenseで検索、AdSense Management APIを選択。
08-search-adsense-api.png

AdSense Management APIを有効にする。
09-set-available-adsense-api.png

認証コードを取得する

以下のURLをブラウザから開く。client_idの所には取得したクライアントIDを設定する。

https://accounts.google.com/o/oauth2/auth?client_id=<<ここにクライアントIDを入れる>>&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fadsense&response_type=code&access_type=offline

認証画面が出る。許可を選択。

10-get-access-key.png

認証コードが取得できる。

11-get-access-key.png

リフレッシュトークンを取得する

curlが使えるコンソール上から以下のコマンド実施。

curl --data "code=<<ここに認証コードを入れる>>" --data "client_id=<<ここにクライアントIDを入れる>>" --data "client_secret=<<ここにクライアントシークレットを入れる>>" --data "redirect_uri=urn:ietf:wg:oauth:2.0:oob" --data "grant_type=authorization_code" --data "access_type=offline" https://www.googleapis.com/oauth2/v4/token

アクセストークンとリフレッシュトークンが取得できる。リフレッシュトークンを記録しておく。

{
 "access_token": "<<アクセストークン>>",
 "token_type": "Bearer",
 "expires_in": 3600,
 "refresh_token": "<<リフレッシュトークン>>"
}

バッチからAPIを呼び出す

リフレッシュトークンから毎回アクセストークンを取得して、APIドキュメントに基づいてAPIを呼び出す。以下はPHPで期間のデータを取得する例。API自体の仕様は以下参照。
https://developers.google.com/adsense/management/v1.4/reference/?hl=ja

define('CLIENT_ID','<<クライアントID>>');
define('CLIENT_SECRET','<<クライアントシークレット>>');
define('RERESH_TOKEN','<<リフレッシュトークン>>');

$cmd='curl --data "refresh_token='.RERESH_TOKEN.'" --data "client_id='.CLIENT_ID.'" --data "client_secret='.CLIENT_SECRET.'" --data "grant_type=refresh_token" https://www.googleapis.com/oauth2/v4/token';
exec($cmd,$output,$return_var);
$output_str="";
foreach($output as $val){
    $output_str.=$val;
}
$data=json_decode($output_str,true);

$params = array(
    'access_token' => $data['access_token'],
    'startDate' => '<<取得開始日>>',
    'endDate' => '<<取得終了日>>',
    'dimension' => 'AD_UNIT_NAME',
    'metric' => 'EARNINGS',
    'useTimezoneReporting' => 'true',
);

$res = file_get_contents('https://www.googleapis.com/adsense/v1.4/reports?' . http_build_query($params));
$data=json_decode($res,true);
var_dump($data);

参考

AdWords APIでのOAuth認証の流れ
https://developers.google.com/adwords/api/docs/guides/authentication?hl=ja