Google Analytics API(V3)のPHPバージョンを使って、CMSの人気記事一覧を作ろう

テストサイトで記事を書いて、公開サイトへのリリース時に、Webデータとデータベースを公開サイトへアップロードしている場合。アクセス履歴やユーザーコメントなどもテストのデータに上書きされてしまいます。ユーザーコメントはFacebookコメントを使用したり、アクセス履歴はGoogle Analyticsを使用したりする事で回避する事ができます。当ブログのコメントもFacebookコメントを採用し、外部サーバーから情報を取得し各ページへ出力を行っています。
今回は、Google Analyticsでページのアクセス数を集計し、そのデータを元に各CMSと連携を行い、人気記事一覧を作成します。この記事を書き終える頃には左のエリアに人気記事一覧が出力されていると思います^^

 

Google Analytics API(V3) PHPを使用してアクセス数情報を取得する

 

[情報ソース]

今回の記事を書こうと思い、調べていたら多くの日本語ドキュメンを見つける事が出来ました。(本当に皆様助かりました。ありがとうございました)
で、今回の記事のほとんどのソースが「unlinked log」様のページを参考にさせて頂いております。ありがとう御座いました。

Google API V3
Google APIs Client Library for PHP
Hello Analytics API

[手順]

  1. Google APIs Consoleにアクセスし、API利用登録を行う

    Google Analyticsのログイン情報を入力し、ログイン

    初回の場合、下記画面が表示されるので「Create Project」をクリックし、プロジェクトを作成します。

    ログイン後、左のメニューより「Services」をクリックし、Analytics APIを「ON」にして下さい。

    「Click Create an OAuth 2.0 client ID....」をクリックし、client IDを作成して下さい。

    作成すると「Client ID」、「Client secret」などが発行されます。この値は後ほど使用します。

     

  2. あとは「anlinks log」様にのっているソースを拝借しましてw(ちゃんと許可はとっております^^;)一部ソースを書き換えるだけです。Libraryのサンプルを参照しつつ、Reference Guideなどを見ると違うプログラムにも対応出来きますね。
     

    <?php
    // ライブラリ読み込み
    require('./google-api-php-client/src/apiClient.php');
    
    // Analytics なのでこれを
    require('./google-api-php-client/src/contrib/apiAnalyticsService.php');
    
    // セッションスタート
    session_start();
    
    
    $client = new apiClient();
    
    // クライアントID
    $client->setClientId('***********************************');
    // クライアントSecret
    $client->setClientSecret('***********************************');
    // リダイレクトURL
    $client->setRedirectUri('***********************************');
    
    $service = new apiAnalyticsService($client);
    
    // 許可されてリダイレクトされると URL に code が付加されている
    // code があったら受け取って、認証する
    if (isset($_GET['code'])) {
    
      // 認証(トークン、リフレッシュトークンを取得)
      $client->authenticate();
    
      // 取得したトークンをセッションにセット
      $_SESSION['token'] = $client->getAccessToken();
    
      // リダイレクト(ここらへんは任意に)
      header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
    
      exit;
    }
    
    if (isset($_SESSION['token'])) {
      // トークンセット
      $client->setAccessToken($_SESSION['token']);
    }
    
    // トークンがセットされていたら
    if ($client->getAccessToken()) {
    
      // ~all で全てのプロファイルを取得します
      // 第一引数にはアカウントIDを指定することで指定したアカウントのプロファイルのみ取得出来ます
      // 第二引数にはWebプロパティID(UA-なんたらのやつ)を指定することで、指定したプロファイルだけを取得出来ます(アカウントIDも指定が必要)
      // ※図5で説明
    
      $profiles = $service->management_profiles->listManagementProfiles("12345678","UA-12345678-99");
    
      try {
      // プロファイルID
      // ※図6で説明
      $ids = 'ga:12345678';
    
      // 期間(スタート)
      $start_date = '2012-09-11';
    
      // 期間(エンド)
      $end_date = '2012-09-27';
    
      // メトリクス,複数の場合は , で区切る
      $metrics = 'ga:pageviews';
    
      // ディメンション,複数の場合は , で区切る
      $dimensions = 'ga:pageTitle,ga:pagePath';
    
      // ソートする項目, - をつけると降順になります
      $sort = '-ga:pageviews';
    
      // 最大取得数
      $max_results = 10;
    
      // ディメンションやソートなどの必須でないものは、オプションとして一つの配列としてまとめます
      $optParams = array('dimensions' => $dimensions, 'sort' => $sort, 'max-results' => $max_results);
      $data = $service->data_ga->get($ids, $start_date, $end_date, $metrics, $optParams);
    
      // 返ってきたデータは表示する時ちょっと分かりづらいので、ちょっと形を整えます
      $results = array();
    
      foreach ($data['rows'] as $row => $value) {
        foreach ($data['columnHeaders'] as $key => $header) {
          $results[$row][$header['name']] = $value[$key];
        }
      }
    
      $site_url = 'http://example.com';
      echo '<table><tbody>';
      foreach ($results as $result) {
        echo "<tr><td><a href=\"{$site_url}{$result['ga:pagePath']}\">{$result['ga:pageTitle']}</a></td>
    <td>{$result['ga:pageviews']}</td></tr>";
      }
    
      echo '</tbody></table>';
    
    // エラーの時は例外を投げます
    } catch (apiServiceException $e) {
      echo $e->getMessage();
    }
    
    // トークンがセットされてなかったら
    } else {
    
      // 認証用URL取得
      $auth_url = $client->createAuthUrl();
      echo '<a href="'.$auth_url.'">アプリケーションのアクセスを許可してください。</a>';
    }
    (図5)プロファイル選択とプロファイルIDについて
    Googleアナリティクスにログインし、「アナリティクス設定 > プロファイル選択 > プロファイル設定」と進み、以下の画面を確認します。
    プロパティID欄の真ん中の数値を第一関数に指定、UA-入りの全てを第二関数に指定します。
    (例)listManagementProfiles("12345678","UA-12345678-99");

    プロファイルIDは画面中程の数字となります。

  3. 作成したプログラムとライブラリをWebサーバーに設置し、アクセスするとアクセスの高い順よりタイトルとページビューを閲覧する事ができます。

