我正在使用 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_blob
和 token_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/