如何使用 Node.js 和 Heroku 创建 Twitter 机器人目录 the-datascience-bot

2025-06-07

如何使用 Node.js 和 Heroku 创建 Twitter 机器人

目录

数据科学机器人

制作 Twitter 机器人是使用 Twitter API 的众多用例之一。机器人可以用来提升你的业务,通过自动回复协助客户,自动转发特定关键词的推文等等。
本文将介绍我如何The Data Science Bot使用 Node.js创建机器人。

目录

  1. 申请Twitter开发者账号
  2. 在 Twitter 上创建应用程序
  3. 设置开发环境
  4. 在 nodejs 中编写代码
  5. 部署到 Heroku
  6. 如何避免重复转发

让我们开始吧

第一步:申请Twitter开发者账号

在我看来,这是最重要的一步,也许是最困难的一步。

  • 登录Twitter
  • 前往developers.twitter.com并点击“申请开发者账户”
  • 选择申请类型,例如学生/商务/业余爱好者等。
  • 请说明您的申请目的。请尽可能具体地说明。

在申请之前,请确保您已仔细阅读开发者协议和政策自动化规则以及Twitter 规则。

不满足这些条件将导致您的申请被拒绝

阅读有关如何申请 Twitter 开发者帐户的完整文章

第 2 步:在 Twitter 上创建应用程序

一旦您的 Twitter 开发者帐户访问获得批准。

  • 在apps.twitter.com上创建一个 APP
    填写所需的详细信息。

  • 生成 API 密钥。点击您的应用详情,然后导航至Keys and tokens
    生成密钥

⚠️警告(任何情况下都不要泄露 API 密钥)。

步骤3:设置开发环境

确保您的电脑上安装了 Node.js 和 npm。

对于 Ubuntu,使用以下命令安装

sudo apt install nodejs
sudo apt install npm
Enter fullscreen mode Exit fullscreen mode

对于其他发行版,请单击此处获取安装说明。

创建一个名为 的目录your-botname
在我的例子中,我将其命名为the-datascience-bot

要初始化 git 环境并twit使用安装包,请在目录npm输入以下命令your-botname

初始化环境

恭喜!您已成功设置 Node.js 开发环境 🎉🎉

步骤4:代码

  • 首先,我们必须进行身份验证twit。为此,我们将使用生成的API 密钥链接我们的 Twitter 应用和代码。

创建一个名为 的文件config.js
将以下代码放入config.js文件中

配置.js

配置.js

将您的密钥从 Twitter 应用程序仪表板复制过来。

  • 接下来,我们在文件中编写机器人的代码bot.js

这是代码。

机器人.js

const config = require('./config')
const twit =  require('twit')

const T = new twit(config)

function retweet(searchText) {
    // Params to be passed to the 'search/tweets' API endpoint
    let params = {
        q : searchText + '',
        result_type : 'mixed',
        count : 25,
    }

    T.get('search/tweets', params, function(err_search, data_search, response_search){

        let tweets = data_search.statuses
        if (!err_search)
        {
            let tweetIDList = []
            for(let tweet of tweets) {
                tweetIDList.push(tweet.id_str);

                //more code here later...
            }

            // Call the 'statuses/retweet/:id' API endpoint for retweeting EACH of the tweetID
            for (let tweetID of tweetIDList) {
                T.post('statuses/retweet/:id', {id : tweetID}, function(err_rt, data_rt, response_rt){
                    if(!err_rt){
                        console.log("\n\nRetweeted! ID - " + tweetID)
                    }
                    else {
                        console.log("\nError... Duplication maybe... " + tweetID)
                        console.log("Error = " + err_rt)
                    }
                })
            }
        }
        else {
            console.log("Error while searching" + err_search)
            process.exit(1)
        }
    })
}

// Run every 60 seconds
setInterval(function() { retweet('#DataScience OR #DataVisualization'); }, 60000)

Enter fullscreen mode Exit fullscreen mode