Google Analytics API(V3) PHPを使用してCMSの読み込みようファイルを作成する

 

作ったプログラムを改修します。
変更内容①、初回アクセス時のTokenをファイルに保存し、次回以降(cron)はファイルからTokenを読み込む
変更内容②、アナリティクスの結果をファイルへ保存する
※Google Analytics APIのOauth認証が毎回認証を問われるので、このような仕様でプログラムを作成しました。もしかしたら他に方法があるのかもしれません。もしありましたら、教えて頂けると幸いです。

<?php
require('./google-api-php-client/src/apiClient.php');
require('./google-api-php-client/src/contrib/apiAnalyticsService.php');

// セッションスタート
session_start();
$client = new apiClient();

/**************************
// Google Analytics設定
*************/
// クライアントID
$client->setClientId('*********************************');
// クライアントSecret
$client->setClientSecret('******************************');
// リダイレクトURL
$client->setRedirectUri('http://shared-blog.kddi-web.com/google_ana.php');
// Google Tokenを保存するファイル名(適宜DBに保存するなど変更下さい)
//Web上から読みとれない場所を指定してください。
// e.g) /home/UserID/gtoken.txt
$tokenpath = "../gtoken.txt";
// Google Analyticsの結果を保存するファイル名(適宜DBに保存するなど変更下さい)
$filepath = "../gana.txt";
// プロファイルID
$ids = 'ga:***********';
// 期間(スタート)現在の日付からマイナス2ヶ月より計測
$start_date = date("Y-m-d",strtotime("-2 month"));
// 期間(エンド)現在の日付
$end_date = date("Y-m-d");

