python - gdata-python-api + 带有简单例份验证的分析

标签 python api oauth

我正在使用 Google gdata API 客户端 + 用户/通过身份验证将 Python 脚本转换为更适合生产的东西(API key )。我对他们关于身份验证的文档的困惑状态感到非常沮丧。诚然,我对 OAuth2 没有很好的掌握,但对于我的使用案例来说,它似乎要复杂得多,即:每 24 小时点击一次 Google Analytics,以获取我们网站上 X 篇最受欢迎的文章。

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

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

有什么方法可以使用这个简单的 API 访问 key (不是 OAuth)通过 Python gdata 客户端检索分析数据,如果是这样,是否有人有任何身份验证示例?我已经让数据检索的东西在经过身份验证后工作,但我使用的是用户/通行证方法,这不适合生产。

最佳答案

格雷格,

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

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

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

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

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

第 4 部分 :从 API 控制台获取您的客户端 ID 和客户端 key ,然后创建一个空 token :

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 部分 : 使用token创建授权网址供您访问:
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 部分 :访问 url 并授权您的应用程序代表您的帐户发出请求。授权后,您将被重定向到一个带有代码的页面。此代码将用于交换访问 token 和长期刷新 token 。代码的生命周期为 10 分钟,访问 token 的生命周期为一小时。刷新 token 将允许您获得新的访问 token 以永久签署请求(或直到您revoke 获得您帐户的许可)。

第 7 部分 :使用代码获取访问 token :
code = 'random-string-from-redirected-page'
token.get_access_token(code)  # This returns the token, but also changes the state

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

第 8 部分 :使用 token ,您现在可以向分析客户端发出您想要发出的所有请求:
import gdata.analytics.client

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

这是这里的大笔钱。当访问 token 过期时,使用该 token 签名的 API 请求将被拒绝。但是,通过上述授权客户端,当所述请求失败时,token尝试使用刷新 token 获取新的访问 token 。如果它成功获取了新的访问 token ,则客户端会重新发送使用新访问 token 签名的原始 API 请求。

我对 Analytics API 一无所知,因此我不会在那里提供更多详细信息。

future 使用说明 1 :保存信息以备将来使用。您可以从不同的地方重新使用它,并且在使用之后很容易。有一些方法叫做 token_to_blobtoken_from_blob由库提供,允许将 token 转换为字符串并转换为字符串:
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)

future 使用说明 2 :只要您有刷新 token ,此 token 将能够用于授权客户端并一次又一次地执行所有魔术。如果由于某种原因您想再次获取访问 token 而不调用 token.generate_authorize_url ,您需要在对象上手动设置它:
token.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'

future 使用说明 3 : 另外,如果您丢失了刷新 token 并想获得另一个,而不必转到浏览器 revoke原来,可以用approval_prompt通过访问以下生成的 url 来获取新的刷新 token 的参数:
url = token.generate_authorize_url(
    redirect_uri='urn:ietf:wg:oauth:2.0:oob',
    approval_prompt='force')

关于python - gdata-python-api + 带有简单例份验证的分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5903278/

相关文章:

android - Android 应用程序中的 OAuth

security - 将 Google API 凭据存储在数据库中。安全吗?

Python 在运行时意外执行命令

python - 从排序列表创建字典

python - 使用 4 邻域进行骨架化

javascript - Google Map API setCenter 方法不起作用

rest - 在 OAuth 重定向 URL 中有访问 token 是不是很糟糕

python - 根据条件在 df 的新列中添加值

android - ruby on rails 中用于 Android 操作系统的 API

api - 从Twitter客户端读取响应返回错误