¿Hay alguna forma de publicar eventos en Google Analytics a través de la API del lado del servidor? [cerrado]

178

Estoy tratando de usar Google Analytics desde nuestro sistema de backend publicando eventos en él. ¿Hay alguna manera de hacer esto con la API de GA en el lado del servidor?

X__
fuente
sí, usando un cliente de JS Measurement Protocol como este
Lloyd

Respuestas:

231

Ahora es posible (y fácil) rastrear los datos de Analytics desde el lado del servidor. Con el lanzamiento de Universal Analytics, ahora puede usar el Protocolo de medición para publicar datos en los servidores de GA.

Código de muestras aquí

shanabus
fuente
55
Esto debe ser aceptado respuesta. Probablemente nos encontremos en una situación similar, como OP, donde queremos tener una cifra de ingresos bastante precisa con los datos de los visitantes del sitio web. Y el seguimiento del navegador no es lo suficientemente bueno para el último paso de completar el pago (por ejemplo, el cliente no regresa del sitio del proveedor de pagos).
Tadas Sasnauskas
Tengo el mismo problema con el cliente no regresa del sitio del proveedor de pagos, pero no tengo ID de cliente. ¿Cómo adjuntar datos a la sesión del cliente?
Korjavin Ivan el
2
@KorjavinIvan aquí están las instrucciones para obtener la identificación del cliente o el parámetro cid requerido para el Protocolo de medición: developers.google.com/analytics/devguides/collection/…
Jorge Pedret
1
esto parece una buena forma de evitar el efecto de ad-bloqueantes, que busque referencias como ga.js.
JoshuaDavid
¿El mismo protocolo de medición, Google Analytics y 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
fuente
Esto utiliza el análisis universal correcto?
Brady Moritz
@BradyMoritz Sí, lo hace
Koby Douek
Además, ¿hay alguna razón para usar la publicación cuando también puede usar una solicitud de obtención?
Brady Moritz
¿Es esto C #? deberías especificar tal vez?
Esqarrouth
7

Si usa PHP, puede llamar fácilmente al Protocolo de medición de Analytics para enviar visitas a su cuenta de 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');

¡Espero que ayude!

Fabian
fuente
1
http_build_query () podría hacer que esto sea un poco más limpio (y admitir el escape adecuado)
kainjow
2

Echa un vistazo al módulo de estadísticas de uso .

Línea de comando

Estadísticas de seguimiento en scripts de 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

El ejemplo más 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
fuente