2011-01-27 14 views
8

クッキーレス環境でGAを使用する必要があるため、私自身のGAライブラリを作成して追跡ピクセルにURLを作成しています。しかし、私はクッキー形式のドメインハッシュを作成することに固執しています。このクッキーでGoogleアナリティクスドメインハッシュを構築する

__utma=126394024.179004532335319200.1247654493.1260769004.1260878051.7 

最初のセグメント126394024は明らかに「ドメインハッシュ」であり、多くのサイトは、それが使われている方法を示しているように見える一方で、私は実際にドメインからそれを生成する方法を見つけ出すカント。これは、世界の他の国々に知られていないGoogleサーバーの内部プロセスによってのみ行われますか?または、このトークンを生成するために自分自身でドメイン名をハッシュする方法はありますか?

+0

好奇心で、あなたはそれをどの言語で作成していますか? – Yahel

+0

Javascript。悲しいことにクッキーをサポートしていないfile:// urlから作業しなければならないシステムになっています。 ga.jsにはCookieが必要です。 –

答えて

11

これは機能しますか?
http://www.google.com/support/forum/p/Google+Analytics/thread?tid=626b0e277aaedc3c&hl=en

function hash(d){ 
var a=1,c=0,h,o; 
if(d){ 
a=0; 
for(h=d["length"]-1;h>=0;h--){ 
o=d.charCodeAt(h); 
a=(a<<6&268435455)+o+(o<<14); 
c=a&266338304; 
a=c!=0?a^c>>21:a 
} 
} 
return a 
} 

は、誰もがそれを望むなら自分自身に上記の

+0

これは私のために働く。 +1 – Yahel

+0

素晴らしいですが、ga.jsテストが完璧に実行されます。ありがとうございました! –

3

C#バージョンを、それを確認していません。ここで

string hash(string d) 
    { 
     int a = 1; 
     int c = 0; 
     int h; 
     int o; 
     if (!String.IsNullOrEmpty(d)) 
     { 
      a = 0; 
      for (h = d.Length - 1; h >= 0; h--) 
      { 
       o = d[h]; 
       a = (a << 6 & 268435455) + o + (o << 14); 
       c = a & 266338304; 
       a = c != 0 ? a^c >> 21 : a; 
      } 
     } 
     return a.ToString(); 
    } 
+0

はうまく動作します、ありがとう – Dan

1

は、Javaのバージョンです。これは、Hive UDFを必要とする人には便利です。翻訳のトリッキーな部分は、ビットごとのxorの演算子優先順位と、Unicodeで取得する手法です。 クラス定義は簡潔にするために省略されています。

import java.util.List; 
import java.util.ArrayList; 

static int domain_hash(String s) { 
    List<Integer> d = get_string_charCodes(s); 
    int a=0,c=0,h,o; 
    if (d.size() == 0) { 
     return(1); 
    } 
    for(h = d.size()-1; h >= 0; h--) { 
     o = d.get(h); 
     a = ((a << 6) & 268435455) + o + (o << 14); 
     c = a & 266338304; 
     if (c != 0) { 
      a = a^(c>>21); 
     } 
    } 
    return(a); 
} 

static List<Integer> get_string_charCodes(String s) { 
    List<Integer> l = new ArrayList<Integer>(); 
    int length = s.length(), codepoint, offset; 
    for(offset = 0; offset < length; offset += Character.charCount(codepoint)) { 
     codepoint = s.codePointAt(offset); 
     l.add(codepoint); 
    } 
    return(l); 
} 
0

少し遅れていますが、私は他の場所でそれを見つけることができませんでした。ここではPHP版が価値があります。それは私のために働くので、うまくいけばそれは他の人のために嗅ぐことです。

function hash($d){ 
    $a = 1; 
    $c = 0;  
    if ($d){ 
     $a = 0; 
     for ($h = strlen($d)-1; $h >= 0; $h--){ 
      $o = ord($d[$h]); 
      $a = (($a<<6)&268435455)+$o+($o<<14); 
      $c = $a&266338304; 
      $a = ($c != 0)? $a^($c>>21) : $a; 
     } 
    } 
    return $a; 
} 
関連する問題