Google Analytics APIが表示されない・・・

2日前に突然、googleanalyticsのアクセス集計が止まる。
 
調べてみると定期バッチのプログラムが動かなくなっていた。
 
テキストが書き出しされずに、空っぽのまま。
 
いざ、調べると使用していたバージョン1.3が変更があったのか表示されない・・・。
 
◆参考例
こんなのもあったが、修正箇所を直しても変化ないので、バージョン上げることしないとアレなので、新しいのを取り入れることにする。
 
◆参考サイト
 
公式ライブラリを使用し、最新の0.6.7で書かれていたのでこれに使ってみることに。
 
簡単に修正して、これまでと同様な仕様で出来上がったものをtextに書き込んでからtext呼び出して表示してみると、見事に文字化け。
文字コードを修正しても無理で、BOM付き表示がどうとか色々あって、しかも治らないという・・・。
 
手詰まったしまったので今度はXMLを出力してから、そのXMLを読み込むように修正した。
XMLを生成したことがなかったので下記のサイトを参考にさせていただきました。
 
出来上がったのが下記のソース
 
 <?php
//hogehogegapi.php
require_once __DIR__ . '/src/Google_Client.php';
require_once __DIR__ . '/src/contrib/Google_AnalyticsService.php';
//クライアントID
define('CLIENT_ID', '**************.apps.googleusercontent.com');
//メールアドレス
define('SERVICE_ACCOUNT_NAME', '*****************@developer.gserviceaccount.com');
//秘密鍵
define('KEY_FILE', __DIR__ . '/********.p12');
//ビューID
define('PROFILE_ID', '*******');
$client = new Google_Client();
$client->setApplicationName("Google Analytics PHP Starter Application");
$client->setClientId(CLIENT_ID);
$client->setAssertionCredentials(new Google_AssertionCredentials(
    SERVICE_ACCOUNT_NAME,
    array('https://www.googleapis.com/auth/analytics'),
    file_get_contents(KEY_FILE)
));
$service = new Google_AnalyticsService($client);
$result = $service->data_ga->get(
    'ga:' . PROFILE_ID,
    $start_date = date('Y-m-d', strtotime('-1 hour')), /* レポートの開始日(1時間前から) */
    $end_date = date('Y-m-d', strtotime('now')), //終了日
    'ga:pageviews',
    array(
        'dimensions'  => 'ga:pageTitle,ga:pagePath',
        'sort'        => '-ga:pageviews',
'filters'=>'ga:pagePath=~/tech/.*/.*[0-9]$,ga:pagePath=~/hogehoge/.*/.*[0-9]$,ga:pagePath=~/pc/.*/.*/.*/.*[0-9]$,ga:pagePath!~/',
        'max-results' => '10' //件数
    )
);
$count =1;
$rank = $result['rows'];
$dom = new DomDocument('1.0', 'UTF-8');
// prefs ノードを追加
$prefs = $dom->appendChild($dom->createElement('ranking'));
foreach($rank as $value){
$getPagetitle = $value[0];
$getPagetitle = substr_replace($getPagetitle, '', -20 );//タイトルタグを末尾から削除する文字数
$getPagelink = $value[1];
$pref = $prefs->appendChild($dom->createElement('rank'));
// 要素ノード追加
$pref->appendChild($dom->createElement('rank', $count));
$pref->appendChild($dom->createElement('title', $getPagetitle));
$pref->appendChild($dom->createElement('link', $getPagelink));
//XML を整形出力
$dom->formatOutput = true;
    $count++;
}
$dom->save('ranking.xml');
hogehogegapi.phpにアクセスすると、ranking.xmlが出力される仕組み。
事前に書き込み先のranking.xmlファイルは作成しておいて書き込み権限を与えておく必要がある。
 
'filters'=>'ga:pagePath=~/tech/.*/.*[0-9]$,ga:pagePath=~/hogehoge/.*/.*[0-9]$,ga:pagePath=~/pc/.*/.*/.*/.*[0-9]$,ga:pagePath!~/',
フィルターで細かくコントロールが可能。
上記の例だとURLがtech以下の全て、hogehoge以下の全て、pc以下の全てと、TOPページは除外する設定。
 
表示するページでの読み込み(Drupalで表示するにはViews Custom Fieldのphpコードの値に貼り付ける)
 
<?php
$rss = simplexml_load_file('http://a-liner.net/hoge/ranking.xml');//読み込み先URL
print('<ul>');
foreach($rss->rank as $item) {
print('<li class="access_10_list"><a href="' . $item->link . '"><span>' . $item->rank . '</span>' . $item->title . '</a></li>');
}
print('</ul>');
?>
アクセスランキングを作るにも直接DBに入れてしまうことも可能だが、それはまた時間があったときにでも。
下記のようにcron.shとかで定期バッチで処理させれば完成だ。
 
#!/bin/sh
wget -O - -q http://a-liner.net/hoge/1h.php
wget -O - -q http://a-liner.net/hoge/3h.php
wget -O - -q http://a-liner.net/hoge/1day.php
wget -O - -q http://a-liner.net/hoge/1week.php

去年の7月下旬にGoogle Analytics PHP Interface のアップデートの案内が来た。

Google APIs Client Library for PHP

を最新のに入れ替えをした。srcフォルダのみ上書きをし、他の変更も必要がなく動作も確認出来た。