以前に人気記事のランキングを表示する PHP スクリプトを公開しましたが、これは MovableType で運用されているサイトでしか機能しないという制限がありました。今日、多くのサイトでは Google Analytics が導入されていることと思いますが、この Google Analytics が集計したデータを利用して人気記事のランキングを生成できるようにすれば、MovableType や WordPress などの CMS で運用されているサイトのみならず、完全手作業で更新を行っているようなサイトにも適用可能です。
そこで、Google Analytics からデータ(Data)を取得して(Getting)、任意の変換(Encoding)や集計(Totalize)を行えるようなプログラムを書いてみました。略して GADGET(ガジェット)。無理矢理とか気にしない。
一応、汎用的に使えるようにしていますが、元がアクセス ランキングを生成するためだけに作ったものに肉付けをしていったので、それ以外の機能がまだ弱いところがあります。
さくらインターネットのレンタルサーバ(スタンダード プラン)では、必要なモジュールやライブラリは全てインストール済みです。
gadget.pl [設定ファイル名]
設定ファイル名
を省略した場合には、自動的に config.yaml
が指定されたものとします。
毎日のアクセス ランキングを作るには、cron
などを用いて、上記のスクリプトが定期的に実行されるようにしておきます。設定ファイルには、Google Analytics のアカウント情報がそのまま記述されているので、スクリプトは Web 公開ディレクトリ以外に置くのが賢明です。
--- name: 最近の人気記事 account: Email: your.name@gmail.com Passwd: You.Password process: name: Open MagicVox.net request: > sub { my $get_date = sub { sprintf ('%04d-%02d-%02d', sub {($_[5]+1900, $_[4]+1, $_[3])}->(localtime $_[0])); }; return { 'ids' => 'ga:3857126', 'dimensions' => 'ga:pagePath,ga:pageTitle', 'filters' => 'ga:pagePath=~^/archive/\\d+/\\d+/', 'metrics' => 'ga:pageviews', 'sort' => '-ga:pageviews', 'max-results' => 5, 'start-date' => $get_date->(time - 60 * 60 * 24 * 7), 'end-date' => $get_date->(time), }; } apply: /home/www/magicvox/include/hottopic.xsl output: /home/www/magicvox/include/hottopic.inc.php
Email
と Passwd
で指定されたアカウントを用いて Google Analytics にログインを試みます。その後、request
に指定されたリクエストを行います。この例では、今日(end-date
)から 1 週間分(start-date
)のアクセス数(metrics
)を集計して、アクセスの多かった記事のうち上位 5 件(sort
、max-results
)を取得しています。トップページや記事一覧ページなどを除いた個別記事へのアクセス数だけを集計したいので、個別記事のパーマリンクだけを集計するように filters
を指定しています。
次に、Google Analytics から返ってきた集計結果に対して、hottopic.xsl
を適用し、その結果を /home/www/magicvox/include/hottopic.inc.php
に書き出しています。
Google Analytics から取得したデータから任意の出力を生成する方法で悩んだ挙句、XSLT を利用する方法に落ち着きました。XSLT がなかなかクセのあるので、学習コストが少し高いかもしれませんが、まぁ後々、他のところでも色々と使えると思いますので頑張ってください(汗)
ところで、小粋空間さまで、Google Analytics APIでブログのアクセスランキングを作る方法が昨日の今日に公開されていて焦りました(´д`;) GADGET の場合、CPAN モジュールの要求が高いので、小粋空間さまで公開されている PHP 版の方が動作する環境が多いと思われます。
寄せられたコメント (全 1 件中、最新 5 件まで表示しています)
https://developers.google.com/identity/protocols/AuthForInstalledApps