FacebookのAPIを使おうとOauth周りの処理に公式のPHP SDKのライブラリ(v5系)を利用している前提での話です。
(※2016年冬期の記事です。)
https://github.com/facebook/php-graph-sdk
本SDKライブラリを利用して、Facebook APIでOauth認証しようとする際、特定のサーバの環境下で、正式にApp登録をしているにもかかわらず、
下記のようなエラーがでる時があります。すごくはまりましたので、メモとして残します。(自分の場合はさくらのレンタルサーバでした。)
続きを読む »
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の管理画面で追加設定
アプリ側の仕様変更へ対応。
OAuth対応(手順1で生成されたメールアドレスや鍵を利用。)
JSON形式に対応させるか、xml形式にフォーマットし直す。
[1,2]の手順は、こちらのページで詳しく書かれてますので、詳しくは割愛。
「Google Analytics API v3をPHPから利用する方法 | karakaram-blog」
[3]については、「Data export API」っていうものから「Analytics Core Reporting API」に代わるわけなんだけど、移行させるだけなので、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の文字列が返ってきます。
こんな感じです。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dxp="http://schemas.google.com/analytics/2009" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gd="http://schemas.google.com/g/2005" gd:kind="analytics#data">
<entry>
<dxp:dimension name='ga:XXXX' value='YYYY'/>
<dxp:metric name='ga:XXXX' value='YYYY' type='ZZZ'/>
</entry>
...
<entry>
<dxp:dimension name='ga:XXXX' value='YYYY'/>
<dxp:metric name='ga:XXXX' value='YYYY' type='ZZZ'/>
</entry>
</feed>
View the code on Gist .
最後に使い方というかサンプルをば。ちなみに、xmlの文字列が返ってくるので、echo やver_dumpして、ブラウザ上で閲覧すると真っ白です。ソース表示にするとちゃんとxmlが出力されてるのがわかります。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require_once 'gapi.class.php';
$ga = new gapi($email, $key);
$ga->requestReportData(............);
// same as default of GAPI
$reportxml = $ga->getResultsXML(); // return xml format string.
View the code on Gist .
たぶん、これで、xml前提のアプリとして実装されてた場合は移行がそこまで大変じゃなくなるのじゃないかな。もちろん、v3を活用するにはJSON用に作りなおすのがベストなんでしょうけどね。
ちなみに、v2のXML形式は、こちらのページ を参考にしました。
(画像はGoogle Analytics APIのドキュメントページから拝借させていただきました。)