使用 JavaScript 创建 Twitter 机器人

2025-06-08

使用 JavaScript 创建 Twitter 机器人

两个月前,我开始了我的 100DaysOfCode 之旅,重新开始使用 Twitter。每天分享我的学习进度时,我对那些点赞和转发我帖子的机器人感到好奇。最终,我决定自己创建一个 Twitter 机器人,并尝试使用 Twitter API 进行实验。

让我们一步一步地了解整个过程。在开始之前,我们先来了解一下 Twitter API。

Twitter API

Twitter 允许您通过机器人帐户以编程方式执行许多操作。

它有不同版本和层次的 API

  • Twitter API v2
  • Twitter API - 企业版
  • Twitter API - 高级版 v1.1
  • Twitter API - 标准 v1.1
  • Twitter 广告 API

我们免费获得并将在本教程中使用的是标准 v1.1v2

v1.1 是标准 API,v2 是其基础上的一些附加方法。

流行的方法和用途

  1. 搜索推文

  2. 状态更新

  3. 转发

我们将使用这三个 API,但还有很多其他用途。例如,机器人可以搜索自己的推文、取消转发、删除旧推文、创建收藏等等。

查看整个API 参考以获取更多详细信息。

一旦你确定了要构建的内容以及要使用的 API,就可以开始构建了。首先,我们要申请一个开发者账号。

申请开发者账号

先决条件 - 您需要拥有一个 Twitter 帐户。您可以使用自己的帐户,也可以为您的机器人创建一个新的 Twitter 帐户。无论您使用哪个帐户,都需要您提供已验证的电子邮件 ID 和电话号码。

遵循的步骤

  1. 登录 Twitter 帐户
  2. 申请开发者访问权限 - 使用链接进入申请流程
  3. 填写申请表 - 它会询问您有关应用程序用途的问题,如果尚未验证,则验证您的电话号码和电子邮件,并回答一些有关如何使用开发者帐户的问题。

完成流程后,您将看到一个仪表板,表示已获批准。通常情况下,批准是即时的。

创建应用程序并获取安全令牌

  1. 在仪表板上,如果我们想使用 API v2,首先需要创建一个项目。单击“创建项目”并为其命名。
  2. 项目创建完成后,您将看到一个“创建应用程序”按钮。单击它即可开始创建您的第一个应用程序。图像
  3. 输入应用名称,然后点击“下一步”。您将进入“密钥和令牌”部分,其中将显示API 密钥、API 密钥密码和 Bearer 令牌。复制这些值并妥善保管。
  4. 单击下一步创建应用程序。
  5. 创建应用程序后,您将进入仪表板。您将看到您的应用程序显示出来。点击旁边的“设置”图标。
  6. 编辑“应用权限”部分。默认情况下,您的应用仅具有读取权限,我们将授予其读写权限,使其能够发送推文。如果您还需要使用私信功能,也可以启用该功能。
    图像

  7. 查看“密钥和令牌”选项卡, 我们将需要所有这些密钥
    图像

    • 消费者密钥 - 点击“重新生成”。复制出现的密钥和密码。您无法再次查看它们,只有在忘记时才可以重新生成。
    • 身份验证令牌 - 用于与关联的用户帐户进行交互。重新生成这两个部分。复制并保存创建的值。

至此,我们的配置已全部设置完毕。我们保存了一些密钥和令牌。现在,我们来看看身份验证是如何进行的。

验证

