我正在尝试构建一个从雅虎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,26 Oct 2010 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,非常感谢任何帮助。
答案 0 :(得分:6)
正如kanaka指出的那样,yahoo的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,请在this page查看有关simplegeo / oauth2和yahoo oauth问题的详细讨论。它有一些你可以使用的代码片段。
答案 1 :(得分:2)
我刚尝试使用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/