让我们来分析一下。

  • 我们使用来自以下位置的配置详细信息来初始化 twit 对象config.js
  • retweet 函数首先调用search/tweets给定搜索查询的 API 端点。在我的例子中,它是“#DataScience 或 #DataVisualization”。
  • 我们将以下参数传递给搜索 API
    • q:搜索查询
    • result_type‘混合’,包括最新推文和热门旧推文
    • count:一次检索的推文数量
  • 检索到的JSON对象包含带有 #DataScience 或 #DataVisualization 的推文列表。

-然后,我们将每个推文 ID 传递给statuses/retweet/:idAPI 端点,该端点会转发该推文。

搜索转发的详细 API 参考指南

使用以下命令在本地测试机器人:

node bot.js
Enter fullscreen mode Exit fullscreen mode

您的 Twitter 时间线应该显示转发。

如果不起作用,请尝试在控制台上调试。

步骤 5:部署到 Heroku

  • 在Heroku上创建帐户
  • 在 Heroku 上创建一个名为“your-botname”的应用程序

创建新应用程序按钮

Heroku 新应用

确保本地项目目录的名称与 Heroku 项目名称完全相同。

  • 在你的电脑上安装heroku-cli

如果你有基于Ubuntu/Debian 的发行版,那么使用以下命令安装heroku-cli

curl https://cli-assets.heroku.com/install-ubuntu.sh | sh
Enter fullscreen mode Exit fullscreen mode

对于其他环境,可以在此处找到安装说明

  • 创建一个名为“Procfile”的文件,其中包含以下代码

进程文件

worker: node bot.js
Enter fullscreen mode Exit fullscreen mode
  • 登录 Heroku CLI
$ heroku login
Enter fullscreen mode Exit fullscreen mode

这将在 heroku 上打开一个登录链接,您必须在其中输入密码。

  • 使用以下命令部署到 Heroku部署 Heroku 命令

最后一步

worker在 Heroku 上启动
测功机。 前往dashboard.heroku.com/apps,然后点击你的机器人应用。

然后,点击配置 Dynos
配置 Dynos

启动worker测功机并点击确认
启动工人测功机

你的机器人已经准备好了!🎉🎉

机器人跳舞

第六步:如何避免重复转发

在我们编写的 for 循环中添加以下代码
//more code here later..

检查重复

检查重复

然后在循环之外-

// Utility function - Gives unique elements from an array
function onlyUnique(value, index, self) { 
    return self.indexOf(value) === index;
}

// Get only unique entries
tweetIDList = tweetIDList.filter( onlyUnique )
Enter fullscreen mode Exit fullscreen mode

实用函数onlyUnique也可以写在转发函数外面。

这将使我们的机器人避免重复转发。

上述代码的简要解释

  • 每条推文都有一个独特的属性id_str
    如果你转发某人的推文,它会有不同的属性id_str

  • 搜索 API 可以找到原始推文和转发的推文。

  • 当我们调用statuses/retweet/:idAPI 端点时,它会转发所有推文。

  • 对于 Twitter 新手用户来说,您的机器人似乎已经转发了相同的内容两次或更多次。

像这样👇

重复转发

  • 如果推文文本以“RT @”开头,则该推文为转发推文,其 与id_str原推文不同。我们取原推文id_str,并使用以下函数过滤重复内容onlyUnique

您可以使用 API 做更多事情。查看 API 参考 ( https://developer.twitter.com/en/docs/api-reference-index ) 了解更多详情。

源代码 -

完整的源代码可以在这里访问

GitHub 徽标 Sumedh-Patkar / the-datascience-bot

用于转发带有#DataScience、#DataVisualization 标签的推文的 Twitter 机器人

数据科学机器人

封面图片用于转发带有#DataScience、#DataVisualization 标签的推文的 Twitter 机器人




数据科学机器人🤖

该机器人转发带有#DataScience#DataVisualization标签的推文

这是我的机器人的链接https://twitter.com/datasciencebot_

好的,就这样!

这是我在开发者社区发表的第一篇技术文章。
非常感谢大家的反馈!

谢谢阅读!😊

文章来源:https://dev.to/sumedhpatkar/how-i-created-a-twitter-bot-using-node-js-and-heroku-368b
PREV
If-Else 还是 Switch-Case:选择哪一个?
NEXT
Async 和 Await 实际上在做什么?