我正在尝试构建一个网络应用程序,从雅虎的 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")

这是我收到的错误响应:

{'地位':'401','传输编码':“分块”、“连接”:“结束”、“日期”:'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"', '内容类型':'application/x-www-form-urlencoded', 'www-authenticate':'OAuth oauth_problem=consumer_key_rejected'}

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

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

有帮助吗?

解决方案

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

以下是一些解决方法:

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

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 问题的详细讨论,位于 这一页. 。它有一些您可以使用的代码片段。

其他提示

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

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

但即使我强迫它“oob”,我仍然遇到问题。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top