$service = new apiAnalyticsService($client);

// 許可されてリダイレクトされると URL に code が付加されている
// code があったら受け取って、認証する
if (isset($_GET['code'])) {
  // 認証(トークン、リフレッシュトークンを取得)
  $client->authenticate();
  // 取得したトークンをセッションにセット
  $_SESSION['token'] = $client->getAccessToken();
  // リダイレクト(ここらへんは任意に)
  header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
  exit;
}

if (isset($_SESSION['token'])) {

  //tokenを保存する。適宜DBに保存するなど変更して下さい。
  $string = $_SESSION['token'];
  //ページ出力
  $fp = fopen($tokenpath, "w");
  @fwrite( $fp, $string, strlen($string) );
  fclose($fp);
  unset($string);

  // トークンセット
  $client->setAccessToken($_SESSION['token']);

}elseif ( file_exists( $tokenpath )) {
  $token = @file($tokenpath);
  $client->setAccessToken($token[0]);
}

// トークンがセットされていたら
if ($client->getAccessToken()) {
  //プロファイルを指定する"AcountID","webPropertyId"
  $profiles = $service->management_profiles->listManagementProfiles("AcountID","webPropertyId");

try {
  // メトリクス,複数の場合は , で区切る
  $metrics = 'ga:pageviews';
  // ディメンション,複数の場合は , で区切る
  $dimensions = 'ga:pageTitle,ga:pagePath';
  // ソートする項目, - をつけると降順になります
  $sort = '-ga:pageviews';
  // 最大取得数
  $max_results = 20;
  // ディメンションやソートなどの必須でないものは、オプションとして一つの配列としてまとめます
  $optParams = array('dimensions' => $dimensions, 'sort' => $sort, 'max-results' => $max_results);
  $data = $service->data_ga->get($ids, $start_date, $end_date, $metrics, $optParams);
 
  // 返ってきたデータは表示する時ちょっと分かりづらいので、ちょっと形を整えます
  $results = array();
  foreach ($data['rows'] as $row => $value) {
   foreach ($data['columnHeaders'] as $key => $header) {
    $results[$row][$header['name']] = $value[$key];
   }
  }

  //ファイル出力(適宜DBなどに変更下さい)
  foreach ($results as $result) {
   $string .= "{$result['ga:pagePath']},{$result['ga:pageTitle']},{$result['ga:pageviews']}\n";
  }

  $fp = fopen($filepath, "w");
  @fwrite( $fp, $string, strlen($string) );
  fclose($fp);

  echo $string;

// エラーの時は例外を投げます
} catch (apiServiceException $e) {
  echo $e->getMessage();
}

// トークンがセットされてなかったら
} else {
  // 認証用URL取得
  $auth_url = $client->createAuthUrl();
  echo '<a href="'.$auth_url.'">アプリケーションのアクセスを許可してください。。</a>';
}

修正したプログラムをサーバーへアップロードしブラウザからアクセスして下さい。出力結果がファイルに保存されると思います。この作成したプログラムをcron登録して下さい。SmartReleaseを利用しているユーザーはテストサイトでこのプログラムを作成し、今回作ったファイルをリリースの除外リストへ追加することで、より一層セキュリティーレベルが増します。
 

Google Analyticsのデータを元に人気コンテンツ一覧を作成する(Drupal編)

前回作ったプログラムを改修します。
変更内容①、初回アクセス時のTokenをファイルに保存し、次回以降(cron)はファイルからTokenを読み込む
変更内容②、アナリティクスの結果をファイルへ保存する
※Google Analytics APIのOauth認証が毎回認証を問われるので、このような仕様でプログラムを作成しました。もしかしたら他に方法があるのかもしれません。もしありましたら、教えて頂けると幸いです。

 

<?php
require('./google-api-php-client/src/apiClient.php');
require('./google-api-php-client/src/contrib/apiAnalyticsService.php');

