アクセスのデータをgoogleに見てもらう。

このサマリー部分のアカウント設定を編集を押す。

tmp11E5


で、下の画面。データを他のサービスに使うかのオプトイン?の説明

tmp11D4 

例としては、optimizerとか、と書いてあるけど、、個別にオプトインできるようにはなっていないのかな?

第三者に渡す事はないので、気にしなくてもいいのかもしれないが。

 

で、いつものようにwebをあさってたら、

googleは、”人間のアクセス解析の理解力不足”を解析・提案してくれるという事もあるのかな。

という記事を見た。(英語なので、理解が変だけど)

社長さんに見せるweb解析という商品もあるようだけど、担当者でも???な分野だろうし。

はやく、おせっかいを焼いて欲しい。僕に。

データマンより、先生のがいいに決まってる。

再)ga.jsのコードを見てみる。

ga-js-の勉強の時より、多少理解が進んだ。まだまだだけど。

コードは、http://www.google-analytics.com/ga.js

まずは、整形する。
http://jsbeautifier.org/
ファイルに保存。以後の行数は、この整形されたファイルの行数を使用。

全体の構成

このga.jsは、文字数を少なく書く事が目標となっており、一文字変数が多い。
false,trueも、一文字の変数に代入している。

4-134行 window._gat={}
オブジェクトリテラルで_gatが定義されている。
いろいろな、文字列が一文字・二文字の変数に代入され、文字列処理utilityメソッドが定義されている。

135行 var F = window._gat 変数Fに入れている

136-1669行 Fのプロパティの設定が延々と続いて終わる。

コードとしては、これだけ。
実際に、利用する場合には、pageTracker=_gat.getTracker("UA-XXXXX-Y")と呼ぶのだが、
この_gat.getTrackerは、最後行あたりの F._getTracker=function(g,l){return new F.qc(g,l)}
で定義されており、このreturn値が、pageTracker変数に入る。

F.qc

1070-1666行
a=thisとして、その後、延々とaにプロパティ追加されている。
この中のプロパティで、_がprefixされているものが、Google AnalyticsのAPI。

なので、APIを調べる時は、ここが出発点になる。
また、重要な変数として、aの他に, fがある。
f=new F.lcと代入される変数

F.lc

136-188行にある
g=thisしたあとに、gにいろいろ詰め込んでいる。
g.bはdocument, g.cはwindow,g.Laは検索エンジン名のオブジェクト
ga.jsの設定値に関わる部分になる。

もう一度, F.qcで出来るオブジェクトについて書くと、
fは、new F.lc()で作成されるオブジェクト、f.bはdocument, f.cはwindow。
a=this で、aに設定していってる。

a._trackPageview

aのプロパティを全部見るのは難しいので、主要APIのa._trackPageviewの所だけ見る。
行番号付きで表示すると、

1365         a._trackPageview = function (b) {
1366             if (t()) {
1367                 a._initData();
1368                 f.H && a.od();
1369                 a.td(b);
1370                 a.T = E
1371             }
1372         };

この処理を順番にみる。

t() 1127-1129行

ドメインが、正常な物かどうかを判別する?

定義は、function t(){ return "file:" != f.b.location.protocol && i()}

f.bはdocument。

i()は

<pre>

1110      function i() {

1111             var b = f.e,

1112             h = r(b, "www.google.") * r(b, ".google.") * r(b, "google.");

1113             return h || "/" != f.n || r(b, "google.org") > -1

1114      }

</pre>

ちなみに、f.eはデファルトでは、"auto"(_setDomainName()のデフォルト値)

* r=function(g,l){return g.indexOf(l)}

fileではなく、domainにgoogleがなければ、trackPageviewは処理に入る。

a._initData() 1292-1321行

少し長いが抜き出す。

1292         a._initData = function () {
1293             var b;
1294             if (!s) {
1295                 if (!a.N) {
1296                     a.N = new F.kc(f);
1297                     a.N.Kc()
1298                 }
1299                 a.f = a.Oc();
1300                 a.o = new F.ra(f);
1301                 a.k = new F.da;
1302                 B = new F.nc(f, a.f, a.o, a.k);
1303                 a.$c()
1304             }
1305             if (t()) {
1306                 a.Yc();
1307                 B.bd()
1308             }
1309             if (!s) {
1310                 if (t()) {
1311                     a.ya = a.Fc(a.Cb, f.b.domain);
1312                     if (f.ta) {
1313                         b = new F.w(a.f, a.ya, a.D, f);
1314                         a.ub = b.Lc(a.o, a.T)
1315                     }
1316                 }
1317                 a.Eb = new F.da;
1318                 s = c
1319             }
1320             F.Lb || a.ad()
1321         };

sは、_gat={s=E}と、設定されており、false。

t()は、(上に書いた,protocol,domainチェック)。trueなら、処理に入る。

a.N=kで、k=F.aで、たぶん?7行目のa:undefinedになっている。

