是否正在尋找一種使Twitter更有用的方法(如果僅對(duì)其他人有用)?一種方法是創(chuàng)建一個(gè)自動(dòng)的Twitter機(jī)器人,該機(jī)器人在推特上添加有用的描述。您可以手動(dòng)執(zhí)行此操作…,也可以使用Node.js進(jìn)行構(gòu)建并將其托管在Raspberry Pi上。繼續(xù)閱讀以了解操作方法。
為什么要構(gòu)建Twitter Bot?
如果您曾經(jīng)在Twitter上看到過發(fā)布照片,事實(shí),卡通等的帳戶,那么絕大多數(shù)情況下這些都是自動(dòng)化的。這是一種吸引對(duì)同一主題感興趣的人群的好方法。
但是,除了轉(zhuǎn)發(fā)和關(guān)注之外,還有另一個(gè)原因。構(gòu)建Twitter機(jī)器人將教您一些有用的編程技巧。先前我們已經(jīng)研究了如何使用Python(也在Raspberry Pi上)構(gòu)建基本的Twitter機(jī)器人,但是這次我們采用了另一種方法。
在此項(xiàng)目中,我們將使用Node.js在Raspberry Pi上構(gòu)建照片發(fā)布機(jī)器人。這些照片將是第一次世界大戰(zhàn)的照片,并附有簡(jiǎn)短的句子和署名。這些信息將存儲(chǔ)在一個(gè)數(shù)組中,即一個(gè)基本數(shù)據(jù)庫。
入門:構(gòu)建數(shù)據(jù)庫
如果您想構(gòu)建照片發(fā)布機(jī)器人,則需要從以下步驟開始收集您要共享的圖像。這些應(yīng)該是您自己的圖像,也可以是您根據(jù)知識(shí)共享或其他開放源代碼許可獲得的圖像。
您還應(yīng)該留意圖像的歸屬和其他信息。僵尸程序啟動(dòng)并運(yùn)行后,我們將在稍后返回該信息。
在Raspbian上安裝Node.js
首先要安裝Node.js。您應(yīng)該已經(jīng)安裝了Raspbian,并已經(jīng)在運(yùn)行Raspberry Pi。對(duì)于此項(xiàng)目,我們建議使用Raspberry Pi 2或更高版本。該項(xiàng)目已在Raspberry Pi 3 B +上進(jìn)行了測(cè)試。
在終端中(或通過SSH),更新系統(tǒng)軟件包列表,并升級(jí)到最新版本:
sudo apt-get update
sudo apt-get dist-upgrade
按照屏幕上的提示進(jìn)行操作,然后等待您的Pi更新。完成后,使用
sudo reboot
重新啟動(dòng)。完成后,使用curl下載Node.js:
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
下一步,使用
sudo apt-get install -y nodejs
進(jìn)行安裝。完成所有操作后,運(yùn)行檢查以確保軟件已正確安裝。最簡(jiǎn)單的方法是檢查版本號(hào):
node -v
響應(yīng)應(yīng)該類似于v8.11.3(或更高版本)。如果您看到類似的內(nèi)容,則可以確信可以使用Node.js。
構(gòu)建您的Twitter Bot
下一步是輸入將創(chuàng)建以下內(nèi)容的代碼:機(jī)器人。首先創(chuàng)建一個(gè)目錄:
mkdir twitterbot
然后,將其更改為您的機(jī)器人的新目錄:
cd twitterbot
在這里,創(chuàng)建一個(gè)名為server.js的文件
sudo nano server.js
在此文件中,輸入一行:
console.log(‘I am a Twitter bot!’);
按 Ctrl + X 保存并退出,然后運(yùn)行腳本:
node ‘/home/pi/twitterbot/server.js’
這應(yīng)該返回短語“我是Twitter機(jī)器人!” ?,F(xiàn)在,您已經(jīng)確認(rèn)它可以運(yùn)行了,是時(shí)候使用 npm ( Node Package Manager )安裝Twit庫了。再次輸入以下內(nèi)容以確保已安裝:
npm -v
再次,您應(yīng)該會(huì)看到顯示的版本號(hào)。
然后執(zhí)行以下操作:
npm init
這首先提示您輸入有關(guān)正在創(chuàng)建的Node.js應(yīng)用程序的信息。顯示默認(rèn)選項(xiàng)(像這樣),因此您只需點(diǎn)擊Enter即可接受它們。您也可以選擇輸入自己的詳細(xì)信息。配置結(jié)束后,將要求您單擊“是”確認(rèn)詳細(xì)信息。
下一步是從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’));
像以前一樣保存并退出。
創(chuàng)建一個(gè)Twitter應(yīng)用
要構(gòu)建一個(gè)有效的Twitter機(jī)器人,您需要?jiǎng)?chuàng)建一個(gè)Twitter應(yīng)用。這是一個(gè)簡(jiǎn)單的過程,需要您首先注冊(cè)一個(gè)新的Twitter帳戶。請(qǐng)注意,這還需要一個(gè)電話號(hào)碼來驗(yàn)證該帳戶,完成此操作后,請(qǐng)前往developer.twitter.com來創(chuàng)建該應(yīng)用程序。
如果您沒有開發(fā)人員帳戶,則可能需要一些時(shí)間,因?yàn)樾枰顚懸欢〝?shù)量的表格。這是Twitter為避免垃圾郵件而采取的步驟,請(qǐng)花點(diǎn)時(shí)間并準(zhǔn)確回答問題。
點(diǎn)擊創(chuàng)建應(yīng)用,然后根據(jù)要求添加詳細(xì)信息。在撰寫本文時(shí),開發(fā)人員系統(tǒng)正在進(jìn)行大修,因此您可能必須等待幾天(并回答一些其他問題)。
下一步,切換到密鑰和令牌標(biāo)簽,然后在權(quán)限下找到訪問權(quán)限,并確保將其設(shè)置為讀取并撰寫(如果沒有,請(qǐng)使用編輯)。然后切換到“密鑰和令牌”并記下以下內(nèi)容:
消費(fèi)者密鑰
消費(fèi)者秘密
“在訪問權(quán)限下”令牌,單擊創(chuàng)建以生成:
訪問令牌
訪問令牌密鑰
這些是API密鑰
返回命令行,在nano中創(chuàng)建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”的地方,替換您自己的相應(yīng)API密鑰詳細(xì)信息。
保存并退出,然后打開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)
});
應(yīng)如下所示:
再次保存并退出,然后在命令行中輸入
node server.js
在瀏覽器中打開您的Twitter帳戶以查看結(jié)果:
您已經(jīng)確認(rèn)該機(jī)器人正在發(fā)推文,因此該該做點(diǎn)事情了!
創(chuàng)建圖像文件夾
要發(fā)送照片,請(qǐng)將收集的圖像復(fù)制到文件夾中(通常命名為圖像)。從大約一打開始。
接下來,返回到server.js文檔:
sudo nano server.js
在這里,刪除發(fā)送推文的代碼,即T.post(‘statuses/update’)開頭的行。
接下來,將其替換為名為 random_from_array 的函數(shù)。這將從圖像文件夾中隨機(jī)選擇圖像。
function random_from_array(images){
return images[Math.floor(Math.random() * images.length)];
}
完成此操作后,您需要添加第二個(gè)功能, 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文件夾中隨機(jī)選擇一個(gè)圖像,選擇后將使用媒體/上傳API將其上傳到Twitter。
接下來,添加以下代碼。這將找到images目錄,并從中獲取一張圖像,每60秒隨機(jī)發(fā)布一張。您可以(并且應(yīng)該)編輯此時(shí)間,該時(shí)間在代碼中用數(shù)字60000表示。建議使用更大的間隙。
setInterval(function(){
upload_random_image(images);
}, 60000);
}
});
使用 Ctrl + X ,然后單擊是進(jìn)行保存。 (您可以在GitHub上找到該項(xiàng)目的完整代碼)。
只需使用一次 node server.js 命令,就會(huì)提示照片開始發(fā)推! (如果您需要結(jié)束帖子,請(qǐng)按 Ctrl + Z 來取消server.js腳本。)
向照片推文中添加文字
如果您需要在圖像中添加文本,可以使用數(shù)組來完成。該數(shù)組將引用圖像的文件名,并列出應(yīng)添加的文本。例如,您可以為未拍攝的圖片添加歸因?;蛘?,您可以添加一些事實(shí)或報(bào)價(jià)。
通過創(chuàng)建images.js
sudo nano images.js
在這里,添加以下代碼。這是一個(gè)數(shù)組,具有兩個(gè)元素,文件和源。它們保存圖像的文件名和屬性(通常是URL)。
var images = [
{
file: ‘image0001.png’,
source: ‘http://www.example.com/image0001.png’
},
{
file: ‘image0002.png’,
source: ‘http://www.example.com/image0002.png’
},
]
根據(jù)需要對(duì)每個(gè)圖像重復(fù)此操作,然后使用以下命令結(jié)束images.js文件:
module.exports = images;
保存并關(guān)閉文件,然后再次打開server.js,并將其添加到變量列表中:
images = require(path.join(__dirname, ‘images.js’));
保存并退出,然后再次使用 node server.js 命令重新啟動(dòng)Twitter機(jī)器人。
您還可以使用“源”字段添加一些文本,解釋圖片的背景。
您的第一個(gè)Twitter Bot,準(zhǔn)備重用!
現(xiàn)在,您應(yīng)該已經(jīng)啟動(dòng)并運(yùn)行了一個(gè)自動(dòng)發(fā)布的Twitter bot,可以共享照片,事實(shí)和給定主題的屬性。
總而言之,過程是:
收集照片
安裝Node.js
構(gòu)建您的Twitter機(jī)器人
在Twitter上申請(qǐng)開發(fā)人員身份
創(chuàng)建一個(gè)Twitter應(yīng)用
添加歸因數(shù)組
開始發(fā)推文!
責(zé)任編輯:wv
-
樹莓派
+關(guān)注
關(guān)注
116文章
1684瀏覽量
105414 -
NODE.JS
+關(guān)注
關(guān)注
1文章
46瀏覽量
32740
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論