// セッションスタート
session_start();
$client = new apiClient();

/**************************
// Google Analytics設定
*************/
// クライアントID
$client->setClientId('*********************************');
// クライアントSecret
$client->setClientSecret('******************************');
// リダイレクトURL
$client->setRedirectUri('http://shared-blog.kddi-web.com/google_ana.php');
// Google Tokenを保存するファイル名(適宜DBに保存するなど変更下さい)
//Web上から読みとれない場所を指定してください。
// e.g) /home/UserID/gtoken.txt
$tokenpath = "../gtoken.txt";
// Google Analyticsの結果を保存するファイル名(適宜DBに保存するなど変更下さい)
$filepath = "../gana.txt";
// プロファイルID
$ids = 'ga:***********';
// 期間(スタート)現在の日付からマイナス2ヶ月より計測
$start_date = date("Y-m-d",strtotime("-2 month"));
// 期間(エンド)現在の日付
$end_date = date("Y-m-d");

$service = new apiAnalyticsService($client);

// 許可されてリダイレクトされると URL に code が付加されている
// code があったら受け取って、認証する
if (isset($_GET['code'])) {
  // 認証(トークン、リフレッシュトークンを取得)
  $client->authenticate();
  // 取得したトークンをセッションにセット
  $_SESSION['token'] = $client->getAccessToken();
  // リダイレクト(ここらへんは任意に)
  header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
  exit;
}

if (isset($_SESSION['token'])) {

  //tokenを保存する。適宜DBに保存するなど変更して下さい。
  $string = $_SESSION['token'];
  //ページ出力
  $fp = fopen($tokenpath, "w");
  @fwrite( $fp, $string, strlen($string) );
  fclose($fp);
  unset($string);

  // トークンセット
  $client->setAccessToken($_SESSION['token']);

}elseif ( file_exists( $tokenpath )) {
  $token = @file($tokenpath);
  $client->setAccessToken($token[0]);
}

// トークンがセットされていたら
if ($client->getAccessToken()) {
  //プロファイルを指定する"AcountID","webPropertyId"
  $profiles = $service->management_profiles->listManagementProfiles("AcountID","webPropertyId");

try {
  // メトリクス,複数の場合は , で区切る
  $metrics = 'ga:pageviews';
  // ディメンション,複数の場合は , で区切る
  $dimensions = 'ga:pageTitle,ga:pagePath';
  // ソートする項目, - をつけると降順になります
  $sort = '-ga:pageviews';
  // 最大取得数
  $max_results = 20;
  // ディメンションやソートなどの必須でないものは、オプションとして一つの配列としてまとめます
  $optParams = array('dimensions' => $dimensions, 'sort' => $sort, 'max-results' => $max_results);
  $data = $service->data_ga->get($ids, $start_date, $end_date, $metrics, $optParams);
 
  // 返ってきたデータは表示する時ちょっと分かりづらいので、ちょっと形を整えます
  $results = array();
  foreach ($data['rows'] as $row => $value) {
   foreach ($data['columnHeaders'] as $key => $header) {
    $results[$row][$header['name']] = $value[$key];
   }
  }

  //ファイル出力(適宜DBなどに変更下さい)
  foreach ($results as $result) {
   $string .= "{$result['ga:pagePath']},{$result['ga:pageTitle']},{$result['ga:pageviews']}\n";
  }

  $fp = fopen($filepath, "w");
  @fwrite( $fp, $string, strlen($string) );
  fclose($fp);

  echo $string;

// エラーの時は例外を投げます
} catch (apiServiceException $e) {
  echo $e->getMessage();
}

// トークンがセットされてなかったら
} else {
  // 認証用URL取得
  $auth_url = $client->createAuthUrl();
  echo '<a href="'.$auth_url.'">アプリケーションのアクセスを許可してください。。</a>';
}

