Existe-t-il un moyen de publier des événements sur Google Analytics via l'API côté serveur? [fermé]

178

J'essaie d'utiliser Google Analytics à partir de notre système backend en y publiant des événements. Existe-t-il un moyen de le faire avec l'API de GA côté serveur?

X__
la source
oui, en utilisant un client JS Measurement Protocol comme celui-ci
Lloyd

Réponses:

231

Il est désormais possible (et facile) de suivre les données Analytics du côté serveur. Avec le lancement d'Universal Analytics, vous pouvez désormais utiliser le protocole de mesure pour publier des données sur les serveurs GA.

Exemples de code ici

Shanabus
la source
5
Cela devrait être une réponse acceptée. Nous sommes probablement dans une situation similaire à celle d'OP où nous voulons avoir un chiffre d'affaires assez précis avec les données des visiteurs du site Web. Et le suivi côté navigateur n'est tout simplement pas assez bon pour la dernière étape du paiement (par exemple, le client ne revient pas du site du fournisseur de paiement).
Tadas Sasnauskas
J'ai le même problème avec le client qui ne revient pas du site du fournisseur de paiement, mais je n'ai pas d'identifiant client. Comment attacher des données à la session client?
Korjavin Ivan
2
@KorjavinIvan voici les instructions pour obtenir l'ID client ou le paramètre cid requis pour le protocole de mesure: developer.google.com/analytics/devguides/collection/…
Jorge Pedret
1
cela semble être un bon moyen de contourner l'effet des bloqueurs de publicités qui recherchent des refs comme ga.js
JoshuaDavid
le même protocole de mesure, Google Analytics et Google Tag Manager ??
Kiquenet
21
using System;
using System.Collections.Generic;
using System.Web;
using System.Net;
using System.IO;
using System.Text;

    public class GoogleAnalyticsApi
    {
        public static void TrackEvent(string type, string category,
               string action, string label, string value)
        {

            ASCIIEncoding encoding = new ASCIIEncoding();
            string postData = 
                "v=1&tid=UX-XXXXXXX-1&cid=1234&t=" + type +
                "&ec=" + category + 
                "&ea=" + action + 
                "&el=" + label + 
                "&ev=" + value;
            byte[] data = encoding.GetBytes(postData);
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("https://www.google-analytics.com/collect");

            myRequest.Method = "POST";
            myRequest.ContentType = "application/x-www-form-urlencoded";
            myRequest.ContentLength = data.Length;
            Stream newStream = myRequest.GetRequestStream();
            newStream.Write(data, 0, data.Length);
            newStream.Close();

        }
    }
Koby Douek
la source
Cela utilise l'analyse universelle correcte?
Brady Moritz
@BradyMoritz Oui, il le fait
Koby Douek
Aussi, une raison d'utiliser post quand il peut également utiliser une demande d'obtention?
Brady Moritz
est-ce c #? vous devriez préciser peut-être?
Esqarrouth le
7

Si vous utilisez PHP, vous pouvez facilement appeler le protocole de mesure Analytics pour envoyer des pages vues à votre compte Google Analytics:

function sendAnalytics($sGaId, $sHostname, $sPath, $sTitle) {

    $aParams = array();

    //Protocol Version
    $aParams['v'] = '1';

    //Tracking ID / Web Property ID
    $aParams['tid'] = $sGaId;

    //Anonymize IP
    $aParams['aip'] = '1';

    //Data Source
    $aParams['ds'] = 'web';

    //Queue Time
    $aParams['qt'] = 0;

    //Client ID
    $aParams['cid'] = substr(md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']), 0, 8);

    //User ID
    //$aParams['uid'] = '';

    //Session Control
    //$aParams[''] = '';

    //IP Override
    $aParams['uip'] = $_SERVER['REMOTE_ADDR'];

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

    //Geographical Override
    //$aParams['geoid'] = '';

    //Document Referrer
    //$aParams['dr'] = '';

    //Campaign Name
    //$aParams['cn'] = '';

    //Campaign Source
    //$aParams['cs'] = '';

    //Campaign Medium
    //$aParams['cm'] = '';

    //Campaign Keyword
    //$aParams['ck'] = '';

    //Campaign Content
    //$aParams['cc'] = '';

    //Campaign ID
    //$aParams['ci'] = '';

    //Google AdWords ID
    //$aParams['gclid'] = '';

    //Google Display Ads ID
    //$aParams[''] = '';


    ////SystemInfo => see docs

    //Hit type
    $aParams['t'] = 'pageview';

    //Non-Interaction Hit
    //$aParams['ni'] = '';

    //Hostname
    $aParams['dh'] = $sHostname;

    //Document Path
    $aParams['dp'] = $sPath;

    //Document title
    $aParams['dt'] = urlencode($sTitle);


    $sGaUrl = 'http://www.google-analytics.com/collect?';


    foreach($aParams AS $sKey => $sValue) {
        $sGaUrl.= "$sKey=$sValue&";
    }

    $sGaUrl = substr($sGaUrl, 0, -1);

    file_get_contents($sGaUrl);
}


sendAnalytics('UA-XXXXXXXX-1', 'http://foo.com', '/bar', 'Foo Bar');

J'espère que cela pourra aider!

Fabien
la source
1
http_build_query () pourrait rendre cela un peu plus propre (et prendre en charge une bonne
évacuation
2

Jetez un œil au module usage-stats .

Ligne de commande

Suivi des statistiques dans les scripts shell:

# Track an event: category 'Backup', action 'start'
usage-stats event --tid UA-98765432-1 --ec Backup --ea start

# Perform the backup
cp files/** backup/

# Track an event: category 'Backup', action 'complete'
usage-stats event --tid UA-98765432-1 --ec Backup --ea complete

API

L'exemple le plus trivial.

const UsageStats = require('usage-stats')
const usageStats = new UsageStats('UA-98765432-1', { an: 'example' })

usageStats.screenView('screen name')
usageStats.event('category', 'action')
usageStats.send()
Lloyd
la source