У меня есть простое приложение, которое не использует очень много пакетов. Так что я подумал, что это будет отличная возможность опробовать Deno, один пакет, который мне нужен, который не является сторонним модулем, - это API Twitter. Нет проблем, я думал, так как мне не нужно много функций, которые он включает. С таким же успехом я мог бы написать это сам!
Поэтому я написал функцию для генерации токена на предъявителя с помощью этого do c из документов Twitter:
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
информации из примера запроса из этого do c
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));
});
});
}
Но это возвращает:
{error: [{code: 348, сообщение: «Клиентскому приложению не разрешено аннулировать этот токен». }]}
Так что теперь я немного застрял, я попытался восстановить свои учетные данные, и это мало что дает. Я искал в Интернете, но смог найти только старые сообщения людей, в которых говорилось, что это ошибка / инфраструктура, но поскольку существует очень много приложений, использующих API Twitter, это кажется мне маловероятным, и, конечно, есть люди, которые просто рекомендуют использовать такой пакет, как * 1029. * twitter , но я бы сказал, что на платформе Deno нет таких пакетов: (