我不会深入讲解 OAuth,而是会解释在哪种情况下需要使用哪种密钥和令牌。您不需要了解更多。因此,如果您不熟悉身份验证标头,可以暂时忽略这些令人困惑的术语。等我们编写代码时,这些术语会更加清晰。

  1. 应用身份验证- 您正在对您的应用进行身份验证,以便向 Twitter API 发出请求。我们需要遵循以下两种方式之一。这两种方式都将使用我们在创建应用时创建的密钥/令牌。
    • 选项 1:API 密钥和 API 密钥秘密 - 使用 OAuth1.0,将 API 密钥和 API 密钥添加到授权标头中
    • 选项 2:Bearer Token - 使用 OAuth2.0,在授权标头中添加 Bearer 令牌。
  2. 用户身份验证- 授权您的应用使用已连接的用户帐户发布推文/进行更改。这里我们将使用以下 4 个值,这些值是我们授予应用为该帐户写入权限时生成的。
    • 消费者密钥
    • 消费者秘密
    • 访问令牌
    • 访问令牌秘密

例如,

  1. 在搜索推文时,只需要应用程序身份验证,因此我们只需使用 Bearer Token。
  2. 在执行状态更新时,需要进行用户身份验证,因此我们将使用上面提到的 4 个值。

开发环境

我将在 Github 上托管该 repo,并使用 Repl 作为我的 IDE 和运行时环境。

如果你是 Repl 新手,这里有一个快速入门指南

Repl 对于您的机器人来说不是强制性的,您还可以在浏览器和其他部署环境(如 Heroku、Netlify、AWS、Azure 等)中使用离线 IDE/VS Code。因此,选择您觉得合适的即可。

我将使用 Repl 来演示这一点,即使在使用 Azure 多年之后,我仍然发现 Repl 非常适合这个小项目。它完全免费,提供了存储环境变量的简便方法,并在浏览器中运行应用程序。

通过执行以下步骤开始

  1. 创建一个 repo。
  2. 在您的 IDE 中导入 repo。
  3. 初始化一个新的 Node 项目 - 我使用npm init。填写所需的值。

Twitter-Lite 库

虽然库并不重要,并且所有 API 调用都可以通过通用的 GET 和 POST 请求进行,但它会为您处理所有样板代码和授权标头,并帮助您专注于应用程序逻辑。

该库及其文档可以在Github上找到

让我们将库安装为依赖项

npm install twitter-lite
Enter fullscreen mode Exit fullscreen mode

让我们编写代码

我们要做什么?

  1. 从用户列表中获取最近的推文。
  2. 从该列表中找出最热门的推文。
  3. 转发或引用推文与他人分享。

创建 API 客户端

经过身份验证的应用程序客户端

const app = new TwitterLite({
  version: "2",
  extension: false, 
  bearer_token: process.env.BEARER_TOKEN
})
Enter fullscreen mode Exit fullscreen mode

定义参数:

  1. 版本 - 默认值为 1.1。我将其设置为 2,因为我将使用 API v2 方法。
  2. 扩展 - 对于 v2 为 false。对于 v1.1 默认为 true
  3. bearer_token - 我们上面为应用程序保存的 Bearer 令牌。

通过此客户端,应用程序可以调用所有不会从用户帐户进行更改的 v2 API 端点。

已验证用户的客户端

const user = new TwitterLite({  
  access_token_key: process.env.ACCESS_TOKEN,
  access_token_secret: process.env.ACCESS_SECRET,
  consumer_key: process.env.CONS_KEY,
  consumer_secret: process.env.CONS_SECRET
})
Enter fullscreen mode Exit fullscreen mode

参数:

  1. 我们上面保存的用于用户身份验证的身份验证参数。
  2. 请注意,由于我们将使用 v1.1 标准 API 发推文,因此不需要版本和扩展参数。

搜索最近的推文

搜索查询的示例如下

(from:username1 OR from:username2 OR from:username3) -is:reply -is:retweet
Enter fullscreen mode Exit fullscreen mode

此查询获取来自三个用户的推文,但不包括回复或转发的推文。

有关创建查询的具体步骤,请参阅 GitHub 仓库。(链接如下)

参数:

{
  start_time: '2021-09-15T03:10:41.161Z',
  max_results: 10,
  'tweet.fields': 'public_metrics',
  expansions: 'author_id',
  'user.fields': 'id,username',
  query: '(from:username1 OR from:username2 OR from:username3) -is:reply -is:retweet'
}
Enter fullscreen mode Exit fullscreen mode

