如何使用Raspberry Pi和Node.js构建推文Twitter Bot的照片

是否正在寻找一种使Twitter更有用的方法(如果仅对其他人有用)?一种方法是创建一个自动的Twitter机器人,该机器人在推特上添加有用的描述。您可以手动执行此操作…,也可以使用Node.js进行构建并将其托管在Raspberry Pi上。继续阅读以了解操作方法。

为什么要构建Twitter Bot?

如果您曾经在Twitter上看到过张贴照片,事实或卡通等内容的帐户, ,那么绝大多数都是自动化的。这是一种吸引对同一主题感兴趣的人群的好方法。

但是,除了转发和关注之外,还有另一个原因。构建Twitter机器人将教您一些有用的编程技巧。先前我们已经研究了如何使用Python(也在Raspberry Pi上)构建基本的Twitter机器人,但是这次我们采用了另一种方法。

在此项目中,我们将使用Node.js在Raspberry Pi上构建照片发布机器人。这些照片将是第一次世界大战的照片,并附有简短的句子和署名。此信息将存储在一个数组中,即一个基本数据库。

入门:构建数据库

如果您想构建照片发布机器人,则需要从以下步骤开始收集您要共享的图像。这些应该是您自己的图像,也可以是您根据知识共享或其他开放源代码许可获得的图像。

您还应该留意图像的归属和其他信息。僵尸程序启动并运行后,我们将在稍后返回此信息。

在Raspbian上安装Node.js

首先要安装Node.js。您应该已经安装了Raspbian的Raspberry Pi已启动并正在运行。

在终端中(或通过SSH),更新系统软件包列表,并升级到最新版本:

sudo apt-get updatesudo apt-get dist-upgrade

按照屏幕上的提示,然后等待您的Pi更新。完成后,使用

sudo reboot

重新启动。完成后,使用curl下载Node.js:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

下一步,使用

sudo apt-get install -y nodejs
node -v

响应应该类似于v8.11.3(或更高版本)。如果您看到类似的内容,则可以确信可以使用Node.js。

构建您的Twitter Bot

下一步是输入将创建以下内容的代码:机器人。首先创建目录:

mkdir twitterbot

然后将其更改为您的机器人的新目录:

cd twitterbot

在这里,创建一个名为server.js的文件

sudo nano server.js

在此文件中,输入一行:

console.log('I am a Twitter bot!');

Ctrl + X 保存并退出,然后运行脚本:

node '/home/pi/twitterbot/server.js'

这应该返回短语“我是Twitter机器人!"。现在您已经确认可以正常运行了,现在该使用 npm Node Package Manager )安装Twit库了。再次输入以下内容以确保已安装:

npm -v

再次,您应该看到显示的版本号。

接着输入:

npm init

这首先提示您输入有关您正在创建的Node.js应用程序的信息。显示默认选项(像这样),因此您只需点击Enter即可接受它们。您也可以选择输入自己的详细信息。完成此配置后,将要求您单击“是"确认详细信息。

下一步是从npm安装Twit模块。

npm install twit --save

请稍等文件下载到node_modules子目录中。完成后,再次在nano中打开server.js文件。

sudo nano server.js

在这里,删除之前输入的命令,将其替换为:

var fs = require('fs'),    path = require('path'),    Twit = require('twit'),    config = require(path.join(__dirname, 'config.js'));

保存并像以前一样退出。<

创建Twitter应用程序

要构建可用的Twitter机器人,您需要创建一个Twitter应用程序。这是一个简单的过程,需要您首先注册一个新的Twitter帐户。请注意,这还需要一个电话号码来验证该帐户,完成此操作后,请前往developer.twitter.com来创建该应用程序。

如果您没有开发人员帐户,则可能需要一些时间,因为需要填写一定数量的表格。这是Twitter为避免垃圾邮件而采取的步骤,请花点时间并准确回答问题。

点击创建应用,然后根据要求添加详细信息。在撰写本文时,开发人员系统正在进行大修,因此您可能必须等待几天(并回答一些其他问题)。

