python-oauth2和Yahoo的Fantasy Sports API存在问题

Gru*_*uck 3 python oauth flask

我正在尝试构建一个从雅虎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")
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误响应:

{'status':'401','transfer-encoding':'chunked','connection':'close','date':'星期二,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我们的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'}

现在,我已经阅读了雅虎提供的文档,我很难过,因为(a)它似乎非常简单,(b)我无法弄清楚我哪里出错了.我正在使用雅虎提供给我的消费者密钥和共享秘密.

这是我第一次使用OAuth,非常感谢任何帮助.

Nav*_*vin 6

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

以下是一些解决方法:

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

parameters={'oauth_callback': 'http://example.com/callback/'}
Run Code Online (Sandbox Code Playgroud)

到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/'})
Run Code Online (Sandbox Code Playgroud)

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