Measurement Protocol : Le paramètre 'cid' ?

WRInaute accro
Bonjour

Tout est ok dans mon implémentation de Google Measurement Protocol sur mon site web, mais il y a deux hics :

- La vitesse est égale à zéro.

- Le nombre de visites par Google est égal à zéro.

Le paramètre 'cid' est calculé pour être constant pour chaque visiteur, puisque le Reference indique que 'cid' doit être un UUID Version 4, qui identifie le visiteur.

Je pourrais facilement rendre 'cid' entièrement aléatoire ( UUID Version 4 réel ), mais quid de l'identification du visiteur ?

Le paramètre 'dr' est égal à : $_SERVER['HTTP_REFERER']

What is wrong in my implementation ? ;)

Merci.
 
WRInaute accro
Voili, voilou

Rien de changé.

J'ai rendu 'cid' ( Client-ID ) variable et mis 'uid' ( UID ) fixe / visiteur, mais rien n'y fait.

Le paramètre :
Code:
  $data['dr'] = urlencode($_SERVER['HTTP_REFERER'];
n'est pas du tout pris en compte, c'est comme s'il n'existait pas.

Je ne met pas les titres des pages ( paramètre $data['dt'] ).

- Les visites par Google n'y sont pas.

- La vitesse est nulle.

Voilà.

Bien amicalement.
 
WRInaute accro
Bonjour

Voici mon implémentation de Google Measurement Protocol :

Code:
function getHost($Address)
{
    $parseUrl = parse_url(trim($Address));

    foreach(array('host', 'path') as $key)
    {
        $parseUrl[$key] = (isset($parseUrl[$key])) && (!empty($parseUrl[$key])) ? $parseUrl[$key] : '';
    }

    if(($pos = strpos($parseUrl['path'], '/')) !== false)
    {
        $pseudo_host = substr($parseUrl['path'], 0, $pos);
    }
    else
    {
        $pseudo_host = '';
    }

    return trim(!empty($parseUrl['host']) ? $parseUrl['host'] : $pseudo_host);
}

function parseUrl($url, $field = null)
{
    $tmp_array = parse_url($url);

    if(($pos = strpos($tmp_array['path'], "/")) !== false)
    {
        if(($host = substr($tmp_array['path'], 0, $pos)) != '')
        {
            if($host == getHost($url))
            {
                $tmp_array['host'] = $host;
                $tmp_array['path'] = substr($tmp_array['path'], $pos);
            }
        }
    }
    else
    {
        $tmp_array['path'] = '/' . $tmp_array['path'];
    }

    $matches_array = array('scheme',
        'host',
        'user',
        'pass',
        'user',
        'pass',
        'port',
        'path',
        'query',
        'fragment');

    foreach($matches_array as $key)
    {
        $tmp_array[$key] = array_key_exists($key, $tmp_array) && (isset($tmp_array[$key])) && (!empty($tmp_array[$key])) ? $tmp_array[$key] : '';
    }

    //    return $tmp_array;
    $url = (!empty($tmp_array['scheme'])) ? $tmp_array['scheme'] . '://' : '';
    $url .= (!empty($tmp_array['host'])) ? ':' . $tmp_array['host'] : '';
    $url .= (!empty($tmp_array['user']))&&(!empty($tmp_array['pass'])) ? $tmp_array['user'] . '@' . $tmp_array['pass'] : '';
    $url .= (!empty($tmp_array['port'])) ? ':' . $tmp_array['port'] : '';
    $url .= (!empty($tmp_array['path'])) ? $tmp_array['path'] : '';
    $url .= (!empty($tmp_array['query'])) ? '?' . $tmp_array['query'] : '';
    $url .= (!empty($tmp_array['fragment'])) ? '#' . $tmp_array['fragment'] : '';

    if($field !== null)
    {
        if((array_key_exists($field, $tmp_array))&&(isset($tmp_array[$field])))
        {
            return $tmp_array[$field];
        }
        else
        {
            return null;
        }
    }

    return $url;
}

function UUID($anon_id)
{
        // Binary Value
        $nstr = '';

        // Convert Namespace UUID to bits
        for($i = 0; $i < strlen($anon_id); $i+=2) {
            $nstr .= chr(hexdec(substr($anon_id, $i, 1)).hexdec(substr($anon_id,$i + 1, 1)));
        }

        // Calculate hash value
        $hash = sha1($nstr . $anon_id);

        return sprintf('%08s-%04s-%04x-%04x-%12s',
            // 32 bits for "time_low"
            substr($hash, 0, 8),
            // 16 bits for "time_mid"
            substr($hash, 8, 4),
            // 16 bits for "time_hi_and_version",
            // four most significant bits holds version number 3
            (hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x4000,
            // 16 bits, 8 bits for "clk_seq_hi_res",
            // 8 bits for "clk_seq_low",
            // two most significant bits holds zero and one for variant DCE1.1
            (hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
            // 48 bits for "node"
            substr($hash, 20, 12)
        );
}

/**
 * This function will send a request to GA servers with anonymous users's ID and details about the visit
 */
function gdpr_analytics() {
    $ip_address = ip_address();

    if($ip_address === false)
    {
        return(null);
    }

    $ga_url = "https://www.google-analytics.com/collect";
//    $ga_url = "https://www.google-analytics.com/debug/collect";

    $data = array();
    // Protocol Version
    $data["v"] = 1;

    // Tracking ID / Web Property ID
    $data['tid'] = "UA-XXXXXXX-Y";

    // Data Source
    $data['ds'] = "web";

    // Create an anonymous ID - we double hash with salt, GA won't who's who
    $hash_const = sha1(encode_vers_utf8($ip_address  . $_SERVER['HTTP_USER_AGENT']));

    // Client ID
    $data['cid'] = UUID($hash_const);

    // IP Override
    $data['uip'] = $ip_address;

    // User Agent  Override
    $data['ua'] = urlencode(encode_vers_utf8($_SERVER['HTTP_USER_AGENT']));

    // Document Referrer
    // Entier ou Host ?
    if(isset($_SERVER['HTTP_REFERER']))
    {
        $data['dr'] = urlencode(parseUrl(encode_vers_utf8($_SERVER['HTTP_REFERER'])));
    }

    // User Language
    $langue = $_SERVER['HTTP_ACCEPT_LANGUAGE'];

    if((($pos1 = strpos($langue, ";")) !== false)&&
        (($pos2 = strpos($langue, ",")) !== false))
    {
        $data['ul'] = urlencode(substr($langue, 0, min($pos1, $pos2)));
    }
    elseif(($pos1 = strpos($langue, ";")) !== false)
    {
        $data['ul'] = urlencode(substr($langue, 0, $pos1));
    }
    elseif(($pos2 = strpos($langue, ",")) !== false)
    {
        $data['ul'] = urlencode(substr($langue, 0, $pos2));
    }

    // Hit type
    $data["t"] = "pageview";

    // Document Host Name
    if(isset($_SERVER['REQUEST_SCHEME']))
    {
        $data['dh'] = urlencode(encode_vers_utf8($_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST']));
    }
    else
    {
        $data['dh'] = urlencode(encode_vers_utf8($_SERVER['HTTP_HOST']));
    }

    // Document Path
    $data['dp'] = urlencode(parseUrl(encode_vers_utf8($_SERVER['REQUEST_URI'], 'path')));

    // Send the request
    $response = http_post($ga_url, $data);

    return($response);
}


Celà me permet de ne plus demander la permission aux visiteurs, de mesurer la fréquentation de mon site avec Google Analytics, car les données sont anonymisées.

Le blème, c'est que le champ $data ['dr'] ( le Referrer ) semble ne pas être pris en compte.

Sur GA, j'ai toutes les visites en Direct, et la vitesse à zéro.

Cependant, GWT me détecte les visites autres non directes.

Que faire ?

Merci beaucoup de vos réponses.
 
WRInaute accro
Hé bé

Le problème venait du fait que j'urlencodais le $request passé au curl en mode post.

Maintenant, GA me détecte bien les referers, visites par moteur de recherche et direct, mais la vitesse est toujours nulle.

Par quel moyen ( quel paramètre ? ) Google Measurement Protocol mesure-t-il la vitesse de chargement de pages ?

Est- ce avec le paramètre : 'qt' Queue Time ?

Merci beaucoup de vos réponses.

Respectueusement.
 
Discussions similaires
Haut