2012-10-18 50 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访问服务器,并运行硒自动化来打开我们得到的链接,完成认证流程...是可能的... –

相关问题