很抱歉,如果这是一个noob问题,但我试图测试并开始使用带有Vimeo API的RAuth python库。
我正在使用应用页面上提供的访问令牌/密码,用于我在开发人员网站上向Vimeo注册的应用。所以我想问题的第一部分是:是否是有效的访问令牌/秘密,或者我是否需要实际通过OAuth流程,尽管我正在尝试使用此API访问我公司的帐户?
假设这是一个有效的令牌,那么问题就在于,给定了这个实现:
from rauth.session import OAuth1Session
session = OAuth1Session(
consumer_key=VIMEO_CLIENTID,
consumer_secret=VIMEO_CLIENTSECRET,
access_token=VIMEO_ACCESSTOKEN,
access_token_secret=VIMEO_ACCESSTOKENSECRET )
response = session.get(VIMEO_URL_BASE + 'vimeo.oauth.checkAccessToken')
我收到以下内容作为回复:
{"response": {"err": {"expl": "The oauth_signature passed was not valid.", "code": "401", "msg": "Invalid signature"}, "stat": "fail", "generated_in": "0.0041"}
基于看起来像这样的OAuth标头(注意,我只是从会话对象中提取出来的,因此密钥不是内部使用的密钥,而是由Rauth库定义的密钥):
{
"signature": "DH9ueZmrnguFgBIDZs7ZQPE7qHs=",
"nonce": "8bcbc130548c0677cd134e7d7f22b17df7a2eee6",
"timestamp": 1380266167,
"oauth_version": "1.0",
"token": VIMEO_ACCESSTOKENSECRET,
"consumer_key": VIMEO_CLIENTID,
"sig_method": "HMAC-SHA1"
}
我读过一些关于时钟关闭的帖子。我的开发工作站正在检查time.windows.com,虽然我确实用time-a.nist.gov将其切换出来以防万一。我也关闭了同步并手动移动了我的时钟几秒钟。这些都没有影响。我还尝试在我的时钟上检查developer.vimeo.com网站的游乐场示例中的时间戳,它们最多只能在1-2秒内完成。
我认为虽然假设第一个问题的答案是正确的,但是根据我在RAuth代码中读到的内容,如果我有一个有效的身份验证令牌和秘密,我应该能够使用那些无需经历整个OAuth流程,因为无论如何都只会产生新的令牌/秘密。
同样,我是OAuth的新手,而且我对Python比较陌生,所以我可能会做一些愚蠢的事情。
答案 0 :(得分:2)
这里的问题是您尝试获取整个网址,并且不允许Rauth通过请求的API对参数进行签名。这不起作用,因为Rauth需要能够查看参数并以特定方式签名。相反,你应该这样做:
print sess.get('http://vimeo.com/api/rest/v2', params={'method': 'vimeo.oauth.checkAccessToken'}).content
<?xml version="1.0" encoding="UTF-8"?>\n<rsp generated_in="0.0044" stat="ok">\n <oauth>\n <token>...</token>\n <permission>delete</permission>\n <user display_name="Max Countryman" id="16760357" username="user16760357"/>\n </oauth>\n</rsp>\n'
请记住,Rauth是请求,但添加了方便的OAuth处理。这意味着你应该使用Rauth,就像它是请求一样。
以下内容应该有效(我亲自使用我的Vimeo凭据进行测试,似乎按预期工作):
from rauth.session import OAuth1Session
session = OAuth1Session(consumer_key=VIMEO_CLIENTID,
consumer_secret=VIMEO_CLIENTSECRET,
access_token=VIMEO_ACCESSTOKEN,
access_token_secret=VIMEO_ACCESSTOKENSECRET)
response = session.get('http://vimeo.com/api/rest/v2', params={'method': 'vimeo.oauth.checkAccessToken'})
希望有所帮助!