GoogleAnalytics APIが仕様変更でデータが取得できない場合の対処法
なんと、1ヶ月ぶりにGoogleAnalytics APIでXMLのレポートデータを取得しようとしたら仕様が変わってました…Googleってこういうベータ版的なサービスは容赦なく変更するから困りますよね~…
と愚痴っていてもしょうがないので、PHPでこのGoogleAnalytics APIのレポートデータを簡単に扱えるGAPIでもエラーが出てましたので、解決法をば。
きっかけはエラーの内容
気づいたのはGAPIを利用しているPHPでこんなエラーが表示されてしまったこと。
No valid root parameter or aggregate metric called "TotalResults" ...(以下略)
「TotalResultsの値がデータのroot部分に無いよ」と言われる。
そして悲しいことに、GAPIはバージョンが2009年の1.3ままで放置されてしまっていた…しかたない。自力でやるか。
とりあえずgapi.phpの呼び出し部分を見ると、__callメソッド内で「$this->report_root_parameters」と「$this->report_aggreate_metrics」のデータの中を「totalresults」キーで照合しているのですが、見つからないためにエラーがスローされていました。
ということは、うまくデータが取れていない。
GoogleAnalytics APIでデータのキーが変わったのかな?と思って仕様を調べてみても「totalResults」はちゃんと仕様に存在しています。
XMLデータはちゃんと取得できていた
Googleから返されているXMLの生データを確認してみようと思って、gapi.phpのreportObjectMapperメソッド内でダウンロードされたXMLデータをファイルに落としてエディタで見てみると、こんな感じでちゃんと入ってたんですよ。
OpenSearchのバージョンが変わった
このデータを抽出するgapi.phpのコードがここ。
$open_search_results = $xml->children('http://a9.com/-/spec/opensearchrss/1.0/');
もしかして、名前空間の仕様が変わってるんじゃないか?と思ってもう一回XMLデータを見てみたら…
<feed ... xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">
ああ、やっぱり仕様が変わってる…OpenSearchの仕様が1.0のものから1.1のものに変更されていたようです。
ということで、gapi.php側も以下のように変更。
$open_search_results = $xml->children('http://a9.com/-/spec/opensearch/1.1/');
これで無事に読み込まれるようになりました。
2012-08-02