LoginSignup
2
3

More than 5 years have passed since last update.

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

Posted at

概要

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とクライアントシークレットを取得する。

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

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

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