admob(adsense)のレポート取得APIの再取得メモ

あけましておめでとうございます！！:bow_tone2:

うちで使っている既存ツールの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
```

なんかこんなエラーレスポンスが

```json:                                                                                                                                                                      
{
"error": {
 "errors": [
  {
   "domain": "global",
   "reason": "authError",
   "message": "Invalid Credentials",
   "locationType": "header",
   "location": "Authorization"
  }
 ],
 "code": 401,
 "message": "Invalid Credentials"
}
}
```

認証系で問題があるようなので、もうちょっと調べると


https://www.googleapis.com/oauth2/v4/token〜


```json:
{
 "error": "invalid_grant",
 "error_description": "Account has been deleted"
}
```

アカウントが削除されましたって。。。汗


年末の休みに入ったタイミングで、、、泣


### Googleさんの「APIs Explorer」で対象のAPIを試し打ちできる画面で確認

https://developers.google.com/apis-explorer/#p/adsense/v1.4/


![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/1b9b3790-fac1-ad49-1ed5-4549bf406f33.png)

adsenseのレポートを確認するため、

「AdSense Management API」　を選択

↓

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/094c188a-6059-9cc2-ada6-70d851cc00c6.png)

「adsense.reports.generate」を選択

↓

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/74031c72-9b95-87ce-d724-0ec2f533a0c4.png)


![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/d50dea1b-79f1-919c-899b-f23a2ed572eb.png)


Authorize requests using OAuth 2.0を「ON」にすると、このような画面になるので、
スコープをチェックして、「Authorize」でGoogleのアカウントの認証が入ります。

その後、APIの検索クエリを入力して試してみました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/51c19b82-336a-6bcc-3e55-3bdf1aa250ed.png)

適宜項目を入力し「Authorize and excute」で実行してみると、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/9c666e61-3262-c609-6ca4-9a39bd551bc6.png)

こんな感じで結果が見れます。

また、左メニューの「Request History」から実行履歴も見れるので便利

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/a85e6ad4-a7b8-92b2-b68e-43ac4916756d.png)

### あとは、この画面と同じ処理をするための認証情報を用意する必要ある。

ちなみに調査対象のツールでは、下記3つ情報が必要だったので、下記３つの取得方法にしぼります。

* client_id
* client_secret
* refresh_token

↓APIが利用できなくなったデータ取得コード

```php:adsense.php
 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にアクセスし、

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


![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/9f99c775-d199-95e4-ce4e-823e9224b29b.png)

認証情報を作成する、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/006d7160-1d85-45cb-10f4-a5ca5af4edda.png)

「OAuth クライアント ID」で作成

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/35380201-ad40-4ccd-9303-64454acd98fd.png)

これで作成。

が、ちなみに僕の環境では、API認証の作成上限100をこえており、不要なものを消してから試しました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/a2209320-2620-22de-b880-b858f2b46195.png)

無事作成されると、

* クライントID
* クライアントシークレット

が取得できるようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/095f9796-e312-d9a7-3343-0ef839a5072d.png)

残すは、**```refresh_token```**が必要なので、



https://accounts.google.com/o/oauth2/auth?client_id=xxxxxxxxx.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/adsense&response_type=code&approval_prompt=force&access_type=offline

↑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アカウントの認証が再度入ったあとに、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/42d6f0be-fce5-3490-4db7-6f0550304593.png)

「Authorization Code」が表示されます。
これをコピーし。

curlコマンドで下記を叩く

```terminal:
$ 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

するとレスポンスで、

```json:
{
  "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "expires_in": 3600,
  "refresh_token": "xxxxxxxx",
  "scope": "https://www.googleapis.com/auth/adsense",
  "token_type": "Bearer"
}
```

リフレッシュトークンが返ってくるので、
これで無事全情報が揃い、無事adsenseのレポート取得APIが使えるようになりました。

expires_inがまた使えなくなりそうで気になりますが、
追って調査したいと思います（泣）

長文最後まで見ていただきありがとうございます！
今年もよろしくおねがいします！:muscle:


### 参考にさせて頂いた記事
https://qiita.com/kossacks/items/8d279bcc1acc2c2153ab
http://takaya030.hatenablog.com/entry/2016/09/04/164354
大変助けられました。:bow_tone3: