使用Node.js和Twitter API发送推文
Twitter是一个社交媒体网站,截至2022年拥有4.5亿月活跃用户。这些用户通过推文来互动。推文可以包含文字、视频、GIF和图片。用户发布推文后,其他用户可以点赞、回复、转发、收藏,在回复中@其他用户等。
Twitter API是一个工具包,允许开发人员使用Twitter的数据和功能。它使他们能够构建可以读取和写入Twitter数据以及执行其他功能的程序。API有许多“终点”,开发人员可以使用它们来获取不同类型的Twitter数据。例如,他们可以获取推文、用户信息、热门话题等等。这些终点使用REST架构,使开发人员可以方便地与Twitter的服务器通信。总体而言,Twitter API是一个强大的工具,使开发人员能够访问各种Twitter数据和功能。
问题陈述: 使用Node.js和twitter-api-v2库创建并发布帖子(无图片/媒体和有图片/媒体)。
方法: 要创建和发布推文,您可以按照以下步骤进行操作:
- 创建Twitter开发人员账户并获取API凭据(创建开发人员账户的链接-https://developer.twitter.com/en)
- 创建一个新的Node项目并在shell中初始化npm,写入以下命令:
mkdir tweetPoster
cd tweetPoster
npm init
- 在shell中使用以下命令安装twitter-api-v2库。
npm install twitter-api-v2
- 在tweetPoster目录下创建一个index.js文件。
- 在index.js中导入twitter-api-v2库。
const { TwitterApi } = require("twitter-api-v2");
- 通过填写您的API密钥和密钥创建一个Twitter客户端,这将对您的帐户进行身份验证,并允许您使用Twitter API创建请求并获取响应。
const client = new TwitterApi({
appKey: "**",
appSecret: "**",
accessToken: "**",
accessSecret: "**",
bearerToken:"**",
});
- 为您的客户端提供读写控制,以便它可以创建新的推文
const rwClient = client.readWrite;
- (仅适用于文本推文)创建一个异步的textTweet函数,然后创建一个try-catch,在try块内部,使用rwClient.v2创建一个await tweet请求,然后在.tweet()内部,您可以将想要推文的任何文本以字符串格式放入,然后放入console.log(“ success”)。 因此,如果推文成功发布,成功将在终端打印出来。 现在,在catch块中添加console.log(error)。 因此,如果发生任何故障,错误将在终端打印出来。
const textTweet = async () => {
try {
await rwClient.v2.tweet(
"This tweet has been created using nodejs");
console.log("success");
} catch (error) {
console.error(error);
}
};
- (对于带媒体的文本推文)创建一个 mediaTweet 异步函数,然后创建一个 try-catch ,在try块内,创建一个 mediaId 常量,并创建 await uploadMedia + 请求(在“image_path”位置放置要发布的图像的路径)。+ uploadMedia 方法用于上传媒体文件, mediaId 变量将被分配Twitter分配给上传的媒体的唯一标识符。使用rwClient.v2创建等候tweet请求,你可以在.tweet()内放置一个JavaScript对象。
{
text: "any text you wish to post with image/media ",
media: { media_ids: [mediaId] },
}
- 然后加上console.log(“success”)。因此,在推文成功发布的情况下,成功将在终端中打印。现在,在catch块中添加console.log(error)。因此,如果出现任何失败,错误将在终端中打印。
const mediaTweet = async () => {
try {
const mediaId = await client.v1.uploadMedia("image_path");
await rwClient.v2.tweet({
text: "Twitter is a fantastic social network. Look at this:",
media: { media_ids: [mediaId] },
});
console.log("success");
} catch (e) {
console.error(e);
}
};
- 调用textTweet() 和 mediaTweet() 方法中的任意一个或者两个。
textTweet();
mediaTweet();
- 在终端中运行index.js。
node index.js
// Import twitter-api-v2
const { TwitterApi } = require("twitter-api-v2");
// Fill your API credentials
const client = new TwitterApi({
appKey: "**",
appSecret: "**",
accessToken: "**",
accessSecret: "**",
bearerToken: "**",
});
// Provide read write controls
const rwClient = client.readWrite;
// Create textTweet function which post
// a text only tweet
const tweetText = async () => {
try {
// Use .tweet() method and pass the
// text you want to post
await rwClient.v2.tweet(
"This tweet has been created using nodejs");
console.log("success");
} catch (error) {
console.log(error);
}
};
// Create tweet function which post
// tweet with media and text
const mediaTweet = async () => {
try {
// Create mediaID
const mediaId = await client.v1.uploadMedia(
// Put path of image you wish to post
"./1605232393098780672example.png"
);
// Use tweet() method and pass object with text
// in text feild and media items in media feild
await rwClient.v2.tweet({
text:
"Twitter is a fantastic social network. Look at this:",
media: { media_ids: [mediaId] },
});
console.log("success");
} catch (error) {
console.log(error);
}
};
// Call any of methods and you are done
textTweet();
mediaTweet();
输出:

推文示例:

极客教程