1296-1297 a.N = new F.kc(f);

a.N.Kc()の部分は、

    581-650 F.kc

    l=g, a=l.c(window), k=thisと変数に入れ、

    その後、browserやosの値を取得している

    640のk.qdは、でそれらの値の文字出力メソッド。

    645のk.Icでは、

    history-object(https://developer.mozilla.org/ja/DOM/window.history)

    F.sはHashを作るメソッドか、(31-45)

    this.Kc()も設定値を返している。詳細は追わない。

1299  a.Oc()

これは、domainハッシュを返す関数(setDomain()した場合は1を返す形

1300 new F.ra(f)のcalleeは、278-439行

…疲れたので、飛ばす。

その後も、aのプロパティに値を設定する処理が続いている。

まとめとしては、a._initData()は、データの初期化部分、、、_Pageview()時に取得できる情報をsetしてる。

_initDataは、他の 部分でも、呼ばれてる。データを送る際に、前処理として呼ばれる。下はoccur a._initDataした結果。

1291:        a._initData = function () {

  1323:            a._initData();

  1329:            a._initData();

  1368:                a._initData();

  1380:            a._initData();

  1394:            a._initData();

  1420:                a._initData();

  1426:            a._initData();

  1430:            a._initData();

  1434:            a.initData();

  1442:                a._initData();

  1448:                a._initData();

  1471:            a._initData();

  1476:            a._initData();

  1483:            a._initData();

  1496:            a._initData();


F.qc部分に戻る。

f.H && a.od()

f.Hは、undefinedになっているので、次の行へ。

a.td(b)

a.tdの定義部分の抜き出す。

1185       a.td = function (b) {
1186             if (a.X()) {
1187                 var h = "";
1188                 if (a.k != k && a.k.U().length > 0) h += "&utme=" + x(a.k.U());
1189                 h += a.Oa(b);
1190                 y.V(h, a.F, a.f)
1191             }
1192         }; 

yは、F.pcの値が入っている。

(a.initDaataの中の1303行目で、a.$c()をcallしている。a.$c=function(){y= new F.pc(f)}

F.pc(f)

440-506行にある。

y.V(a.tdの中では、l.V)は、455-475で定義されている。

リクエスト文字列が作られれ、l.Bbをcallする。

l.Bbは、479-486行

<img>タグを作り、onloadメソッドを定義。リクエストが走る。

a.T=E

そのまま、falseを指定してるだけ?

—————————

終了

—————————

尻切れトンボになったが、これが、pageTrackerを作り、 trackPageviewメソッドを行う、なかの流れ。

ちなみに、APIのなかには、これから使用予定のものも、顔を出している。

http://www.google.com/support/forum/p/Google+Analytics/thread?tid=3dfa688533e09141&hl=en

1. _setAutoTrackOutbound,

2. _setTrackOutboundSubdomain,

3. _setHreExamineLimit

4. _setRefferOverride

あまり、実際のアクセス解析には役に立たないかな。

http://www.analyticsmarket.com/

このサイトを見てたら、GAの情報を自分のサーバーにも飛ばしていた。

GAの研究をするなら、こういうのが必要なのかな。

今の俺には、無理だ。

GA reportのURI表示の文字化けを直す

2009年10月7日、少し訂正(load時にdecodeしてたのを、mouse-clickでdecodeする用にした、pull-downで日本語に変換する場面が多々あるので)

コンテンツのページで、URIに日本語を含むようにしていると、日本語部分の表示が、

google-analytics-%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%ac%e3%83%9d%ef%bc%8d%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e8%a6%8b%e3%82%8b%e3%80%82

と、URIencodeされたままになっていて、せっかく直感的理解の為のツールであるGoogle Analyticsの意義を損なっている。

解決方法は、安直だけど、firefoxのgreasemonkeyで、かたっぱしから、decodeURI(“hogehoge”)とするしか思いつかない。

該当しそうなのは、<a>タグと、<div>タグで、classがdetail, text_wrapperのものっぽいので、それをdecodeURIした。

as = document.getElementsByTagName("a");
ds = document.getElementsByClassName("detail");
ts = document.getElementsByClassName("text_wrapper");
f =function(g){Array.forEach(g, function(e){
                                          text = e.textContent;
                                          if(text.indexOf("%") != -1){
                                             e.textContent = decodeURI(text);
                                          }
	                            if(e.title && e.title.indexOf("%") != -1){
		                 e.title = decodeURI(e.title);
		              }
});};
Array.forEach([as,ds,ts], f);
window.addEventListener("click", function(){Array.forEach([as,ds,ts], f)},false);

http://d.hatena.ne.jp/javascripter/20080501/1209624240 を見たら、配列のように扱う方法を知った。

google analytics というより、javascriptの配列処理の Array.forEachの練習の記事になってしまった。firefoxにしか使えないみたいなので、greasemonkeyぐらいにしか使い道がなさそうだけど。