Google Analytics e Python
-
06-07-2019 - |
Domanda
Sono nuovo di zecca in Python e sto cercando di scrivere un'estensione per un'app che importa informazioni GA e le analizza in MySQL. C'è una quantità sparsa di informazioni sull'argomento. Google Docs sembra avere solo esempi in JS e Java ...
... Sono arrivato al punto in cui il mio utente può autenticarsi in GA usando SubAuth. Quel codice è qui:
import gdata.service
import gdata.analytics
from django import http
from django import shortcuts
from django.shortcuts import render_to_response
def authorize(request):
next = 'http://localhost:8000/authconfirm'
scope = 'https://www.google.com/analytics/feeds'
secure = False # set secure=True to request secure AuthSub tokens
session = False
auth_sub_url = gdata.service.GenerateAuthSubRequestUrl(next, scope, secure=secure, session=session)
return http.HttpResponseRedirect(auth_sub_url)
Quindi, il passo successivo è ottenere i dati. Ho trovato questa libreria: (attenzione, l'interfaccia utente è offensiva) http://gdata-python-client.googlecode.com/svn/trunk/pydocs/gdata.analytics.html Tuttavia, ho trovato difficoltà a navigare. Sembra che dovrei essere gdata.analytics.AnalyticsDataEntry.getDataEntry (), ma non sono sicuro di cosa mi stia chiedendo di passarlo.
Mi piacerebbe una spinta nella giusta direzione. Sento di aver esaurito Google cercando un esempio funzionante.
Grazie !!
EDIT: sono andato più lontano, ma il mio problema non è ancora risolto. Il metodo seguente restituisce i dati (credo) .... l'errore che ottengo è: " l'oggetto 'str' non ha alcun attributo '_BecomeChildElement' " Credo di restituire un feed? Tuttavia, non so come approfondirlo. C'è un modo per me di ispezionare questo oggetto?
def auth_confirm(request):
gdata_service = gdata.service.GDataService('iSample_acctSample_v1.0')
feedUri='https://www.google.com/analytics/feeds/accounts/default?max-results=50'
# request feed
feed = gdata.analytics.AnalyticsDataFeed(feedUri)
print str(feed)
Soluzione
Forse questo post può dare una mano. Sembra che non ci siano ancora collegamenti specifici di Analytics, quindi stai lavorando con il gdata generico.
Altri suggerimenti
Uso GA da poco più di un anno ormai e da circa aprile 2009 ho usato i binding python forniti in un pacchetto chiamato python-googleanalytics di Clint Ecker et al. Finora funziona abbastanza bene.
Ecco dove trovarlo: http://github.com/clintecker/python-googleanalytics.
Installalo nel solito modo.
Per usarlo: in primo luogo, in modo da non dover passare manualmente le credenziali di accesso ogni volta che accedi all'API, inseriscile in un file di configurazione in questo modo:
[Credentials]
google_account_email = youraccount@gmail.com
google_account_password = yourpassword
Dai un nome a questo file '.pythongoogleanalytics' e mettilo nella tua home directory.
E da un prompt interattivo digitare:
from googleanalytics import Connection
import datetime
connection = Connection() # pass in id & pw as strings **if** not in config file
account = connection.get_account(<*your GA profile ID goes here*>)
start_date = datetime.date(2009, 12, 01)
end_data = datetime.date(2009, 12, 13)
# account object does the work, specify what data you want w/
# 'metrics' & 'dimensions'; see 'USAGE.md' file for examples
account.get_data(start_date=start_date, end_date=end_date, metrics=['visits'])
Il metodo "get_account" restituirà un elenco di Python (in questo caso, associato alla variabile "account"), che contiene i tuoi dati.
Nell'app sono necessari 3 file. client_secrets.json, analytics.dat e google_auth.py.
Crea un modulo Query.py all'interno dell'app:
class Query(object):
def __init__(self, startdate, enddate, filter, metrics):
self.startdate = startdate.strftime('%Y-%m-%d')
self.enddate = enddate.strftime('%Y-%m-%d')
self.filter = "ga:medium=" + filter
self.metrics = metrics
Esempio models.py: # ha la seguente funzione
import google_auth
service = googleauth.initialize_service()
def total_visit(self):
object = AnalyticsData.objects.get(utm_source=self.utm_source)
trial = Query(object.date.startdate, object.date.enddate, object.utm_source, ga:sessions")
result = service.data().ga().get(ids = 'ga:<your-profile-id>', start_date = trial.startdate, end_date = trial.enddate, filters= trial.filter, metrics = trial.metrics).execute()
total_visit = result.get('rows')
<yr save command, ColumnName.object.create(data=total_visit) goes here>