我有一个简单的应用程序,它不使用很多软件包。所以我认为这是尝试Deno的绝佳机会,我确实需要的不是第三方模块的一个软件包是Twitter API。我以为没有问题,因为我不需要它包含的许多功能。我自己写吧!
所以我写了一个函数,用于使用Twitter文档中的此doc来生成Bearer令牌:
function getOAuthBearer(consumer_key, consumer_secret) {
const basic = Buffer.from(`${consumer_key}:${consumer_secret}`).toString('base64')
const options = {
url: 'https://api.twitter.com/oauth2/token',
method: 'POST',
headers: {
'Authorization': `Basic ${basic}`,
'Content-Type': `application/x-www-form-urlencoded;charset=UTF-8`
},
body: querystring.stringify({
'grant_type': 'client_credentials'
})
};
return new Promise((resolve, reject) => {
request(options, (error, response, body) => {
if (error) reject(error);
else resolve(JSON.parse(body).access_token);
});
});
}
哪个工作!我获得了承载令牌,因此编写了一个函数,可以从此user_timeline
]的请求示例中获取一些doc信息
function getUserTimeline(bearer_token) { const options = { url: 'https://api.twitter.com//1.1/statuses/user_timeline.json?count=100&screen_name=twitterapi', method: 'GET', headers: { 'Authorization': 'Bearer ' + Buffer.from(bearer_token).toString('base64'), } } return new Promise((resolve, reject) => { request(options, (error, response, body) => { if (error) reject(error); else resolve(JSON.parse(body)); }); }); }
哪个返回此:
{错误:[{代码:89,消息:'无效或过期的令牌。' }]}
这很奇怪,但我认为我可以使载体无效并请求为其编写此功能的新载体:
function invalideOAuthBearer(consumer_key, consumer_secret, bearer_token) { const basic = Buffer.from(`${consumer_key}:${consumer_secret}`).toString('base64'); const options = { url: 'https://api.twitter.com/oauth2/invalidate_token', method: 'POST', headers: { 'Authorization': `Basic ${basic}`, 'Content-Type': `application/x-www-form-urlencoded;charset=UTF-8` }, body: querystring.stringify({ 'access_token': bearer_token }) }; return new Promise((resolve, reject) => { request(options, (error, response, body) => { if (error) reject(error); else resolve(JSON.parse(body)); }); }); }
但是返回:
{错误:[{代码:348,消息:'不允许客户端应用程序使此令牌无效。' }]}
所以现在我有点卡住了,我尝试重新生成我的凭据,但这没什么用。我在网上搜索过,但只能找到老人们说这是一个错误/基础结构问题,但是由于使用Twitter API的应用程序太多,这在我看来似乎不太可能,当然,有些人建议使用[C0 ],但是我想说Deno平台没有这样的软件包:(
我有一个简单的应用程序,它不使用很多软件包。因此,我认为这是尝试Deno的绝佳机会,我需要的不是第三方模块的软件包是...
承载令牌不应该使用base64编码。试试这个: