work.log

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

WordPressに人気記事一覧を表示させる(開発編その1)

投稿:2013-07-26 21:31  更新:

WordPressに人気記事一覧を表示させる(準備編)」の続きです。

前回は Google アナリティクスを Google Api から利用するサンプルコードを書きました。

そして、最終的には WordPress のプラグインとしたいと思っていたので、今回は Google Api (のアクセストークン取得まで) と WordPress の連携部分を考えてみましたのでメモ程度に残しておきます。

TwentyTwelve が関係なく見えますが、一応はカスタマイズ記事です。

スポンサーリンク

プラグイン管理画面のデモ

まだ開発途中となりますが、特にネタも用意していなかったので開発途中の設定画面を晒してみたいと思います。

※ 肝心の一覧表示部分は未着手…

初期画面

twentytwelve-customize-030-01

初期画面はこんな感じです。

各種パラメータは WordPress の wp_options テーブルに保存するようにしてみました。

アプリケーション認証前

twentytwelve-customize-030-02

全項目を埋めるとアプリケーション認証用の URL リンクが表示されます。

アクセストークン取得後

twentytwelve-customize-030-03

アプリケーションの認証が完了し、アクセストークンが正常に取得できれば利用可能な状態になります。

前回はアクセストークンをファイルに書き出していましたが、これも wp_options テーブルに保存するようにしてみました。

残念な事に今回はここまでです。

プログラマではない自分にとっては、思いつきで作るにしては結構ハードル高いなと感じました…

Google アナリティクスからのデータ取得部分をクラス化してみた

プラグインにするという事でプラグイン内で利用しやすいように、前回書いた処理を PHP のクラスに書き換えてみました。

WordPress との連携を考え PHP セッション、アクセストークンのキャッシュ化を取り除いた感じです。

<?php

/* Google アナリティクスからデータを取得するクラス */
class ga_analytics_client {

	private $client;
	private $service;

	public function __construct( $p ) {

		$this->client = new Google_Client();
		$this->client->setClientId( $p['gapi_id'] );
		$this->client->setClientSecret( $p['gapi_secret'] );
		$this->client->setRedirectUri( $p['gapi_redirect'] );

		$this->service = new Google_AnalyticsService( $this->client );

	}

	/* 認証・アクセストークンを取得する処理 */
	public function api_authentication_process( $p ) {

		/* 引数にアクセストークンがセットされている場合 */
		if ( ! empty( $p['gapi_token'] ) ) {

			/* データの取得処理へ */
			$this->get_analytics_data( $p );

		/* URL パラメータに認証コードが付いている場合 */
		} else if ( isset( $_GET['code'] ) ) {

			$this->client->authenticate();

			/* トークンをセットしてデータの取得処理へ */
			$p['gapi_token'] = $this->client->getAccessToken();
			$this->get_analytics_data( $p );

		/*アプリケーション認証用のリンクを取得 */
		} else {

			$auth_url = $this->client->createAuthUrl();
			$p['gapi_auth'] = $auth_url;

		}

		return $p;

	}

	/* データの取得処理 */
	public function get_analytics_data( $p ) {

		$string = '';
		$result = array();

		$this->client->setAccessToken( $p['gapi_token'] );
		$this->client->getAccessToken();

		try {

			$data = $this->service->data_ga->get(
					"ga:$p[gapi_pid]",
					$p['gapi_start'],
					$p['gapi_end'],
					'ga:pageviews',
					array(
						'dimensions'  => 'ga:pageTitle, ga:pagePath',
						'sort'        => '-ga:pageviews',
						'filters'     => null,
						'max-results' => $p['gapi_max']
					)
				);

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

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

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

				}

			}

			foreach( $result as $key ) {

				$string .= "{$key['ga:pagePath']},{$key['ga:pageTitle']},{$key['ga:pageviews']}\n";

			}

			/* 取得したデータはキャッシュファイルに書き出す */
			$fp = fopen( $p['gapi_cache'], "w" );
			@fwrite( $fp, $string, strlen( $string ) );
			fclose( $fp );

		} catch( apiServiceException $e ) {

			echo $e->getMessage();

		}

	}

}

?>

このクラスはこんな感じで使えます。

<?php

	$path = __DIR__;

	require_once( "$path/google-api-php-client/src/Google_Client.php" );
	require_once( "$path/google-api-php-client/src/contrib/Google_AnalyticsService.php" );
	require_once( "$path/class-google-analytics-client.php" );

	$param = array(

		'gapi_id'       => 'Google API の Client ID',
		'gapi_secret'   => 'Google API の Client secret',
		'gapi_redirect' => 'http:// <この PHP ファイルまでの URL パス>' ,
		'gapi_pid'      => 'Google アナリティクスのプロファイル ID  (int)',
		'gapi_start'    => '取得する開始日時 (Y-m-d 形式)',
		'gapi_end'      => '取得する終了終了日 (Y-m-d 形式)',
		'gapi_max'      => 10, // 取得する記事数
		'gapi_cache'    => "$path/tmp/gapi_cache.dat" // 取得データのキャッシュパス

	);

	$client = new ga_analytics_client( $param );
	$param = $client->api_authentication_process( $param );

		/* 認証が必要な場合に URL リンクを表示 */
		if ( isset( $param['gapi_auth'] ) ) {

			echo "<a href='$param[gapi_auth]'>このアプリケーションからの接続を許可してください。</a>\n";

		}

?>

あとは Google API Console でリダイレクト先をこのファイルに変えて、ブラウザからアクセスすると無事キャッシュが作成されます。

ただし、アクセストークンはどこにも保存しないので二回目にアクセスするとエラーが出ます。

以上、ざっくりとですがメモとして残しておきます。

そして、まだ続きますので完成まで頑張ろうと思います。

スポンサーリンク

コメント

コメントを残す

よく読まれている記事

  • 今日
  • 週間
  • 月間