モバイル用のGoogle Analyticsを埋め込むPlack::Middlewareらしきものをつくった。たぶん下記のようなインターフェースで動くはずだけど、ニセPSGI実装上でしかチェックしてないので、Plackで動くかどうかわからない。
なお、ga.plはGoogle Analytics公式サイトからGETしてドキュメントルートなどに設置する必要があります。
builder { enable 'GoogleMobileAnalytics', GA_ACCOUNT => 'UA-XXXXXX-1', GA_PIXEL => '/ga.pl'; $app; };
package Plack::Middleware::GoogleMobileAnalytics; use strict; use warnings; our $VERSION = '0.01'; use base qw( Plack::Middleware ); use Plack::Util; use Plack::Util::Accessor qw( GA_ACCOUNT ); use Plack::Util::Accessor qw( GA_PIXEL ); use URI::Escape; sub call { my $self = shift; my $res = $self->app->(@_); $self->response_cb($res, sub { my $res = shift; my $h = Plack::Util::headers($res->[1]); if ($h->get('Content-Type') =~ 'text/html') { return sub { my $chunk = shift; if (! defined $chunk) { return; } $chunk =~ s{</body>}{'<img src="' . $self->google_analytics_get_image_url() . '" /></body>'}e; return $chunk; }; } $res; }); } sub google_analytics_get_image_url { my $self = shift; my $url = ''; $url .= $self->GA_PIXEL . '?'; $url .= 'utmac=' . $self->GA_ACCOUNT; $url .= '&utmn=' . int(rand(0x7fffffff)); $url .= '&utmr=' . uri_escape($ENV{'HTTP_REFERER'} || '-'); $url .= '&utmp=' . uri_escape($ENV{'REQUEST_URI'}); $url .= '&guid=ON'; $url =~ s/&/&/g; $url; } 1;