Joh*_*ell 24 python google-analytics google-analytics-api oauth2client google-api-python-client
这可能需要一秒钟来解释所以请耐心等待:
我正在开展一个工作项目,要求我提供谷歌分析数据.我最初是在这个链接之后做的,所以在安装了API客户端pip install --upgrade google-api-python-client
并设置了类似的东西后client_secrets.json
,它需要安装gflags才能执行run()
语句.(即credentials = run(FLOW, storage)
)
现在,我收到错误消息安装gflags或更好地使用run_flow()
(确切的错误消息是这样):
NotImplementedError:必须安装gflags库才能使用tools.run().请安装gflags或最好切换到使用tools.run_flow().
我最初使用gflags(几个月前),但它与我们的框架(金字塔)不兼容,所以我们将其删除,直到我们弄清楚问题是什么.之所以最好从gflags切换到run_flow()
因为gflags已被弃用,所以我不想像我一样使用它.我现在要做的就是切换到使用run_flow()
这个问题是run_flow()
需要将命令行参数发送给它,而这不是命令行应用程序.我找到了一些有用的文档,但我仍然坚持为run_flow()
函数构建标志.
在展示代码之前还有一件事需要解释.
run_flow()
有三个参数(文档在这里).它就像流程和存储一样run()
,但它也需要一个标志对象.gflags库构建了一个ArgumentParser
在oauth2client
执行方法中使用的标志对象.
一些有助于构建argumentParser
对象的其他链接:
第二个链接非常有助于了解它是如何执行的,所以现在当我尝试做类似的事情时,sys.argv
拉入我运行aka的虚拟环境的位置pserve
并拉入我的.ini
文件(它将我的机器的凭据存储到运行虚拟环境).但这引发了一个错误,因为它期待别的东西,这就是我被困住的地方.
run_flow()
flags = parser.parse_args(argv[1:])
检索正确的信息(我不知道应该是什么样的正确信息)码:
CLIENT_SECRETS = client_file.uri
MISSING_CLIENT_SECRETS_MESSAGE = '%s is missing' % CLIENT_SECRETS
FLOW = flow_from_clientsecrets(
CLIENT_SECRETS,
scope='https://www.googleapis.com/auth/analytics.readonly',
message=MISSING_CLIENT_SECRETS_MESSAGE
)
TOKEN_FILE_NAME = 'analytics.dat'
def prepare_credentials(self, argv):
storage = Storage(self.TOKEN_FILE_NAME)
credentials = storage.get()
if credentials is None or credentials.invalid:
parser = argparse.ArgumentParser(description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter,
parents=[tools.argparser])
flags = parser.parse_args(argv[1:]) # i could also do just argv, both error
credentials = run_flow(self.FLOW, storage, flags)
return credentials
def initialize_service(self, argv):
http = httplib2.Http()
credentials = self.prepare_credentials(self, argv)
http = credentials.authorize(http)
return build('analytics', 'v3', http=http)
Run Code Online (Sandbox Code Playgroud)
我所说的主要功能通过sys.argv
调用initialize_service
def main(self, argv):
service = self.initialize_service(self, argv)
try:
#do a query and stuff here
Run Code Online (Sandbox Code Playgroud)
我知道这不会起作用,因为我的应用程序不是命令行应用程序,而是一个完整的集成服务,但我认为它值得一试.有关如何正确构建标志对象的任何想法?
Joh*_*Mee 16
from oauth2client import tools
flags = tools.argparser.parse_args(args=[])
credentials = tools.run_flow(flow, storage, flags)
Run Code Online (Sandbox Code Playgroud)
采取了一些措施,但爬出了两个陷阱,它让我陷入:
归档时间: |
|
查看次数: |
4225 次 |
最近记录: |