2011-01-27 10 views
8

मैं ट्रैकिंग पिक्सेल में यूआरएल बनाने के लिए अपनी खुद की जीए लाइब्रेरी बना रहा हूं क्योंकि मुझे कुकी-कम वातावरण में GA का उपयोग करने की आवश्यकता है। लेकिन मैं कुकी प्रारूप के लिए डोमेन हैश बनाने पर अटक गया हूं।एक Google Analytics डोमेन बनाना हैश

इस कुकी में:

__utma=126394024.179004532335319200.1247654493.1260769004.1260878051.7 

प्रथम खंड 126394024 जाहिरा तौर पर एक "डोमेन हैश" है, और जबकि कई साइटों को दिखाने के लिए उसके उपयोग के तरीके लगता है, मैं वास्तव में यह पता लगाने की कि यह कैसे एक डोमेन से उत्पन्न करने के लिए नहीं कर सकते । क्या यह केवल Google सर्वर पर एक आंतरिक प्रक्रिया द्वारा किया जाता है जो शेष दुनिया के लिए अज्ञात है? या क्या कोई तरीका है कि मैं इस टोकन का उत्पादन करने के लिए डोमेन नाम खुद को हश कर सकता हूं?

+0

जिज्ञासा से, आप किस भाषा के लिए इसे बना रहे हैं? – Yahel

+0

जावास्क्रिप्ट। यह एक ऐसी प्रणाली में जा रहा है जिसे फ़ाइल से काम करना है: // url, जो दुर्भाग्य से कुकीज़ का समर्थन नहीं करता है। और ga.js कुकीज़ की आवश्यकता है। –

उत्तर

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

सी # संस्करण अगर कोई यह चाहता है सत्यापित नहीं किया है:

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

यहाँ एक जावा संस्करण है। यह किसी भी व्यक्ति को हाइव यूडीएफ की आवश्यकता के लिए उपयोगी हो सकता है। अनुवाद के मुश्किल भाग ऑपरेटर प्राथमिकता बिटवाईर xor, और यूनिकोड पर प्राप्त करने की तकनीक हैं। ब्रेवटी के हित में वर्ग परिभाषा छोड़ दी गई है।

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; 
}