tracker - Crear un hash de dominio de Google Analytics
google tag manager tutorial español (4)
¿Esto funciona?
http://www.google.com/support/forum/p/Google+Analytics/thread?tid=626b0e277aaedc3c&hl=es
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
}
No lo he verificado yo mismo
Estoy creando mi propia biblioteca GA para construir una URL para el píxel de seguimiento, ya que necesito usar GA en un entorno sin cookies. Pero estoy atascado en crear el hash de dominio para el formato de cookie.
En esta cookie:
__utma=126394024.179004532335319200.1247654493.1260769004.1260878051.7
El primer segmento 126394024
es aparentemente un "hash de dominio", y aunque muchos sitios parecen mostrar cómo se usa, realmente no puedo descifrar cómo generarlo desde un dominio. ¿Esto solo se hace mediante un proceso interno en los servidores de Google que es desconocido para el resto del mundo? ¿O hay una forma en que puedo usar el nombre de dominio para producir este token?
Versión de C # de arriba si alguien lo quiere:
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();
}
Aquí hay una versión de Java. Esto podría ser útil para cualquier persona que necesite un UDF de Hive. Las partes difíciles de la traducción son la precedencia del operador de bitwise xor, y la técnica de llegar al Unicode. La definición de clase ha sido dejada de lado por razones de brevedad.
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);
}
Un poco tarde, pero no pude encontrarlo en otro lado, así que lo que vale aquí es una versión de PHP. Funciona para mí, así que espero que sea para otros.
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;
}