GADGET 応用 ~ この記事を読んだ人はこんな記事も読んでいます

Posted by
ぴろり
Posted at
2012/05/10 14:54
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
ソフトウェア カテゴリ
カバーイメージ

 「この記事を読んだ人はこんな記事も読んでいます」な感じに、オススメ記事を紹介する MovableType プラグインというのを以前に公開しましたが、当然 MovableType でしか動作しないという制限がありました。先のエントリでGoogle Analytics のデータを利用してアクセス ランキングを生成できるようになったので、これと同様に Google Analytics の集計データを利用して、「この記事を読んだ人はこんな記事も読んでいます」的ナビゲーションを実現してみたいと思います。

このエントリーをはてなブックマークに追加  

特徴

  • GADGET を利用して集計を行うので、設定ファイルを差し替えるだけで動作します
  • MovableType プラグインではないので、WordPress などの様々な CMS や HTML を手動で更新しているようなサイトでも利用可能です
  • Google Analytics の強力な集計機能を利用できます
  • 集計は Google Analytics が全てやってくれるので、ページビューが非常に多いサイトでも安心して集計できます

動作の流れ

 「この記事を読んだ人はこんな記事も読んでいます」ランキングを求める指標として、ここでは簡単に「どのページから現在のページに飛んできたのか?」を集計することにします。サイト内に存在する全てのページについてその集計を行うわけですが、全てのページのリストを Google サイトマップ(sitemap.xml)から取得することにします。

  1. Google サイトマップ(sitemap.xml)を読み込み、集計すべきページの URL を抽出する
  2. ページの URL について Google Analytics に問い合わせを行い、XSLT を適用し、ファイルに書き出す、という処理をそれぞれページの数だけ行う

設定ファイルの例

---
name: この記事を読んだ人はこんな記事も読んでいます
account:
    Email: your.name@gmail.com
    Passwd: Your.Password
process: >
    sub {
        my $site_url =  'http://www.magicvox.net';
        my $site_path = '/home/magicvox/';
        my $sitemap = read_file ($site_path. '/sitemap.xml')
            or return undef;

        my $get_date = sub {
            sprintf ('%04d-%02d-%02d',
                sub {($_[5]+1900, $_[4]+1, $_[3])}->(localtime $_[0]));
        };

        my @process;
        while ($sitemap =~ s!<loc>\Q$site_url\E(/archive/\d+/\d+/)</loc>!!) {
            my $entry_path = $1;
            push @process, {
                name => $entry_path,
                request => {
                    'ids' =>            'ga:3857126',
                    'dimensions' =>     join (',',
                        "ga:pagePath",
                        "ga:pageTitle",
                    ),
                    'filters' =>        join (';',
                        "ga:previousPagePath==$entry_path",
                        "ga:nextPagePath!=$entry_path",
                        "ga:nextPagePath=~^/archive/\\d+/\\d+/",
                    ),
                    'metrics' =>        'ga:pageviews',
                    'sort' =>           '-ga:pageviews',
                    'max-results' =>    5,
                    'start-date' =>     $get_date->(time - 60 * 60 * 24 * 365),
                    'end-date' =>       $get_date->(time),
                },
                apply => $site_path. '/include/recommend.xsl',
                output => $site_path. $entry_path. 'recommend.inc.php',
            } if (-d $site_path. $entry_path);
        }
        return @process;
    }

 GADGET では、リクエストすべき内容を Perl 関数で動的に生成することができますが、更に進んで、処理すべきプロセスそのものを動的に生成できるようにしてあります。どのようなリクエストを行い、その結果にどのような処理を行って、なんというファイルに書き出すのか、という部分を定義している process を Perl の関数として記述しています(7~45行目)。その関数内では、始めに、事前に作成された sitemap.xml の内容を読み込んで、記述されている個別ページの URL について、request(23~39行目)、apply(40行目)、output(41行目) をそれぞれ設定しています。
 特に output(41行目) が、個々のページの URL に対応して変化するため、それぞれの個別記事のディレクトリごとにおすすめ記事のモジュール(recommend.inc.php)が生成されます。そして最終的には @include を使用してページ内に埋め込むことで、ページごとに異なるオススメ記事一覧が表示される仕組みです。

いろいろ

  • ライセンスは GPL とします
このエントリーをはてなブックマークに追加  


この記事を読んだ人はこんな記事も読んでいます記事リコメンデーションについて

カバー画像:オススメ記事を紹介する MovableType プラグイン:RecommendedEntry

関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。