Measurement Protocol : Le paramètre 'cid' ?

Discussion dans 'Google Analytics' créé par ortolojf, 27 Mai 2018.

  1. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 813
    J'aime reçus:
    8
    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.
     
  2. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 813
    J'aime reçus:
    8
    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.
     
  3. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 813
    J'aime reçus:
    8
    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.
     
  4. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 813
    J'aime reçus:
    8
    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.
     
Chargement...
Similar Threads - Measurement Protocol paramètre Forum Date
Measurement protocol et canaux d'acquisition Google Analytics 22 Août 2018
Google Measurement Protocol Timing : comment ? Google Analytics 30 Juin 2018
Google Measurement Protocol : vitesse à zéro ? Google Analytics 1 Juin 2018
Search Console un fichier robots.txt pour chaque protocole Débuter en référencement 15 Août 2019
Quel protocole d'achat ndd à un particulier ? Noms de domaine et référencement 13 Mai 2018
Passer au protocole HTTP/2 ? Administration d'un site Web 20 Décembre 2017
Le changement de protocole HTTP en HTTPS fait chuter mon site ! Débuter en référencement 28 Mai 2017
Migration HTTPS ; protocole relatif ou non ? Développement d'un site Web ou d'une appli mobile 30 Mars 2017
Deux protocoles: HTTPS & HTTP : considérés comme deux url différentes? Débuter en référencement 1 Octobre 2013
Protocole https not implemented( aidez moi s il vousplait) Problèmes de référencement spécifiques à vos sites 29 Juillet 2012
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice