我已经设置了一个应用程序,并从“应用程序设置”页面(https://apps.twitter.com/app/APP_ID/keys)获取了使用者密钥和密钥。该应用具有“读写”权限。
我还在此页面上为我的用户帐户生成了访问令牌和密码,但我已经完成了Oauth流程的步骤,授权了应用程序并通过该路由检索了相同的令牌和秘密。
如果我使用这些凭据从搜索API请求(即https://api.twitter.com/1.1/search/tweets.json),那么我会得到一个成功的回复。但是,当从用户时间线端点执行相同操作时,尽管授权应用程序,但我得到HTTP401响应,说“未授权”。
这是我正在做的一个例子:
import request from 'request-promise';
const twitterOauthConfig = {
consumer_key: process.env.TWITTER_CONSUMER_KEY,
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
access_token_key: 'MY USER TOKEN KEY',
access_token_secret: 'MY USER TOKEN SECRET'
};
const getRequestOptions = (user, tag) => {
return {
uri: 'https://api.twitter.com/1.1/statuses/user_timeline.json',
qs: {
q: `user_id=${user}&screen_name=${user}&tag=${tag}`
},
headers: {
Accept: '*/*',
Connection: 'close'
},
json: true,
oauth: twitterOauthConfig
};
}
const options = getRequestOptions('example_screen_name', 'example_hash_tag');
request(options)
.then((response) => {
// ...
});
有谁知道我为什么会收到这个错误?
答案 0 :(得分:0)
我现在已经解决了这个问题,TL; DR:我需要检查我的应用程序和用户在Application Management panel中匹配的访问级别,并重新生成我的访问令牌/秘密。
我收到HTTP401回复,说“未经授权。”
通过将此与API docs around Error Codes & Responses进行比较,我发现这必须是“缺少或不正确的身份验证凭据”。
我仔细检查了我的应用程序的应用程序管理面板,检查我是否正确复制了密钥/令牌/秘密,但也查看是否存在其他差异。
我注意到我的应用程序访问级别设置为“读取和写入”,但我的用户访问令牌访问级别仅设置为“读取”。
通过在该页面上重新生成Access令牌和密码,我能够成功检索用户时间线。
这对我来说并没有太大的意义 - 鉴于两者都具有'读'访问级别,我不确定为什么他们需要完全匹配,但它已经修复了问题