Analytics のレポート表示期間を一発変更してみた

毎日 Google Analytics をチェックしては溜息ついたりしかめっ面したり、たまにニヤッとすることもある野良プログラマ兼細腕ウェブサービス運営者の Mariyudu です、ども。

レポートで前日のデータがすぐ表示されない件

さて、このほぼ毎日利用している Google Analytics ですが、レポートの表示期間が前日までではなく、その1〜2日前になってしまうことがあります。プロファイルのタイムゾーン等は日本に設定してるんですがねぇ。この件はヘルプフォーラムにも載っていて、回答にある「米国時間0時切り替わり説」に従うなら、それが東部標準時の場合、日本では14時にならないと前日のデータがデフォルトでは表示されないことになります。成程そんな雰囲気はあるみたいですが、私が Analytics をチェックするのは午前中が多いので、いちいち手作業で表示期間を変更するのが煩わしいんですよね。この辺、JavaScript とかで自動化できんか? と思い、ブックマークレットの作成を思い立ちました。

調べてみた件

簡単に経緯を少し。最初は、ポップアップで出てくる表示期間設定カレンダー横のテキストボックスに前日の日付を計算してブチこめばいいかな、くらいに考えてましたが、Analytics は全体的にハンパなく JS バリバリな Web アプリになっていて、静的 Web ページ操作レベルな付け焼刃は通用しないみたいです。もう少し調査を進めて、表示期間をクエリストリングに指定できるレポートの URL があることがわかりました。ページ左上付近の「マイレポート」に適用されているリンクです。この URL は

https://www.google.com/analytics/reporting/dashboard?dashboard=1&id=<プロファイルのID>&pdr=<期間開始年月日>-<期間終了年月日>&cmp=average

という書式になっているらしいのでこれを有難く使わせてもらうことに。

黙ってコードかけよ、な件

方針が決まったら後はガンガンコーディングっと。jQuery とかが使えないので若干ツラいですが。以下はそのコードです。何をやってるか等はコード嫁ということで(つかコメント添えました)。

(function(){
	// id="email_button_item" の td 内にあるリンク先からプロファイルの ID を取得
	var td = document.getElementById( "email_button_item" );
	var link = 0;
	for ( n=0 ; n<td.childNodes.length ; n++ ) {
		if ( td.childNodes[n].nodeName == 'A' ) {
			link = td.childNodes[n].getAttribute( 'href' );
		}
	}
	if ( ! link ) return;
	var id = (matches=/[\?\&]id=(\d+)/.exec(link)) ? matches[1] : 0;
	if ( ! id ) return;
	// 期間(前日から遡って1ヶ月)を計算
	var lastDate = function(d){return (new Date( d.getFullYear(), d.getMonth()+1, 0 )).getDate();};
	var d2 = new Date;
	var d1;
	d2.setTime( d2.getTime()-86400000 );
	if ( d2.getDate() == lastDate(d2) ) {
		d1 = new Date( d2.getFullYear(), d2.getMonth(), 1 );
	}
	else {
		d1 = new Date( d2.getFullYear()-(d2.getMonth()>0 ? 0 : 1), (d2.getMonth()+11)%12, 1 );
		d1.setDate( d2.getDate()>=(ld=lastDate(d1)) ? ld : d2.getDate()+1 )
	}
	// ページ遷移
	var pdr = ("0000"+d1.getFullYear()).slice(-4) + ("00"+(d1.getMonth()+1)).slice(-2) + ("0000"+d1.getDate()).slice(-2) + '-' + ("0000"+d2.getFullYear()).slice(-4) + ("00"+(d2.getMonth()+1)).slice(-2) + ("0000"+d2.getDate()).slice(-2);
	window.location.href = 'https://www.google.com/analytics/reporting/dashboard?id=' + id + '&pdr=' + pdr + '&cmp=averag';
}).call();

これをブックマークレット用に短縮したのが以下のごにょごにょです。

javascript:(function(){var td=document.getElementById("email_button_item");var link=0;for(n=0;n0?0:1),(d2.getMonth()+11) % 12,1 );d1.setDate(d2.getDate()>=(ld=lastDate(d1))?ld:d2.getDate()+1)}var pdr=("0000"+d1.getFullYear()).slice(-4)+("00"+(d1.getMonth()+1)).slice(-2)+("0000"+d1.getDate()).slice(-2)+'-'+("0000"+d2.getFullYear()).slice(-4)+("00"+(d2.getMonth()+1)).slice(-2)+("0000"+d2.getDate()).slice(-2);window.location.href='https://www.google.com/analytics/reporting/dashboard?id='+id+'&pdr='+pdr+'&cmp=averag';}).call();

どーぞ勝手に使って下さい責任は持ちませんがな件

使い方はカンタン。

  1. 上記のごにょごにょをお手持ちのブラウザにブックマーク登録
  2. Google Analytics にログインして、所定のプロファイルのレポートページを表示
  3. 表示期間が前日を含んでいなかったら、登録したブックマークを実行!!

ということで、同じようにお困りの方は試してみて幸せになって頂ければと。尚、このプログラムは公式アナウンスされたサービス仕様に基づいたものでは全然なく、勝手対応なので Google 先生のご都合により突如動かなくなるかも知れません。ご承知おきを。