gdatapythonapi+简单身份验证分析

2024-09-27 21:33:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正致力于将使用googlegdataapi客户机+用户/通行证身份验证的Python脚本转换为更适合生产的东西(API密钥)。我对他们的身份验证文档的混乱状态感到非常沮丧。诚然,我对OAuth2并没有很好的理解,但对于我的使用情况来说,它似乎要复杂得多,即:每24小时点击一次Google Analytics,以获得我们网站上最受欢迎的X篇文章。在

在这种情况下,我们处理的不是修改某人的个人数据,所有活动都集中在一个帐户上。对于如此简单的事情,OAuth2似乎不值得复杂化。在

我在googleapi控制台上看到了(https://code.google.com/api/console/),我在那里注册并注意到在“web应用程序的客户机ID”下面有一个键的“简单API访问”部分(看起来是OAuth2)。还有Google域更新页面https://www.google.com/accounts/UpdateDomain,但这似乎与OAuth有关。在

有没有任何方法可以使用这个简单的API访问密钥(而不是OAuth)来检索pythongdata客户机的分析数据,如果有,有人有任何身份验证示例吗?我已经让数据检索工具在经过身份验证后就可以工作了,但是我使用的是user/pass方法,这不适合生产。在


Tags: 数据方法httpscom身份验证api客户机google
1条回答
网友
1楼 · 发布于 2024-09-27 21:33:56

格雷格

如果您已经在使用库gdata-python-client,那么如果您是应用程序将要授权的唯一用户,则这相对比较容易。在

2011年9月的a blog post中详细介绍了一般机制,但为了完整起见,我将在这里描述它们。在

第1部分:转到APIs console并开始一个新项目。在

第2部分:在项目中,转到“服务”并启用“分析API”

第3部分:在项目中,转到“API访问”,然后单击“创建OAuth 2.0客户机ID…”(您需要提供产品名称,但您提供的值无关紧要)。当要求输入应用程序类型时,选择“已安装的应用程序”,然后选择“创建客户端ID”。由于您将是唯一的用户,因此您只需要一个刷新令牌,并且您可以通过从桌面应用程序一次授权来获得此令牌。在

第4部分:从API控制台获取客户端id和客户端机密,然后创建一个空令牌:

import gdata.gauth

CLIENT_ID = 'id-from-apis-console'
CLIENT_SECRET = 'secret-from-apis-console'
SCOPE = 'https://www.google.com/analytics/feeds/'  # Default scope for analytics

token = gdata.gauth.OAuth2Token(
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET, 
    scope=SCOPE,
    user_agent='application-name-goes-here')

我从GData FAQ得到了范围,但我不确定它是否正确。在

第5部分:使用令牌创建授权URL供您访问:

^{2}$

由于您的应用程序是“已安装的应用程序”,所以您的重定向URI是默认的'urn:ietf:wg:oauth:2.0:oob'。(另请注意,这篇博文有一个错误,并使用了关键字参数redirect_url。)

第6部分:访问url并授权您的应用程序代表您的帐户提出请求。授权后,您将被重定向到带有代码的页面。此代码将用于交换访问令牌和长期刷新令牌。代码的生命周期为10分钟,访问令牌的生命周期为1小时。刷新令牌将允许您获取新的访问令牌,以永久性地对请求进行签名(或直到您从您的帐户获得revoke权限)。在

第7部分:使用代码获取访问令牌:

code = 'random-string-from-redirected-page'
token.get_access_token(code)  # This returns the token, but also changes the state

这也与博客文章略有不同,因为我们使用的是已安装的应用程序。在

第8部分:使用令牌,您现在可以向analytics客户端发出您想要的所有请求:

import gdata.analytics.client

client = gdata.analytics.client.AnalyticsClient()
token.authorize(client)

这是一大笔钱。当访问令牌过期时,使用该令牌签名的API请求将被拒绝。然而,通过如上所述授权客户端,当所述请求失败时,token尝试使用刷新令牌来获得新的访问令牌。如果它成功地获得了一个新的访问令牌,客户端将重新发送原始的API请求,并用新的访问令牌进行了签名。在

我对Analytics API一无所知,所以我不会提供更多细节。在

未来使用说明1:保存信息以备将来使用。你可以在不同的地方重复使用,使用后非常容易。库提供了名为token_to_blobtoken_from_blob的方法,这些方法允许将令牌转换为字符串并从字符串中转换:

saved_blob_string = gdata.gauth.token_to_blob(token)

完成此操作后,可以将字符串存储在文件中,并终止正在运行的Python进程。当您想再次使用它时:

saved_blob_string = retrieve_string_from_file()  # You'll need to implement this
token = gdata.gauth.token_from_blob(saved_blob_string)

未来使用注意事项2:只要您有刷新令牌,此令牌将能够用于授权客户端并反复执行所有魔术。如果出于某种原因,您希望在不调用token.generate_authorize_url的情况下再次获取访问令牌,则需要在对象上手动设置:

token.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'

未来使用注意事项3:另外,如果您丢失了刷新令牌,并且希望在不必进入浏览器的情况下获得另一个刷新令牌,那么您可以使用approval_prompt参数通过访问以下内容生成的url来获取新的刷新令牌:

url = token.generate_authorize_url(
    redirect_uri='urn:ietf:wg:oauth:2.0:oob',
    approval_prompt='force')

相关问题 更多 >

    热门问题