2012-10-18 4 views
10

Voglio interrogare l'API di Google Analytics utilizzando Python per scaricare periodicamente i dati dal mio account Analytics e archiviare i dati in un database locale. In pratica sto seguendo i passaggi indicati nello basic tutorial. Sto usando il Google client API library for Python in questo processo.Accesso API di Google Analytics senza browser locale in python

Il mio script funziona bene finora quando lo sto eseguendo sulla mia macchina di sviluppo locale (Mac). Quando avvio lo script, il mio browser si apre e mi viene richiesto di concedere l'accesso ai miei dati di Analytics dall'app. Successivamente posso eseguire il mio script tutte le volte che voglio e ottenere l'accesso ai miei dati.

Sul mio server (Ubuntu, solo terminale disponibile), si apre il browser w3m, ma non riesco ad accedere al mio account Google da lì. Posso solo uscire da w3m e uccidere il programma con Ctrl-C. C'è un messaggio di errore del tipo:

Il tuo browser è stato aperto da visitare:

https://accounts.google.com/o/oauth2/auth?scope=some_long_url&access_type=offline

Se il browser è su una macchina differente quindi uscire e ri-eseguire questo applicazione con il comando parametro -line

--noauth_local_webserver

Howe quando eseguo il mio script con il parametro --noauth_local_webserver, ottengo gli stessi risultati: w3m si apre e non riesco ad autenticarmi.

Come posso far funzionare il --noauth_local_webserver? C'è un altro modo per autenticarsi senza un browser locale sulla stessa macchina?

+0

Ho un problema simile, ma ho bisogno di automatizzare il processo di autenticazione (non voglio "accettare" l'API ogni volta). C'è un modo per inviare login/password tramite il client python o devo hackerare i codici di esempio e farlo tramite PhantomJS? – aviggiano

+0

phantom js non è una cattiva idea! Inoltre non voglio accettare l'API ogni volta, rovina l'automazione per me. Questo sembra promettente: https://www.npmjs.com/package/headless-google-auth – grasshopper

risposta

7

Quando si utilizza FLAGS = gflags.FLAGS, in realtà è necessario passare gli argomenti della riga di comando a FLAGS (questo potrebbe non averlo attivato anche :)). Vedi here per un esempio centrato su Analytics di come farlo (di seguito il codice in quanto i link tendono a scomparire dopo un po '). L'idea generale è che gli argomenti argv siano passati alla variabile FLAGS, che quindi diventa disponibile per altri moduli.

# From samples/analytics/sample_utils.py in the google-api-python-client source 

def process_flags(argv): 
    """Uses the command-line flags to set the logging level. 

    Args: 
    argv: List of command line arguments passed to the python script. 
    """ 

    # Let the gflags module process the command-line arguments. 
    try: 
    argv = FLAGS(argv) 
    except gflags.FlagsError, e: 
    print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS) 
    sys.exit(1) 

    # Set the logging according to the command-line flag. 
    logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) 

Inoltre, risulta che non siamo soli! È possibile tenere traccia di this bug per vedere quando verrà aggiunta la documentazione.

+0

Grazie, esattamente quello che stavo cercando! – j0nes

+0

@ j0nes Fantastico, felice che abbia aiutato! – RocketDonkey

+0

Ehi, anch'io sto affrontando lo stesso problema, sto usando l'API di Google Sheets, non ho trovato la soluzione, dove mettere questa funzione, come chiamarla. Ho esaminato la documentazione di run_flow da qui, https://developers.google.com/api-client-library/python/guide/aaa_oauth#commandline e la sto utilizzando correttamente. Per favore aiutami a capire la tua soluzione. –

0

Ho incontrato lo stesso problema e sono riuscito a risolverlo tramite SSHing sul mio server. Esempio:

ssh -L 8080:127.0.0.1:8080 <server-name> 

Ho quindi eseguito il mio script tramite SSH. Quando mi è stato presentato l'URL (https://accounts.google.com/o/oauth2/auth?scope=some_long_url&access_type=offline), ho copiato e incollato nel browser sulla mia macchina per completare il flusso di autenticazione.

+0

Puoi spiegare di più ... Ho lo stesso problema, devo metterlo in Amazon Lambda come servizio micro, quindi non c'è GUI, sto pensando di accedere a un server tramite SSH ed eseguire un'automazione selenio per aprire il link che otteniamo, completa il flusso di autenticazione ... è possibile ... –