gdata-python-api +具有简单身份验证的分析

时间:2011-05-05 19:46:11

标签: python api oauth

我正在尝试使用Google gdata API客户端+用户/通过身份验证将Python脚本转换为更适合生产的内容(API密钥)。我对他们关于身份验证的文档的混乱状态感到非常沮丧。我承认自己并没有很好地掌握OAuth2,但对于我的使用案例来说似乎更复杂一点,那就是:每24小时点击一次谷歌分析,就可以获得我们网站上最受欢迎的X文章。

在这种情况下,我们不会处理修改某人的个人数据,而且所有活动都集中在一个帐户上。对于这么简单的东西来说,OAuth2似乎不值得复杂。

我在Google API控制台(https://code.google.com/apis/console/)上看到,我在那里注册并注意到有一个“简单API访问”部分,其中一个键位于“ Web应用程序的客户端ID“(似乎是OAuth2)。还有Google域名更新页面https://www.google.com/accounts/UpdateDomain,但似乎与OAuth相关。

有没有办法使用这个简单的API访问密钥(不是OAuth)来检索Python gdata客户端的分析数据,如果是这样,有没有人有任何身份验证示例?一旦经过身份验证,我已经有了数据检索工作,但是我使用的是用户/传递方法,这不适合生产。

1 个答案:

答案 0 :(得分:12)

格雷格,

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

2011年9月的blog post详细介绍了一般机制,但为了完整起见,我将在此处对其进行描述。

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

第2部分:从项目中,转到“服务”并启用“Analytics 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 = token.generate_authorize_url(redirect_uri='urn:ietf:wg:oauth:2.0:oob')

由于您的应用程序是“已安装的应用程序”,因此您的重定向URI是默认的'urn:ietf:wg:oauth:2.0:oob'。 (另请注意,博客帖子有拼写错误并使用了关键字参数redirect_url。)

第6部分:访问网址并授权您的申请代表您的帐户提出请求。授权后,您将被重定向到包含代码的页面。此代码将用于交换访问令牌和长期刷新令牌。代码的生命周期为10分钟,访问令牌的生命周期为一小时。通过刷新令牌,您可以获得永久签名请求的新访问权限(或直到您revoke来自您帐户的权限)。

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

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

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

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

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 :此外,如果您丢失了刷新令牌并希望获得另一个令牌而无需转到浏览器revoke原件,则可以使用approval_prompt参数通过访问由以下内容生成的网址获取新的刷新令牌:

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