3

我正在尝试构建一个从雅虎 API 获取梦幻体育信息的网络应用程序。我知道它需要使用 OAuth 才能与 API 对话。它是使用 Flask 创建的,将在 Google App Engine 上运行。

我一直在尝试使用 SimpleGeo 的人员提供的 python-oauth2,并且在尝试进行开发工作时一直遇到同样的错误。这是一段代码:

import oauth2 as oauth

consumer = oauth.Consumer(key=settings.OAUTH_CONSUMER_KEY, secret=settings.OAUTH_SHARED_SECRET)
request_token_url = "https://api.login.yahoo.com/oauth/v2/get_request_token"
client = oauth.Client(consumer)

resp, content = client.request(request_token_url, "GET")

这是我得到的错误响应:

{'status': '401', 'transfer-encoding': 'chunked', 'connection': 'close', 'date': 'Tue, 2010 年 10 月 26 日 18:24:16 GMT', 'p3p': ' policyref="http://info.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV"', 'content-type': 'application/x-www-form-urlencoded', 'www-authenticate': 'OAuth oauth_problem=consumer_key_rejected'}

现在,我已经阅读了可通过 Yahoo 获得的文档,我感到很困惑,因为 (a) 它看起来很简单,并且 (b) 我不知道我哪里出错了。我正在使用雅虎提供给我的消费者密钥和共享密钥。

这是我第一次使用 OAuth,任何帮助都将不胜感激。

4

2 回答 2

6

正如 kanaka 所指出的,雅虎的 get_access_token 调用需要 oauth_callback,而 simplegeo/oauth2 不允许您轻松指定它。

以下是一些解决方法:

取而代之的是 simplegeo/python-oauth2,使用 zbowling/python-oauth2(它是 simplegeo 的一个分支,但有一些不错的新代码和错误修复),然后添加一个额外的参数:

parameters={'oauth_callback': 'http://example.com/callback/'}

到 Client.request 调用。像这样:

client = Client(consumer)
client.request('https://api.login.yahoo.com/oauth/v2/get_request_token',
               method='GET',
               parameters={'oauth_callback': 'http://example.com/callback/'})

如果您坚持使用 simplegeo/python-oauth2,请查看有关 simplegeo/oauth2 和 yahoo oauth 问题的详细讨论,请访问此页面。它有一些您可以使用的代码片段。

于 2010-12-17T06:26:25.853 回答
2

我刚刚尝试使用 python-oauth2(simplegeo)并遇到了同样的问题。

simplegeo 实现的一个问题是 oauth_callback 很容易在请求令牌请求中提供,因此需要:http: //developer.yahoo.com/oauth/guide/oauth-requesttoken.html

但即使我强迫它'oob'我仍然有问题。

您可以尝试 yahoo 自己的 python 库,看看是否有帮助(然后在这里发回您发现的内容):http: //github.com/yahoo/yos-social-python。我从这里发现:http: //developer.yahoo.com/social/sdk/

于 2010-10-30T20:06:34.600 回答