12

我想使用 Python 查询 Google Analytics API 以定期从我的 Analytics 帐户下载数据并将数据存储在本地数据库中。我基本上遵循基本教程中给出的步骤。在此过程中,我正在使用适用于 Python 的 Google 客户端 API 库。

到目前为止,当我在本地开发机器(Mac)上运行它时,我的脚本运行良好。当我启动脚本时,我的浏览器会打开,并提示我授予从应用程序访问我的 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工作?我还有另一种方法可以在同一台机器上没有本地浏览器的情况下进行身份验证吗?

4

4 回答 4

7

当您使用 时FLAGS = gflags.FLAGS,您实际上需要将命令行参数传递给FLAGS(这也可能会或可能不会让我绊倒:))。有关如何执行此操作的以分析为中心的示例,请参见此处(下面的代码,因为链接往往会在一段时间后消失)。一般的想法是将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))

此外,事实证明我们并不孤单!您可以跟踪此错误以查看何时添加文档。

于 2012-10-18T14:00:00.330 回答
1

您还可以将 GA 用作服务 API:https ://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-py 这工作得很好。只需记住使用 openssl $openssl pkcs12 -in client_secrets.p12 -nodes -nocerts > client_secrets.pem 将 p12 转换为未加密的 PEM 文件,当您从谷歌开发人员控制台下载 P12 时,会打印出导入密码

于 2015-06-19T18:31:17.237 回答
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 ) 时,我复制并粘贴到我机器上的浏览器中以完成身份验证流程。

于 2016-04-18T07:20:35.833 回答
0

我在我的 PC 上运行它,得到一个 token.json,然后将令牌复制到服务器上的主文件夹中(想想脚本的工作目录),它就解决了。如果您使用相同的令牌,则无需身份验证

于 2021-09-21T13:40:18.440 回答