[PHP]Google APIでadmobのデータを取得していろいろする
先日入社したばかりの山田(仮)です。
インターネットの開発をしておりますと、2年に一度くらいGoogle APIを使って、データをむりやりなんとかしたい、という案件が出てくることがございます。
先日admobのデータをごにょごにょすることになったのですが、admobがGoogleに買収されたことによりadsenseのAPI経由でデータを取得するようになっておりました。
同じことではまっていらいらする日本に3人くらいいる方のお役に立てば幸いです。
adsenseとadmobのGoogle APIではまったポイント
大きなはまりポイントは3つです。
- admobの古い管理画面からダウンロードできるadmob APIは旧管理画面で設定されたデータにしか使えない
- サーバサイド用にkeyファイルを作成できるがadsense APIでは使えない
- oauthのコールバック作るのが面倒
1.admobのAPIデータ取得はGoogle adsense API に移行
admobの旧管理画面にあるAPIはトラップですのでスルーしてください。
私、実装したところで気づきましたが、新管理画面のデータはadsense API で取得します。
まあちゃんとドキュメントに書いてあるので、ちゃんと読めよということでした。
https://developers.google.com/mobile-ads-sdk/docs/admob/reporting
2.adsenseのAPIは認証キーファイルで認証できない
https://groups.google.com/forum/#!topic/adsense-api/j-gQsp_fE94
ぐぐってたら、analytics用のサンプルをみつけ、大体同じだろうと思っていたですが
adsenseのAPIはなぜかoauth認証以外許可されていません。
https://developers.google.com/adsense/management/standard_params?hl=ja
3.callback用のファイルをおくのが面倒
通常のwebサイトなどですと、ログイン認証などでcallbackで戻る感じの実装というのは
大変便利なんですが、サーバサイドで完結する場合だと非常にうっとうしいです。
ので、はじめからtokenを作成しておきます。
探すのが大変だった公式マニュアル
https://developers.google.com/adsense/tutorials/oauth-generic?hl=ja
実際の手順
・デベロッパーコンソールでプロジェクト作成
https://console.developers.google.com
英語を読むとじんましんが出る方はaccountからコンソールを日本語化できます。
・APIと認証>API からadsense APIを許可
・APIと認証>認証情報 からweb用のクライアントIDを作ります
デバッグ用のcode.google.comと後述のplaygroundのリダイレクトURIを追加
・マニュアルにそってプレイグラウンドからtokenを発行する
https://developers.google.com/adsense/tutorials/oauth-generic?hl=ja
・php用のclientライブラリを環境にあわせて配置
https://developers.google.com/api-client-library/php/
これで下準備は完了です。
実際のコード
1 |
[sourcecode lang="text"] <?php //class読み込み use Google_Client; use Google_Service_AdSense; use Google_Service_AdSense_Account; use Google_Service_AdSense_AdClients; use Google_Service_Exception; //個別に読み込む場合下記のような感じです require_once 'Google/Client.php'; require_once 'Google/Service/AdSense.php'; require_once 'Google/Service/Exception.php'; try { //developer consoleで発行したid secret $client_id = '123456789012-abcdefghijklmnopqrstuvwxyz.apps.googleusercontent.com'; $client_secret = '12345678901234567890abcd'; //admob管理画面にあるパブリッシャーID $account = 'pub-12345678901234000'; //playgroundではきだしたtoken $access_token ='{ "access_token": "ya29.LgBU-RBh9mXM5xoAAAAEpm16rdOuDjiLYUB2cVOr8RbjOON1UrA9ntxv3cHVUw", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "1/9G1ni0Z-VLjniXBPTb-n2TedD-rlggvX0od11kS1owQ" }'; $client = new Google_Client(); $client->setApplicationName("Google Adsense getter"); $client->setClientId($client_id); $client->setClientSecret($client_secret); $client->setAccessToken($access_token); $service = new Google_Service_AdSense($client); $res = $service->accounts_reports->generate($account,'2014-06-01','2014-06-10',array( 'dimension' => array('DATE','AD_CLIENT_ID','AD_UNIT_CODE',), 'metric' => array('AD_REQUESTS','PAGE_VIEWS','CLICKS','EARNINGS') ) ); if ($res->getTotalMatchedRows()){ foreach ($res['rows'] as $data) { var_dump($data); } } } catch (\Google_Service_Exception $e) { throw new Exception( 'api error ', var_dump($e->getMessage()) ); } [/sourcecode] |
上記で完了です。
項目などはAPIドキュメントで項目を確認してdimension,metricの部分で指定できます。
https://developers.google.com/adsense/management/v1.4/reference/accounts/reports/generate?hl=ja
クライアントIDの作成過程でdebug用の指定をしていると、この画面で実際のデータを確認できるので便利です。
googleのAPIは便利なんですがドキュメントが読みづらいですね。