Cómo usar API de google analytics y adwords desde Django

  
4 de Octubre de 2014   1  

Actualmente Google analytics y adwords es cada vez mas usado en casi todos los proyectos webs, para poder ir analizando nuestro tráfico y qué tipo de personas visitan nuestra web, o en el caso de adwords para ver las conversiones que llevamos, CPA, campañas de PPC (pay per click), etc..

 

Todos estos datos podemos obtenerlos directamente con python desde la api oficial de google. Esta api solo nos permite la opción de solo lecturas para algunas métricas.

Primero debemos instalar la librería que nos va a permitir conectarnos con Analytics y adowrds, podemos hacerlo via Pip o easy_install de la siguiente forma: (Si usamos Virtualenv, debemos tenerlo activo antes de instalarlo)

Paso 1: Instalar la libreria
$ pip install google-api-python-client
ó
$ easy_install google-api-python-client

Paso 2: Activar la API

Una vez instaladas las librerías, debemos generar nuestra api en la plataforma de google en el siguiente enlace:

https://code.google.com/apis/console/?noredirect

Veremos algo asi:

inicio

Una vez dentro nos dirigimos a la pestaña llamada Services, buscamos la Api de Analytics y la activamos.

Captura de pantalla 2014-10-04 a la(s) 12.13.41

Muy bien, ya la tenemos activada! ahora solo nos falta generar la api key.

En la misma página nos dirigimos a la pestaña llamada Api access  donde debemos hacer click en Create an OAuth 2.0 Client ID… 

Captura de pantalla 2014-10-04 a la(s) 12.15.57

Nos preguntarán como se llamará nuestra api (Ponerle cualquier nombre), el logo, y la url de nuestro proyecto.

Captura de pantalla 2014-10-04 a la(s) 12.16.43

Una vez rellenado el formulario damos en siguiente y vamos al segundo paso. Especificamos la primera opción (Web application), en la url que nos pide, debemos poner la URL donde nos conectaremos a la API, es importante que sea exacta la url, ya que de lo contrario no nos dejará conectarnos luego.

Captura de pantalla 2014-10-04 a la(s) 12.17.20

Muy bien, en este punto ya tenemos a la mano nuestra KEY.

Captura de pantalla 2014-10-04 a la(s) 12.17.50

Paso 3: Programación

Ahora vamos a la parte de Django. Vamos a crear una vista donde al entrar se conecte con nuestra api y recupere las visitas en un rango de fechas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from django.views.generic import TemplateView
from oauth2client.client import OAuth2WebServerFlow
import httplib2
 
