2011-01-27 34 views
8

Tôi đang tạo thư viện GA của riêng mình để tự tạo url cho pixel theo dõi vì tôi cần sử dụng GA trong môi trường ít cookie hơn. Nhưng tôi bị mắc kẹt khi tạo băm tên miền cho định dạng cookie.Xây dựng một băm tên miền phân tích google

Trong cookie này:

__utma=126394024.179004532335319200.1247654493.1260769004.1260878051.7 

Các phân đoạn đầu tiên 126394024 rõ ràng là một "băm tên miền", và trong khi nhiều trang web dường như để chứng tỏ nó được sử dụng, tôi thực sự không thể tìm ra cách để tạo ra nó từ một miền . Điều này chỉ được thực hiện bởi một quy trình nội bộ trên các máy chủ google mà chưa được biết đến với phần còn lại của thế giới? Hoặc là có một cách tôi có thể băm tên miền bản thân mình để sản xuất mã thông báo này?

+0

Vì sự tò mò, bạn đang xây dựng ngôn ngữ nào? – Yahel

+0

Javascript. Nó đi vào một hệ thống mà phải làm việc từ một tập tin:// url, mà thật đáng buồn không hỗ trợ cookie. Và ga.js yêu cầu cookie. –

Trả lời

11

Tính năng này có hoạt động không?
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 
} 

Chưa xác minh nó bản thân mình

+0

Điều này phù hợp với tôi. +1 – Yahel

+0

Tuyệt vời, phù hợp với chạy thử nghiệm ga.js một cách hoàn hảo. Cảm ơn bạn! –

3

C# phiên bản của các bên trên nếu có ai muốn nó:

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

hoạt động tuyệt vời, cảm ơn – Dan

1

Đây là một phiên bản Java. Điều này có thể hữu ích cho bất cứ ai cần một UDF Hive. Các phần phức tạp của bản dịch là ưu tiên toán tử của xor bitwise và kỹ thuật nhận được từ Unicode. Định nghĩa lớp đã bị bỏ qua vì lợi ích ngắn gọn.

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

Cuối năm, nhưng tôi không thể tìm thấy ở nơi khác, vì vậy giá trị của nó ở đây là phiên bản PHP. Nó làm việc cho tôi, vì vậy hy vọng nó sẽ làm cho người khác ngửi.

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; 
} 
Các vấn đề liên quan