概要
AdMobからデータ取得するまでの一連の流れを説明します。バッチ等定期的にデータを取得するという用途で利用したいため、Web認証を必要としないやり方で設定及び実装しています。
手順の大まかな流れ
- googleのデベロッパーコンソールから必要な情報を設定し、クライアントIDとクライアントシークレットを取得する。
- googleのデベロッパーコンソールからAdSense Management APIを有効にする。
- 取得したクライアントIDから認証コードを取得する。
- 認証コード、クライアントIDとクライアントシークレットを使い、リフレッシュトークンを取得する。
- クライアントIDとクライアントシークレット、リフレッシュトークンがあればアクセストークンが取得でき、APIを実行できる。
ポイント
- AdMobからデータを取得するためのAPIはAdSense Management APIとなっている。
- 通常のWebからのOAuthと一部設定が異なる。コンソールで登録時、アプリケーションの種類をその他にしたり等。
- 一回APIを取得するだけならアクセストークンを取るだけでよいが、アクセストークンは有効期限があるので、バッチで継続的に取得するような用途の場合はリフレッシュトークンを取得する必要がある。
詳細な手順
クライアントIDとクライアントシークレットを取得する。
デベロッパーコンソールを開き、認証情報を開く。「作成」を押下。
認証情報に戻り、認証情報を作成。種類は「OAuthクライアントID」を選択。
メールアドレスは入力済み。サービス名に適切なものを設定。他は入力不要。
アプリケーション種類が選べるようになっているので「その他」を設定。
OAuthクライアントのクライアントIDとシークレットを取得。記録しておく。
AdSense Management APIを有効にする
ライブラリでAdSenseで検索、AdSense Management APIを選択。
認証コードを取得する
以下の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
認証画面が出る。許可を選択。
認証コードが取得できる。
リフレッシュトークンを取得する
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