Class Analytics(TemplateView):
    template_name = 'analitica/inicio.html'
    def get(self*args, **kwargs):
        if not self.request.GET.has_key('code'):
            ID = 'XXXXXXXXXXXXXX.apps.googleusercontent.com'
            secret = 'XXXXXXXXXX'
            scope = 'https://www.googleapis.com/auth/analytics.readonly'
            redirect = 'https://www.miproyecto.com/analytics.htm'
            flow = OAuth2WebServerFlow(ID, secret, scope, redirect)
            authorize_url = flow.step1_get_authorize_url()
            return HttpResponseRedirect(authorize_url)
 
        code = self.request.GET['code']
        credentials = flow.step2_exchange(code)
        http_r = httplib2.Http()
        http_r = credentials.authorize(http_r)
        service = build('analytics''v3', http=http_r)
        id_analytics = 'ga:XXXXXXX'
        entrada ='2014-09-01'
        salida = '2014-09-30'
        adwords = service.data().ga().get(ids=id_analytics, start_date=entrada,
            end_date=salida, metrics='ga:adCost').execute()
        self.coste = float(adwords['totalsForAllResults']['ga:adCost'])
 
        return super(Analytics, self).get(*args, **kwargs)
 
    def get_context_data(self**kwargs):
        ctx = super(Analytics, self).get_context_data(**kwargs)
        try:
            ctx['coste'= self.coste
        except Exception:
            ctx['coste'= None
        return ctx

Vamos a separar el código y explicarlo paso a paso:

1
2
3
from django.views.generic import TemplateView
from oauth2client.client import OAuth2WebServerFlow
import httplib2

Éstas son simplemente las librerías que vamos a usar para nuestra vista.

1
if not self.request.GET.has_key('code'):

Aquí comprobamos al entrar en la url de la vista que no tengamos el parámetro GET, este punto es debido a que la api de google nos obliga a redirigirnos a una web de ellos donde nos proporcionan un código para realizar la autenticación, luego este código debemos pasarlos a un método en python y poder loguearnos (Esto cada vez que queramos sacar las métricas desde la api) por eso para evitar hacer tantos pasos lo que haremos es lo siguiente. La primera vez que entremos a la url no tendremos el parámetro GET llamado code, entonces entramos en la condicional.

1
2
3
4
ID = 'XXXXXXXXXXXXXX.apps.googleusercontent.com'
secret = 'XXXXXXXXXX'

Éstos son los datos que nos proporcionó Google al crear la API en su página (Cambiar las XXXXX por el código que nos hayan dado), el scope siempre será el mismo, tanto para analytics como adwords. es donde vamos a conectarnos.

1
2
authorize_url = flow.step1_get_authorize_url()
return HttpResponseRedirect(authorize_url)

Aquí simplemente generamos la URL con el parámetro GET code junto al código de autenticación y nos redirigimos, Recuerden que la url donde nos estamos conectando es la misma que configuramos en la api, asi que realmente estamos redirigiendo a la misma url que acabamos de entrar.

La API de analytics nos obliga a generar una URL donde al entrar nos da un código un poco largo, éste código lo usa google para la autenticación, para evitar que cada vez que entremos en nuestra vista de django nos redirija a esa pagina de google y tener que copiar el código, lo que hacemos es validar si existe el parámetro code en la url, sino existe entonces lo generamos con el siguiente código:

1
2
flow = OAuth2WebServerFlow(ID, secret, scope, redirect)
authorize_url = flow.step1_get_authorize_url()

y luego hacemos la redirección con

1
return HttpResponseRedirect(authorize_url)

Como al configurar nuestra APi en la pagina de google especificamos que la url donde vamos a conectarnos a la api será la misma que donde estamos trabajando, lo que hará es redirigirnos a la misma pagina pero esta vez nos incluirá el parámetro GET code junto al código que necesitamos para la autenticación.

1
2
code = self.request.GET['code']
credentials = flow.step2_exchange(code)

Recuperamos nuestro código y lo enviamos al método step2_exchange
que nos dará las credenciales.

1
service = build('analytics''v3', http=http_r)

Aquí ya tendremos el objeto que usaremos para solicitar nuestras métricas.

1
2
3
4
5
id_analytics = 'ga:XXXXXXX'
entrada ='2014-09-01'
salida = '2014-09-30'
self.adwords = service.data().ga().get(ids=id_analytics, start_date=entrada,
end_date=salida, metrics='ga:adCost').execute()

Vale, llegado a este punto debemos especificarle a la api que vamos a solicitar, necesitamos el ID de nuestra propiedad.. Para obtener éste ID nos vamos a google analytics y si tenemos varias propiedades registradas seleccionamos una, cuando entremos en el panel, en la url al final hay algo como pXXXXXXXX (p y 8 dígitos), éste seria nuestro ID.
PD: El ID no es el mismo código que nos genera el script de analytics que introducimos en nuestra web para hacer seguimiento de los usuarios, son distintas.

Lo siguiente es el rango de fechas por la cual haremos la petición, en este caso pediremos todo el mes de Septiembre.

y por último le pasamos los parametros a service.data().ga().get( fíjense que el último parámetro es metrics=’ga:adCost’, esto es editable, aquí estamos pidiendo el Coste de adwords, pero podemos pedir visitas, clicks, impresiones, etc.. Al final del POST dejaré la lista de métricas a usar. También podemos solicitar varias en la misma petición, separadas por coma.

Una vez hecho todo esto, debemos obtener la variable que contiene el coste en el get_context_data y pasarla a nuestro template.

Paso 4: Configuración de la url.

Tenemos que editar el fichero urls.py y agregar la ruta de nuestra vista. Nos debe quedar algo parecido a esto.

1
url(r'^analitica.html$',Analytics.as_view(), name='analitica'),

y por último

Paso 5: Editar nuestro template.

inicio.html
Coste de adwords: {{coste}}

Ya con esto podremos ver el coste que tenemos hasta el momento, o cualquier métrica que hayamos solicitado.

Aqui está la lista de métricas a usar con adwords

https://developers.google.com/analytics/devguides/reporting/core/dimsmets#view=detail&group=adwords

y otra para analytics

https://developers.google.com/analytics/devguides/reporting/core/dimsmets#view=detail&group=analytics

Espero que les haya servido.

Saludos.



Alex Dzul

FullStack Python / Django Developer. #jslove

Etiquetas

Temas relacionados