Google Analytics APIのエラー。v2.3からv3移行手順。OAuth2対応とxmlからJSONへ
.
Google Analytics API v2.3のサポートが2015年5末頃に終了したみたいで、動かなくなっちゃったアプリケーションがあったので、2015年6月時点の最新であるv3に対応させないと行けないということで、書き記します。
次のようなエラーで引っかかった人のための記事です。
User does not have any Google Analytics Account.
Failed to authenticate user.
GA api v3で何が変わった
個人的に思うのは、大きく次の3つ。
- OAuth2.0対応の必須
- XML形式⇒JSON形式
- リクエスト先のURLの変更
この中で特に大きいのはOAuth2への対応。
これまではEmailとPasswordで接続できてましたけど、APIキーを発行して、Analyticsの設定もかえないといけなくなった。プログラム側の修正はその後の話。
OAuthの対応の準備
手順としては、次の通り
- APIキーを発行
- プロジェクトを新規作成
- Google Analytics APIを有効化
- 新規サービスを登録
- [p12]形式の鍵をダウンロード。ファイル名はお好きな様に。
- 接続用メールアドレスをメモ
- 参考:「Google Analytics API v3をPHPから利用する方法 | karakaram-blog」
- Google Analyticsの管理画面で追加設定
- 先ほどメモした「xxx@developer.gserviceaccount.com」というメールアドレスについて、
- Analyticsの管理画面から、ユーザ追加し、API接続させたい閲覧権限を付与します。
- プロファイル番号をしらべる。
- 参考:「Google Analytics API v3をPHPから利用する方法 | karakaram-blog」
- アプリ側の仕様変更へ対応。
- OAuth対応(手順1で生成されたメールアドレスや鍵を利用。)
- JSON形式に対応させるか、xml形式にフォーマットし直す。
[1,2]の手順は、こちらのページで詳しく書かれてますので、詳しくは割愛。
「Google Analytics API v3をPHPから利用する方法 | karakaram-blog」
[3]については、「Data export API」っていうものから「Analytics Core Reporting API」に代わるわけなんだけど、移行させるだけなので、APIの名称なんてどうでも良いです。
一応ドキュメントのリンクを。ちゃんと読みましょう。
- [v2.3] Data export API
- [v3] Analytics Core Reporting API
- 移行の案内
コードの修正
さて、準備が整ったところで、実装を。
これから新規でv3アプリ作る人なんかは、composerなんかでよさそうなlibraryで対応したら良いと思います。
今回はcomposer使えない環境だったので手軽なライブラリを探したところ、「GAPI」なるものが良さ気で使った。
OAuth2がとても簡単。
githubのReadmeにあるサンプルの通りで簡単に動きます。簡単です。
https://github.com/erebusnz/gapi-google-analytics-php-interface
自分の場合、そのアプリ側がv2のxmlに最適化されてて、json形式用にフォーマット追加するのが面倒な環境だった。
移行の場合大体そう。
ライブラリ側で面倒みてくれば最高というわけで、このライブラリ側でv2のxml形式風に返すメソッド追加して、マージされるかはわからないけど、プルリクおくりましたという紹介。
https://github.com/tomothumb/gapi-google-analytics-php-interface/
とりあえず、僕のリポジトリつくったらxmlの文字列が返ってきます。
こんな感じです。
最後に使い方というかサンプルをば。ちなみに、xmlの文字列が返ってくるので、echo やver_dumpして、ブラウザ上で閲覧すると真っ白です。ソース表示にするとちゃんとxmlが出力されてるのがわかります。
たぶん、これで、xml前提のアプリとして実装されてた場合は移行がそこまで大変じゃなくなるのじゃないかな。もちろん、v3を活用するにはJSON用に作りなおすのがベストなんでしょうけどね。
ちなみに、v2のXML形式は、こちらのページを参考にしました。
(画像はGoogle Analytics APIのドキュメントページから拝借させていただきました。)