work.log

元エンジニアの備忘録的ブログ

Google APIs Client Library for PHPで人気記事一覧を作る

投稿:2014-10-20 16:51  更新:

Google が提供している「Google APIs Client Library for PHP」を使って人気記事一覧を作るメモです。

以前にも同じ事を書いているのですが、久しぶりに触っていたらライブラリ自体が結構変わってしまったようで動かなくなっているのに気づきました。

ということで改めてやり直し。

Google API Console の登録等は割愛しますが、下記のような感じにクライアント ID を作ってやる。

google-api-php-client-

そうすると、p12 キーファイルをダウンロードしろと言ってくるのでこれを保存しサーバにアップしとく。include ディレクトリを作ってその中に放り込んだ。

あとは、下記の情報をメモる。

  • クライアント ID
  • メール アドレス
外部リンク
API Console – Google Code

次は、Google Analytics の管理画面にログインし「アカウントの追加」と「ビュー ID」の取得を行う。

「アカウントの追加」は [アナリティクス設定] → [ユーザー管理] へ進み先ほど取得したメールアドレスを入力。権限は「表示と分析」で十分。

「ビュー ID」は以前はプロファイル ID と呼ばれていたもので、[アナリティクス設定] → [ビュー設定] で確認できる。

次は「Google APIs Client Library for PHP」を Git から落としてくる。今回は git clone した。

$ cd include/
$ git clone https://github.com/google/google-api-php-client.git

これで準備が全て整ったので下記のようなコードを書いて動作確認。

<?php

	if ( ! defined( 'gapc_dir' ) ) {
		define( 'gapc_dir', dirname( __FILE__ ) . '/include' );
	}

	require_once( gapc_dir . '/google-api-php-client/src/Google/Client.php' );
	require_once( gapc_dir . '/google-api-php-client/src/Google/Service/Analytics.php' );

	/* パラメータ */
	$client_id = '123456789.apps.googleusercontent.com';
	$email     = '123456789@developer.gserviceaccount.com';
	$key_file  = gapc_dir . '/KEY-123456789.p12';
	$app_name  = 'My Application';
	$view_id   = 'ga:123456789';
	$start     = date( 'Y-m-d', strtotime( "-1 day", time() ) );
	$end       = date( 'Y-m-d', strtotime( "today", time() ) );

	$client = new Google_Client();
	$client->setApplicationName( $app_name );
	$client->setClientId( $client_id );
	$client->setAssertionCredentials( new Google_Auth_AssertionCredentials(
		$email,
		array( 'https://www.googleapis.com/auth/analytics' ),
		file_get_contents( $key_file )
	));

	/* トークンのキャッシュパス */
	$client->setClassConfig( 'Google_Cache_File',
		array('directory' => '/tmp/google_api'
	));

	$service = new Google_Service_Analytics( $client );

	/* PV の多い順に 10 件取得 */
	try {

		$data = $service->data_ga->get(
				$view_id,
				$start,
				$end,
				'ga:pageviews',
				array(
					'dimensions'  => 'ga:pageTitle, ga:hostname, ga:pagePath',
					'sort'        => '-ga:pageviews',
					'filters'     => null,
					'max-results' => 10
				)
		);

		foreach( $data['rows'] as $row => $value ) {

			foreach( $data['columnHeaders'] as $key => $header ) {

				$result[$row][$header['name']] = $value[$key];

			}

		}

		var_dump( $result );

	} catch( apiServiceException $e ) {

		echo $e->getMessage();

	}

?>

前はトークンを取得する部分も書いていたのでちょっとゴチャゴチャしていたが、今回はかなりスッキリした感じになった。トークンはデフォルトで「/tmp/Google_Client」にキャッシュされるので必要に応じて setClassConfig でパスを変更する。

とりあえずこんな感じ。

しかし、こう頻繁に変わるとその都度変更しないといけないから面倒くさい。