¿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?


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í


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();

        }
    }

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!


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()
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.