admob(adsense)のレポート取得APIの再取得メモ
あけましておめでとうございます!!
うちで使っている既存ツールのadsenseのレポートデータを取得するAPIが、
年末休みに入ったタイミングから使えなくなったので(泣)、、再度APIを利用可能にした際のメモ
https://www.googleapis.com/adsense/v1.4/reports?startDate=##SEARCH_DATE##&endDate=##SEARCH_DATE##&accountId=pub-xxxxxxxxx&dimension=AD_UNIT_ID&dimension=AD_UNIT_NAME&dimension=DATE&metric=AD_REQUESTS&metric=CLICKS&metric=EARNINGS&useTimezoneReporting=true
なんかこんなエラーレスポンスが
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
認証系で問題があるようなので、もうちょっと調べると
{
"error": "invalid_grant",
"error_description": "Account has been deleted"
}
アカウントが削除されましたって。。。汗
年末の休みに入ったタイミングで、、、泣
Googleさんの「APIs Explorer」で対象のAPIを試し打ちできる画面で確認
adsenseのレポートを確認するため、
「AdSense Management API」 を選択
↓
「adsense.reports.generate」を選択
↓
Authorize requests using OAuth 2.0を「ON」にすると、このような画面になるので、
スコープをチェックして、「Authorize」でGoogleのアカウントの認証が入ります。
その後、APIの検索クエリを入力して試してみました。
適宜項目を入力し「Authorize and excute」で実行してみると、
こんな感じで結果が見れます。
また、左メニューの「Request History」から実行履歴も見れるので便利
あとは、この画面と同じ処理をするための認証情報を用意する必要ある。
ちなみに調査対象のツールでは、下記3つ情報が必要だったので、下記3つの取得方法にしぼります。
- client_id
- client_secret
- refresh_token
↓APIが利用できなくなったデータ取得コード
public $client_id = "xxxxxxxxxx.apps.googleusercontent.com";
public $client_secret = "xxxxxxxxxxxxxxx";
public $refresh_token = "x/xxxxxxxxxxx";
public $token_type = "";
public $access_token = "";
public function getAccessToken()
{
$post_data = array(
'client_secret' => $this->client_secret,
'grant_type' => 'refresh_token',
'refresh_token' => $this->refresh_token,
'client_id' => $this->client_id
);
$ch = curl_init("https://www.googleapis.com/oauth2/v4/token");
curl_setopt($ch,CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
$out = curl_exec($ch);
$obj = json_decode($out);
$this->token_type = $obj->token_type;
$this->access_token = $obj->access_token;
}
このURLにアクセスし、
認証情報を作成する、
「OAuth クライアント ID」で作成
これで作成。
が、ちなみに僕の環境では、API認証の作成上限100をこえており、不要なものを消してから試しました。
無事作成されると、
- クライントID
- クライアントシークレット
が取得できるようになります。
残すは、refresh_token
が必要なので、
↑URLにブラウザでアクセスします。
- client_id = 先程発行したclient_idを指定
- scope = 参照するサービスを絞る?(僕の場合は、
https://www.googleapis.com/auth/adsense
を指定しました。) - redirect_uri = その他のクライアントIDを作成した場合は、 redirect_uriは「urn:ietf:wg:oauth:2.0:oob」にする必要があるようです。
すると、Googleアカウントの認証が再度入ったあとに、
「Authorization Code」が表示されます。
これをコピーし。
curlコマンドで下記を叩く
$ curl -k -d client_id=xxxxxxxxxxx.apps.googleusercontent.com -d client_secret=xxxxx -d redirect_uri=urn:ietf:wg:oauth:2.0:oob -d grant_type=authorization_code -d code=xxxxx https://accounts.google.com/o/oauth2/token
code = 先程のAuthorization Code
するとレスポンスで、
{
"access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"expires_in": 3600,
"refresh_token": "xxxxxxxx",
"scope": "https://www.googleapis.com/auth/adsense",
"token_type": "Bearer"
}
リフレッシュトークンが返ってくるので、
これで無事全情報が揃い、無事adsenseのレポート取得APIが使えるようになりました。
expires_inがまた使えなくなりそうで気になりますが、
追って調査したいと思います(泣)
長文最後まで見ていただきありがとうございます!
今年もよろしくおねがいします!
参考にさせて頂いた記事
https://qiita.com/kossacks/items/8d279bcc1acc2c2153ab
http://takaya030.hatenablog.com/entry/2016/09/04/164354
大変助けられました。
Author And Source
この問題について(admob(adsense)のレポート取得APIの再取得メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/matsuyoro/items/f93b0f4ae8df590f8547著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .