使用Node.js为Twitter制作一个Replier和Follow机器人

545 阅读10分钟

先决条件:

  • 当前版本的Nodenpm
  • 已下载并顺利运行的jQuery 3.0
  • 一个最新版本的 Homebrew安装并运行。
  • 一个演示的Twitter账户
  • 一个文本编辑器;我建议使用Sublime textAtom

我建议再创建一个假的演示账户,因为我们现在要做的是....

我们将发布重复的推文,每10秒发布一次,并违反几乎所有的规则。基本上,破坏了整个系统。因此,如果这个账户被封锁,你不会失去你宝贵的个人数据。

前奏

在我们开始之前,让我们检查一下我们的nodenpm是否处于当前的版本,是否能够正常运行。到你的终端,连续输入这两行。

$ node 
-vv7.10.0

创建文件

打开你喜欢的文本编辑器,创建一个包含两个文件的文件夹--config.jsbot.js。你可以给它们取任何名字,但我更喜欢这两个文件,以便在本教程的过程中便于理解。

打开你的终端,改变目录到你计划制作机器人并存储所有相关文件的文件夹。

image.png

NodeJSDemo的文件中,有两个文件bot.js 和config.js

image.png

确保在目标文件夹中安装你的依赖项和软件包。

用需要的包启动Node私人服务器

在命令提示符中键入以下一行,以初始化一个名为package.json的新JSON文件。

npm init

你会被提示填写几个字段。继续填写你的机器人的相关信息。

你可以通过按回车键跳过一些不必要的内容。

image.png

通过这样做,我们文件夹中的这个文件包含了我们节点应用程序的简短简历。关于作者的信息、描述和文档、使用的依赖性、许可证和关键词都包含在这个文件中。

导入我们的依赖性

打开你的浏览器并打开 npm网站并搜索Twit包的文档,你会在页面上看到以下内容。

image.png

去点击你在npm搜索列表中看到的第一个搜索结果。

点击该帖子,进入Twit依赖关系的文档页面。在你的终端或命令行中输入安装命令,等待它完全完成安装。

image.png

在你的命令行或终端中键入安装命令

我建议在这个命令的末尾添加一个 -save 标志,这样如果以后使用就不需要再安装了。它将被本地存储在磁盘上。

npm install twit --save

在安装Twit包后,你会看到在这个目录下有一个叫做node_modules的文件夹。如果你打开它,会看到其他一些小的文件夹,其中包含了Twit运行的依赖和包,以及里面的README.md 文件。

最后,我们完成了机器人的初始化!现在,到Twitter网站上创建我们的机器人。

到Twitter去吧!

打开你的浏览器,进入Twitter.创建一个演示账户,并将其设置好。

转到Twitter开发者页面,向下滚动到页脚,点击工具下的管理你的应用程序

创建一个新的应用程序,并输入必要的信息,如应用程序的名称、描述、网站(如果有的话),以及我忘记提及的任何其他领域。

image.png

填入这些字段。如果你愿意,你可以忽略最后两个字。然而,如果你实际上有一个OAuth密钥和一个网站来托管机器人,我敦促你输入你各自的凭证

现在我们已经创建了我们的应用程序,我们现在需要获得我们的消费者令牌和应用程序的秘密。进入密钥和访问令牌标签,复制这些消费者密钥消费者秘密 ,并把它粘贴到某个地方。我们很快就会使用这些值。

如果你向下滚动,你会看到这个按钮,叫做创建 我的访问令牌。点击这个按钮,生成一个自定义的访问令牌和一个访问令牌的秘密。也要复制和粘贴这些值。

image.png

如果你在这之前一直按照步骤操作,你的屏幕上就会显示出这个。每个位都有自己单独的访问令牌和消费者密钥。使用这些值,我们将能够与Twitter数据库通信,以提取事件的相关信息。

假设你有发布和开源你的机器人的计划,那么你显然需要隐藏和保护你的消费者密钥和访问令牌不被公开,以避免误用和滥用。

为了做到这一点,我们将从另一个文件初始化我们的机器人:config.js。这样,我们就不需要在实际的可部署代码正文中添加客户端的值。

代码。最后...

打开你的config.js文件,将你之前复制的访问令牌和消费者密钥的值粘贴到Bot对象的相应属性中。

image.png

bot对象的初始化。

我们刚才写的东西就是我们的机器人初始化脚本。它使用Bot的module.export对象中的值和参数创建并调用我们的Bot。

它请求Twitter的API服务给予它从其数据库中检索相关数据的权限,如关注、推特、提及和其他活动。

调试和运行

为了检查我们代码中的bug,请到你的bot.js文件中,输入console.log命令。我们将运行这个JS文件,检查到目前为止所犯的任何错误。我们还将添加几行代码,将Twit包和我们的config.js文件导入我们的项目中。

image.png

这就把我们的具体内容打印到终端。

现在我们将通过使用Node运行时服务器来编译程序。要使用node编译,我们只需输入:

node <program-name>.js

转到你的命令行或终端,改变目录到包含我们文件的文件夹。键入上述命令来运行你的机器人。如果一切运行良好,你会在命令行中看到这个:

image.png

先前导入的 config.js文件的内容被打印到终端。

是时候发微博了!

现在,我们要写的是处理实际内容的那部分代码。首先,我们必须创建一个Post对象,并将我们的信息或tweet填入其中。我们编写函数tweetStatus(),它接收一条消息作为输入参数并发布该消息。

image.png

我们已经初始化了一个新的Twit包构建模型。这有助于发布/推特任何你喜欢的东西。函数 tweetStatus() 的编写是为了方便发布一条推文。

通过它,你可以通过改变post JSON中的状态值来发布任何你喜欢的东西。无论是一个随机的笑话还是一个随机的数字,你都可以发布任何你喜欢的东西!

编译并运行该程序,看看它是否真的能推送 "世界你好!"。

如果你查看Twitter开发者文档,你有一大堆参数可以写入我们的tweet对象里面。这让我们可以控制我们想获得的帖子和我们想抛弃的帖子。

运行程序

在我们编写Twitter聊天机器人的过程中,我们已经达到了一个重要的里程碑。我们已经非常接近我们的目标了。现在,我们要对刚刚编写的程序进行编译。编译后,"Hello world!"的信息将被发布到网上,让全世界的人都能看到!按照上面的编译步骤、

node bot.js

image.png

编译后的终端窗口应该是这样的。如果你的代码崩溃时出现了错误,你一定是在什么地方出了问题。不要担心!重新追踪你的脚步并纠正!重新追踪你的脚步,并改正错误。

image.png

我们已经成功地在推特上发布了 "Hello World"的信息,没有任何错误信息或崩溃!如果你能达到这一点而没有把头撞到墙上或哭出来,那就是好样的!这就是你的工作!

这个函数相当简单。它所做的就是指定一个推特任务。假设有人提到你,关注你或戳你。然后,你想通过表达谢意来回复。为了做到这一点,我们可以编写我们的提及函数。

设置事件处理程序

JavaScript是一种一切都以异步方式进行的语言。同样地,我们要写几行代码来指定当事件被触发时我们希望机器人做什么。

有一个特殊的事件叫做 "",它允许我们在启动拉动请求时即时捕捉Twitter上发生的事情。它看起来像这样:

image.png

流语句允许我们捕捉在Twitter的数据库中即时移动的数据快照。这有助于我们检测提及或关注请求。

这个特殊的函数可以检测到是否有人关注了你的机器人或在任何地方提到了它。现在我们来写 followed()tweetEvent() 函数。

我们的检测和反应函数

让我们来编写回复任何关注或提及所需的函数,好吗?

它看起来像这样:

image.png

tweetEvent() 函数检测我们的用户名是否在Twitter上被提及,并进行回复。我已经输入了我的两个启动账户的屏幕名称。你需要加入你的机器人的用户名/网名来代替。

if语句中加入你的网名。这样,任何包含网名的推特都会被我们的机器人注册,并相应地发送回复,感谢他们提及我们。它利用了我们之前写的tweetStatus() 函数。很简单,对吗?

现在,来看看我们的**followed()**函数:

image.png

一个相当简单的函数,followed() 函数注册任何关注请求或关注我们机器人账户的用户。

我们就完成了!祝贺你!现在,最令人期待的时刻到了:运行程序。

运行和测试

对于这个环节,我建议你在另一个设备上开一个Twitter账户。这样,你就可以通过实际关注你的机器人并提到它几次来检查机器人是否有反应,而不必每次做什么都要切换账户。

我正在使用我的手机上的Twitter来进行测试过程。这使它更容易,因为我不需要在我的笔记本电脑上不断跳转账户。运行该程序:

node bot.js

image.png

它能异步提供任何关注事件或提及事件的详细信息。你可以打开tweets.json文件,看看一条推文的各个组成部分。它现在看起来很不美观,但如果你加入换行和空格,可以使它看起来更好。

使用另一个设备关注机器人账户。测试机器人是否有可以修复的边缘情况。让它转一转。如果你遇到任何无法克服的错误,请在下面留言,我会给你答复。

每10秒发布一次 "的部分

(这是一个可选的部分,如果你的机器人需要每隔一小段时间(如一小时左右)发布一些东西,可以使用这个部分)。

我们谈到了每10秒左右发布一条推文。为什么不是每一个设定的间隔呢?通过使用 setInterval() 命令,我们可以轻松地执行这项任务。

通过设置一个函数作为输入参数,以及以毫秒为单位的时间间隔(1000ms=1s),这个任务就可以轻松完成了!它看起来像这样:

setInterval(tweetStatus, 10000)

简言之

如果你有必要的话,就打破它吧!一个机器人的目的是没有界限的!现在一切都取决于你的想象力。