下一步,切换到键和令牌标签,然后在权限下找到访问权限,并确保将其设置为读写(使用编辑(如果没有)。然后切换到“密钥和令牌"并记下以下内容:

  • 消费者密钥
  • 消费者秘密
  • 在访问令牌下,单击创建生成:

  • 访问令牌
  • 访问令牌秘密
  • 这些是API密钥,您需要这些API密钥才能使漫游器访问您的Twitter帐户。

    返回命令行,在nano中创建config.js:

    sudo nano config.js

    添加以下内容

    var config = { consumer_key:         'XXXXX', consumer_secret:      'XXXXX', access_token:         'XXXXX',  access_token_secret:  'XXXXX'}module.exports = config;

    ,将其读为“ XXXXX",替换为您自己的相应的API密钥详细信息。

    保存并退出,然后打开server.js。

    sudo nano server.js

    此处,在文件末尾添加以下几行:

    var T = new Twit(config);T.post('statuses/update', { status: 'My first tweet!' }, function(err, data, response) {  console.log(data)});

    它应该看起来像这样:

    再次保存并退出,然后在命令行中输入

    node server.js

    在浏览器中打开Twitter帐户以查看结果:<

    您已经确认该机器人正在发布Twitter消息,因此该给它做些事情了!

    创建文件夹图像r

    要发布照片,请将收集的图像复制到文件夹中(通常命名为图像)。从大约一打开始。

    接下来,返回到server.js文档:

    sudo nano server.js

    在这里,删除发送tweet的代码,该代码以T.post( “状态/更新"。

    接下来,将其替换为名为 random_from_array 的函数。这将从图像文件夹中随机选择图像。

    function random_from_array(images){  return images[Math.floor(Math.random() * images.length)];}

    完成此操作后,您需要添加第二个功能, upload_random_image

    function upload_random_image(images){  console.log('Opening an image...');  var image_path = path.join(__dirname, '/images/' + random_from_array(images)),      b64content = fs.readFileSync(image_path, { encoding: 'base64' });  console.log('Uploading an image...');  T.post('media/upload', { media_data: b64content }, function (err, data, response) {    if (err){      console.log('ERROR:');      console.log(err);    }    else{      console.log('Image uploaded!');      console.log('Now tweeting it...');      T.post('statuses/update', {          media_ids: new Array(data.media_id_string)        },        function(err, data, response) {          if (err){            console.log('ERROR:');            console.log(err);          }          else{            console.log('Posted an image!');          }        }      );    }  });}

    此功能从images文件夹中随机选择一个图像,选择后将使用媒体/上传API上传到Twitter。

    Next, add the following code. This will find the images directory, and take an image from it, posting one at random every 60 seconds. You can (and should) edit this timing, which is represented in the code with the figure 60000. Longer gaps are advisable.

        setInterval(function(){      upload_random_image(images);    }, 60000);  }});

    使用 Ctrl 保存此功能strong> + X ,然后单击是保存。 (您可以在GitHub上找到该项目的完整代码)。

    只需使用一次 node server.js 命令,就会提示照片开始发推! (如果您需要结束帖子,请按 Ctrl + Z 来取消server.js脚本。)

    向照片推文中添加文字

    如果您需要在图像中添加文本,可以使用数组来完成。该数组将引用图像的文件名,并列出应添加的文本。例如,您可以为未拍摄的图片添加归因。或者,您可以添加一些事实或报价。

    首先创建images.js

    sudo nano images.js

    在此处,添加以下代码。这是一个数组,具有两个元素,文件和源。它们保存图像的文件名和属性(通常是URL)。

    var images = [  {     file: 'image0001.png',    source: 'http://www.example.com/image0001.png'  },  {     file: 'image0002.png',    source: 'http://www.example.com/image0002.png'  },]

    根据需要对每个图像重复此操作,然后在images.js文件结尾添加

    module.exports = images;

    保存并关闭文件,然后再次打开server.js,并将其添加到变量列表中:

    images = require(path.join(__dirname, 'images.js'));

    保存并退出,然后使用 node server.js 重新启动Twitter bot。再次执行strong>命令。

    您还可以在“源"字段中添加一些文字,以解释图片的背景。

    您的第一个Twitter Bot,准备重用!

    现在,您应该已经启动并运行了一个自动发布的Twitter bot,可以共享照片,事实和给定主题的属性。

    总而言之,过程是:

  • 收集照片
  • 安装Node.js
  • 在Twitter上申请开发人员身份
  • 创建一个Twitter应用
  • 添加归因数组
  • 开始发布推文!
  • 也许最好的是,该代码可用于在任何主题上发布照片,事实和属性的推文。

    想知道您还可以运行其他哪些机器人类似的设置?查看我们的Raspberry Pi最佳Twitter机器人项目列表!

    标签: DIY项目教程 JavaScript Raspberry Pi Twitter