参数:

  1. 开始时间 - 需要获取最近推文的时间戳
  2. 最大结果数 - 返回的结果数。默认值为 10-100。每月可检索的推文数量有限制,因此请根据实际情况选择数量。
  3. tweet.fields: 'public_metrics'- 将返回诸如喜欢、评论、转发以及推文文本等指标。
  4. user.fields -user.fields将返回发布推文的用户的用户对象 - 我只指定了 id 和用户名。
  5. expansions: author_id。用户数组和推文数组将会分开。Tweetauthor_id对象的作用类似于外键,与id用户对象的字段相链接。

调用 API

const {meta, data, includes} = await app.get('tweets/search/recent' , params)
Enter fullscreen mode Exit fullscreen mode

使用应用程序客户端。

该调用返回三个对象

  1. meta - 元数据,例如返回的结果数量。
  2. 数据 - 推文数组
  3. 包括 - 相关对象,如用户数组。

下一步是根据公开指标从这些推文中找出最佳推文。只需进行简单的数学运算和比较即可。具体操作请参考代码。

我们最终需要的是tweet id最佳username推文的

转发/引用推文

机器人会根据开关或概率,随机选择转发或引用推文。Math.random()逻辑很简单。

让我们看看 API 调用。

引用推文

const {data} = await user.post('statuses/update', {status: status})
Enter fullscreen mode Exit fullscreen mode

这里的状态是将被发送的推文文本。它还会包含指向被引用推文的链接。这是代码库中需要解决的另一个问题。

转推

const {data} = await user.post('statuses/retweet/'+ id)
Enter fullscreen mode Exit fullscreen mode

就这么简单 -id这是我们之前找到的最佳推文 ID。

就是这样。现在每次我们的代码运行时,它都会找到来自特定用户的 10 条最新推文,并分享其中最好的一条。

现在让我们看一些支持细节。

环境变量

所有 token 和用户列表都保存为环境变量。出于安全考虑,不应将它们放入代码中。

我使用了 Repl Secrets 来完成这项任务。您可以选择您环境提供的任何方式。

部署你的机器人并保持其运行

实现这一点的方法有很多。机器人开发者常用的一种方法是将其部署到 Heroku 上,并使其按预定的时间戳运行。AWS Lambda 和 Azure Functions 也可以实现同样的功能。

我的方法是把它保留在 Repl 本身上。不知道这种方法有多流行,但我还是分享一下步骤:

  1. 将代码保留在 Repl 上。
  2. 配置运行按钮 -文档

    • 将 .replit 文件添加到您的 Repl
    • 添加语言和命令
        language = "bash"
        run = "node index.js"
    
  3. 定期运行它 - 这是有趣的部分。

    • 触发 Repl 的一个简单方法是访问其 URL https://repl-name.username.repl.co/
    • 我将把这个 URL 放入监视器中,监视器将按照定义的时间间隔对该 URL 进行健康检查。
    • UptimeRobot 是推荐的解决方案,但它在短时间间隔内对我来说运行不太顺利。
    • 最终选择了免费增值工具 - https://www.easycron.com/
    • 仍在使用免费套餐。最终可能会切换。

就这样。现在机器人每小时运行一次,找到一条新推文分享。前提是用户在该小时内发过推文。由于我的用户列表很长,所以很少会错过。


感谢您阅读本文。

代码在Github上

如果您想联系我并打个招呼,请关注我的Twitter 。

哦,等等!这个机器人也在推特上。快来看看它怎么样了。

鏂囩珷鏉ユ簮锛�https://dev.to/abh1navv/creating-a-twitter-bot-with-javascript-and-repl-it-1gbf
PREV
开源项目:使用 Spring Boot 和 Spring Security 的银行门户 Rest API
NEXT
React。关键点。TL;DR 它不是一个框架 它包含 JavaScript 逻辑完全由你负责 它是声明式的 总结