JavaScriptが使いにくい携帯などの環境でGoogle Anlyticsを利用する場合は、通常このサイトで配布される1x1の画像を吐き出すサーバサイドのビーコンスクリプトを設置し、 Webサイドからリンクを張りますが、このサーバサイドのスクリプトのうちPerlのコードはCGI以外では実行しづらいモノなので、PSGIにアプリケーションにしてCPANにリリースしました

加えて、タイムアウトの制御が細かくできるようLWPをFurlにし、勝手にビーコンが他人に利用されないようchecksumを追加しています。また、PSGIアプリケーションで利用できるURL生成用のクライアントライブラリもつくりました。

使い方。まずサーバサイド。

use WWW::GoogleAnalytics::Mobile::PSGI;
use Plack::Builder;

builder {
    mount "/ga" => WWW::GoogleAnalytics::Mobile::PSGI->new(
        secret => 'my very secret key',
        timeout => 4,
    );
    ...

};

サーバサイドは、単独のアプリケーションでも他のアプリケーションと同居でもどちらでもかまいません。Google Analyticsが障害を起こした際の影響を考えると分けたいとか思うかもしれません。実際の稼働率はわかりません。

secretはチェックサムのための秘密の文字列。クライアントライブラリと共通にします。timeoutはGoogleへの問い合わせの制限時間です。

クライアントサイドは、

use WWW::GoogleAnalytics::Mobile;

my $gam = WWW::GoogleAnalytics::Mobile->new(
    secret => 'my very secret key',
    base_url => '/ga',
    account => '...',
);

my $image_url = $gam->image_url($env);

image_urlメソッドに渡すenvはPSGIのenvです。これで画像のurlが得られるのでテンプレート中に埋め込んで利用します。

いくつかTips。

WWW::GoogleAnalytics::Mobile::PSGIでGoogleにアクセス際にProxyを通すには、環境変数を利用します。

my $app = WWW::GoogleAnalytics::Mobile::PSGI->new()->to_app;
$app = sub {
    local $ENV{http_proxy} = 'http://192.168.32.1;
    $app->(shift);
};

な感じ。

また、Net::DNS::Liteを使っているので、googleにアクセスする際の名前解決の結果をCache::LRUなどを使ってキャッシュできます。

use WWW::GoogleAnalytics::Mobile::PSGI;
use Cache::LRU;

# setup cache for Net::DNS::Lite
$Net::DNS::Lite::CACHE = Cache::LRU->new(
    size => 256,
);

おためしくださいませませ。

このブログ記事について

このページは、Masahiro Naganoが2011年3月22日 15:45に書いたブログ記事です。

ひとつ前のブログ記事は「レゴ しんかい6500 を買った!組み立てた!」です。

次のブログ記事は「3.11 新宿から横浜まで歩いて帰ってきた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja