javascript - 使用异步 node.js 进行 Twitter API 光标导航
问题描述
我正在尝试使用 async/await 将 Twitter 的 API 与 node.js 一起使用(我承认我是新手),但我正在努力获得下一个光标值。
为什么我的getFollowers
下面的函数总是在await
块之前返回?
require('dotenv').config();
const Twitter = require('twitter');
const client = new Twitter({
consumer_key: process.env.API_KEY,
consumer_secret: process.env.API_KEY_SECRET,
access_token_key: process.env.ACCESS_TOKEN,
access_token_secret: process.env.ACCESS_TOKEN_SECRET
});
const getFollowers = async (screen_name, count, cursor) => {
console.log("Cursor: " + cursor);
const params = {
screen_name: screen_name,
count: count,
cursor: cursor
};
const promise = await client.get('followers/list', params)
.then(data => {
console.log("This promise is never executed...");
return data.next_cursor;
})
.catch(err => console.error(err));
return promise;
}
const main = async () => {
let cursor = -1;
while (cursor != 0) {
getFollowers(process.env.SCREEN_NAME, 200, cursor)
.then(next_cursor => {
cursor = next_cursor;
console.log("This promise is never executed either... " + cursor);
});
}
}
main();
解决方案
我放弃了使用Twitter
包的实现,转而使用axios
。
require('dotenv').config();
const axios = require('axios');
const credentials = {
consumer_key: process.env.API_KEY,
consumer_secret: process.env.API_KEY_SECRET,
access_token_key: process.env.ACCESS_TOKEN,
access_token_secret: process.env.ACCESS_TOKEN_SECRET
};
const FOLLOWERS_LIST_ENDPOINT = "https://api.twitter.com/1.1/followers/list.json";
//documentation: https://developer.twitter.com/en/docs/authentication/oauth-2-0/application-only
const generateToken = async () => {
return process.env.BEARER_TOKEN;
}
//documentation: https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-followers-list
const getFollowers = async (screen_name, count, cursor) => {
let token = await generateToken();
let requestConfig = {
params: {
screen_name: screen_name,
count: count,
cursor: cursor,
include_user_entities: false
},
headers: {
Authorization: `Bearer ${token}`
}
};
let response = await axios.get(FOLLOWERS_LIST_ENDPOINT, requestConfig);
let users = response.data.users;
processUsers(users);
return response.data.next_cursor;
};
const processUsers = (users) => {
users.map(user => {
console.log(user.screen_name);
});
}
const main = async () => {
let cursor = -1;
while (cursor != 0) {
cursor = await getFollowers(process.env.SCREEN_NAME, 200, cursor);
}
}
main();
推荐阅读
- php - Http 到 https 错误“ERR_TOO_MANY_REDIRECTS”
- python - 如何迭代 cython(或 numba)中的列表列表?
- html - How to make a text disapper under an image, after scrolling it up?
- node.js - sequelize-cli 在哪里保存种子列表?
- linux - Postgresql - 显示 INTEGER、BIGINT 的用法
- microsoft-graph-toolkit - c#和js之间的登录组合 Msal-provider
- pandas - 基于特定条件的 Pandas 中的 Groupby 累积总和
- java - 使用带有 Node.js 的 aws-secretsmanager-jdbc 连接到 RDS?
- javascript - JS 中的范围导出
- firebase - 我如何将googleapis与flutter firebase一起使用