2012-10-18 45 views
10

我想要使用Python查詢Google Analytics API,以定期從我的Analytics帳戶下載數據並將數據存儲在本地數據庫中。我基本上遵循basic tutorial中給出的步驟。我在這個過程中使用Google client API library for Python在Python中沒有本地瀏覽器的Google AnalyticsAPI訪問

到目前爲止,我的腳本在我的本地開發機器(Mac)上運行時運行良好。當我啓動該腳本時,我的瀏覽器打開,系統提示我授予從應用程序訪問我的Google Analytics數據的權限。之後,我可以根據需要經常運行我的腳本並訪問我的數據。

在我的服務器上(Ubuntu,只有終端可用),w3m瀏覽器打開,但我無法從那裏訪問我的Google帳戶。我只能退出w3m並用Ctrl-C殺死程序。有這樣的錯誤消息:

您的瀏覽器已經打開訪問:

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

如果你的瀏覽器是在不同的機器上,然後退出並重新運行該 應用與命令直插參數

--noauth_local_webserver

豪當我使用參數--noauth_local_webserver運行我的腳本時,我得到了相同的結果 - w3m打開,我無法進行身份驗證。

我怎樣才能讓--noauth_local_webserver工作?我有另一種方法來驗證沒有本地瀏覽器在同一臺機器上?

+0

我有類似的問題,但我需要自動化身份驗證過程(我不想每次都「接受」API)。 有什麼辦法通過python客戶端發送登錄/密碼,或者我必須破解示例代碼並通過PhantomJS來完成嗎? – aviggiano

+0

幻影js不是一個壞主意!我也不想每次都接受API,它會讓我失去自動化。這看起來很有希望: https://www.npmjs.com/package/headless-google-auth – grasshopper

回答

7

當您使用FLAGS = gflags.FLAGS時,您實際上需要將命令行參數傳遞給FLAGS(這可能會也可能不會讓我失望:))。有關如何執行此操作的以分析爲中心的示例,請參閱here(代碼如下,因爲鏈接往往會在一段時間後消失)。一般的想法是,argv參數被傳遞到FLAGS變量,然後變得可用於其他模塊。

# 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)) 

此外,事實證明,我們並不孤單!您可以跟蹤this bug以查看何時會添加文檔。

+0

謝謝,正是我期待的! – j0nes

+0

@ j0nes真棒,快樂它幫助! – RocketDonkey

+0

嘿,我也面臨同樣的問題,我正在使用Google Sheets API,我沒有得到您的解決方案,在哪裏放這個函數,如何調用它。我從這裏瀏覽了run_flow的文檔,https://developers.google.com/api-client-library/python/guide/aaa_oauth#commandline,我正確地使用了它。請幫我理解你的解決方案。 –

0

我遇到了同樣的問題,並設法通過SSH連接到我的服務器來解決它。例如:

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

然後我通過SSH運行我的腳本。當我收到URL(https://accounts.google.com/o/oauth2/auth?scope=some_long_url&access_type=offline)時,我複製並粘貼到我的計算機上的瀏覽器中以完成身份驗證流程。

+0

你能解釋更多...我有同樣的問題,我必須把它放在亞馬遜Lambda作爲微服務,所以沒有GUI,我想通過SSH訪問服務器,並運行硒自動化來打開我們得到的鏈接,完成認證流程...是可能的... –

相關問題