修正したプログラムをサーバーへアップロードしブラウザからアクセスして下さい。出力結果がファイルに保存されると思います。この作成したプログラムをcron登録して下さい。SmartReleaseを利用しているユーザーはテストサイトでこのプログラムを作成し、今回作ったファイルをリリースの除外リストへ追加することで、より一層セキュリティーレベルが増します。

Google Analyticsのデータを元に人気コンテンツ一覧を作成する(Drupal編)

  1. Drupal CMSの管理画面にログインし、「ホーム » 管理 » サイト構築」を開きます
  2. 「ブロックを追加」をクリックします
  3. 「ブロックのタイトル」、「ブロックの説明 *」を入力します
  4. テキストフォーマットを「PHP code」を選択してください
    ※PHP codeが選択出来ない場合、「PHP filter」モジュールを有効にしてください
  5. 以下のコードを貼り付け、保存してください
    <?php
    
        //ファイル読み込み(ファイルパスを指定)
        $filepath = '/usr/home/UserID/gana.txt';
        $data = @file($filepath);
    
        print_r($data);
    
        echo '<div class="item-listul">';
    
        $cnt = '0';
        foreach ($data as $value) {
           $printdata = preg_split('/,/', $value);
    
           //topページを除外
           if($printdata[0]=='/top'){continue;}
    
          //タイトルを整形する(一例です。適宜変更ください)
          $replaceTitle = str_replace(" ", "", $printdata[1]);
          $replaceTitle = str_replace("|CPIスタッフブログ", "", $replaceTitle);
          if(!$replaceTitle){$replaceTitle='「No Title」';}
    
           echo '<li class="views-row"><a href="'.$printdata[0].'">'.$replaceTitle.'</a></li>';
    
           $cnt++;
           if( $cnt > '10' ) {break;}
        }
        echo '</ul></div>';

Google Analyticsのデータを元に人気コンテンツ一覧を作成する(WordPress編)

[使用しているバージョン]
WordPress3.4.2
My Custom Widgets2.0.5

  1. WordPress管理画面のプラグイン追加ページより、「My Custom Widgets」をインストールし有効化します。
  2. 外観→ウィジェットより、「MCW 2.0 Addon」を表示したいエリアにドラッグ&ドロップします。
  3. タイトルを入力します、次にPHPのチェックを入れ、下記のコードを挿入し、保存をクリックすると、人気記事一覧が表示されます。
    ※こちらのリンクより完成イメージがご覧になれます。(http://shared-blog.kddi-web.com/wp

    //ファイル読み込み(ファイルパスを指定)
    $filepath = '/usr/home/UserID/gana.txt';
    $data = @file($filepath);
    
    $cnt = '1';
    echo '<ul>';
    foreach ($data as $value) {
       $printdata = preg_split('/,/', $value);
    
       //topページを除外
       if($printdata[0]=='/top'){continue;}
    
       //タイトルを整形する(一例です。適宜変更ください)
       $replaceTitle = str_replace(" ", "", $printdata[1]);
       $replaceTitle = str_replace("|CPIスタッフブログ", "", $replaceTitle);
       if(!$replaceTitle){$replaceTitle='「No Title」';}
    
        echo '<li class="cat-item cat-item-'.$cnt.'"><a href="'.$printdata[0].'">'.$replaceTitle.'</a></li>';
    
        $cnt++;
        if( $cnt > '10' ) {break;}
    }
    echo '</ul>';

以上でWordPressへの取り込みが完了です。

関連タグ: 

この記事をシェアする:

Author
この記事を書いた人:阿部 正幸

KDDIウェブコミュニケーションズ
クラウドホスティング事業本部 エバンジェリスト

CPIスタッフブログ編集長。ACE01,SmartReleaseをリリース後、現職の「エバンジェリスト」として、web制作に関する様々なイベントに登場

Line@登録よろしくお願いします

Web制作に関する情報や、CPIノベルティのプレゼント、サーバーの無償提供などを定期的に発信しています。
ぜひ、登録ください。