低成本自动发Twitter,详细步骤用树莓派搭建一个Twitter机器人

在这个项目中,详细记录了如何利用Python建立一个基础功能的,低成本的Raspberry Pi Twitter机器人。

Raspberry-Pi-Twitter-Bot-v3-mini-watermarked.jpg

在本篇Twitter机器人教程中,我会向您展示如何用Twython包编写脚本,您会惊讶于它的简洁方便。我还会展示如何使用Twython包及其主要功能。

还有如何让Twitter机器人推送您的Raspberry Pi的CPU温度,或定期拍摄照片并将其上传为推文。

你可以使用你的Raspberry Pi Twitter机器人来自动完成大量不同的任务,这些任务的范围包括每隔一小时发布一张图片到你的Twitter账户,以监测植物的生长,甚至从连接到你的Raspberry Pi的传感器中推送出数值。

设备清单

以下是在这个Raspberry Pi Twitter Bot教程中使用的所有设备清单,点击链接可达特别优惠购买。

建议

可选

注册一个Twitter应用程序

1. 要使用Twitter API,首先要把账户注册成一个Twitter应用。这个API将允许我使用REST接口,我会利用这个API向Twitter发布新的推文,并与网站进行一般的互动。

登录到Twitter账户,进入Twitter的新应用页面,会看到下面的屏幕。

这里你需要关注的三个主要内容是名称、描述和网站,可以将这些设置为你喜欢的内容,因为这不是一个面向用户的应用程序。回调URL可以留空,因为我不需要任何回调。完成后,可以点击 “创建你的Twitter应用程序 “按钮。

01-Twitch-create-an-application.png

2. 在创建了Twitter应用程序后,会被带到下面显示的页面,在这里点击 “密钥和访问令牌 “标签。

02-Twitter-Application-Management.png

3. 在这个屏幕上,复制下消费者密钥(API密钥)和消费者密码(API密码),需要这两个参数来调用Twitter API。

可以忽略Owner和Owner ID,因为不需要这些来与API交互。

复制下这两个不同的值后,点击 “创建我的访问令牌”(2.

03-Twitter-Keys-and-Access-Tokens.png

4. 4. 创建访问令牌后,页面会刷新。向下滚动到页面底部,复制下访问令牌和访问令牌秘密。这些都是设置Raspberry Pi Twitter机器人所需要的参数。

04-Twitter-access-tokens.png

为Raspberry Pi配置和编写Twitter机器人。

1. 有了API令牌,现在可以开始设置和编写Raspberry Pi Twitter机器人了。首先要做的是确保Raspberry Pi是最新的,在它身上运行以下命令。

sudo apt-get update
sudo apt-get upgrade

2. 随着Raspberry Pi的更新,安装需要的工具来设置我们的Raspberry Pi Twitter Bot。我会利用Python包twython来与Twitter的API交互。通过在终端中运行接下来的几个命令来开始安装包。

sudo apt-get install python-setuptools
sudo easy_install pip
sudo pip install twython

3. 最后,可以开始在Raspberry Pi上编写Twitter机器人了。多亏了刚刚安装的Twython包,这一点非常容易做到。首先,建立一个目录,在那里保存脚本,并通过运行以下命令开始编写脚本。

mkdir ~/twitterbot
cd ~/twitterbot
sudo nano TwitterBot.py

4. 现在在这个文件中,写进下面这段代码。这段代码非常简单,在写这段代码之前,我会先解释每段代码的作用,让你了解它的工作原理。

from twython import Twython – 我用它来对 Twitter 进行 API 调用,它简化了很多 Python 脚本。

import sys – 导入用来抓取传递给脚本的系统参数的sys库。

接下来的代码块定义了在教程中写下的各种key,我将这些值传递给Twython。在继续之前,请确保替换CONSUMER_KEY、CONSUMER_SECRET、ACCESS_KEY和ACCESS_SECRET的值。

然后定义变量API,它存储了Twython对象,用access token和customer key创建这个对象。这个对象使得对Twitter的API调用变得简单,因为所有的数据都在那里,随时可以使用。

最后,向 api 对象发出 update_status API 调用。这个调用应该将传递到脚本中的任何文本推送到Twitter账户。

#!/usr/bin/env python
import sys
from twython import Twython

#Define our constant variables, this is all the data we wrote down in the first part of the tutorial.
CONSUMER_KEY = '***************YOUR DATA*****************'
CONSUMER_SECRET = '***************YOUR DATA*****************'
ACCESS_KEY = '***************YOUR DATA*****************'
ACCESS_SECRET = '***************YOUR DATA*****************'

#Create a copy of the Twython object with all our keys and secrets to allow easy commands.
api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET) 

#Using our newly created object, utilize the update_status to send in the text passed in through CMD
api.update_status(status=sys.argv[1])

一旦写完了代码,按Ctrl + X然后按Y,然后按Enter键保存文件。

5. 现在已经写好了Twitter Bot脚本,需要使脚本可执行。

sudo chmod +x TwitterBot.py

6. 现在让通过运行下面的命令来测试Twitter Bot脚本,这将确保正在与Twitter API进行有效的连接。命令运行后,检查你的Twitter账户,看看新的推文。

sudo python TwitterBot.py "This is a test tweet from PiMyLifeUps Twitter bot"

7. 当确认推文成功发送后,就可以开始用Twitter Bot做一些更有趣的事情了,毕竟只是发送一条简单的消息有点无聊。

接下来的两个部分将探讨如何让Twitter机器人发送从网络摄像头拍摄的图像,同时也会向你展示如何让Twitter机器人将Raspberry Pi的CPU温度发送出去。

首先,关我们要探讨抓取CPU的温度,并将其推送出来,如果你对网络摄像头图片发送比较感兴趣,那么你可以跳到更下面的页面。

Raspberry Pi的CPU温度。

1. 从编辑Twitter Bot脚本开始,在Raspberry Pi上运行以下命令。

sudo nano TwitterBot.py

2. 现在已经打开了TwitterBot,可以进行以下修改。

寻找

import sys

替换为

import os

由于不再需要担心参数被传递进来,可以用新的os库替换sys库。os库允许我们与操作系统本身进行交互,在例子中,我将使用它在操作系统上发出一个命令并得到结果。在接下来的大量代码修改中看到这一点。

寻找

api.update_status(status=sys.argv[1])

替换为

cmd = '/opt/vc/bin/vcgencmd measure_temp'
line = os.popen(cmd).readline().strip()
temp = line.split('=')[1].split("'")[0]
api.update_status(status='My current CPU temperature is '+temp+' C')

这段代码的作用是向Raspbian的终端发出一个命令,这个命令调用一个二进制文件来返回Raspberry Pi的温度。然后对这个文件进行处理,抓取正确的值,然后简单地用update_status命令发送一个有我们抓到的值的Tweet。

一旦写完了代码,按Ctrl + X然后按Y,然后按Enter键保存文件。

3. 可以在Raspberry Pi上运行以下命令来测试这段新代码。

python TwitterBot.py

如果你查看你的Twitter帐户,你会注意到你会有一个新的推文,显示你的Raspberry Pi的CPU温度。

做完这些,现在可以跳到自动化Raspberry Pi Twitter机器人部分。

通过树莓派Twitter机器人发布网络摄像头照片

1. 从编辑Twitter Bot脚本开始,在Raspberry Pi上运行以下命令。

sudo nano TwitterBot.py

2. 现在,可以对机器人进行以下修改,使其从附加的视频接口发送图像。

寻找

import sys

替换为

import pygame
import pygame.camera
from pygame.locals import *

用 pygame 替换 sys 库,因为不再需要抓取传递到脚本中的任何变量。Pygame是一个包含了大量Python模块的库,这些模块是为编写游戏而设计的。当然,我并不是在写游戏,但pygame有一个优秀且易于使用的模块,用于利用摄像头,所以我会利用这个模块来配置Raspberry Pi Twitter Bot。

寻找

api.update_status(status=sys.argv[1])

替换为

pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera("/dev/video0",(640,480))
cam.start()
image = cam.get_image()
pygame.image.save(image,'webcam.jpg')

photo = open('webcam.jpg','rb')
api.update_status_with_media(media=photo, status='Test Raspberry Pi Image Bot => ')

首先需要用其他几个调用来替换原来的 update_status 调用。添加的第一个函数是设置和初始化 pygame 库。然后继续启动 pygame 的摄像头模块,并设置好自己,以便让它从接口中读取数据。

然后,将相机对象的副本存储在cam变量中,将其设置为使用/dev/video0接口,并使用640×480的分辨率来拍摄设备中的图片。

一旦完成了这些工作,就可以使用新的对象并启动相机,这就可以从相机上抓取图像,可以在下面的代码行中完成。

现在图像已经保存到Raspberry Pi中,需要做的就是使用open函数将图像读回,然后利用另一个方便的Twython函数。

这个函数是update_status_with_media,它可以让我们发送一条带有图片的微博,非常适合发送刚刚抓拍的网络摄像头照片。

一旦你写完了代码,按Ctrl + X然后按Y,然后按Enter键保存文件。

3. 请注意,如果您使用Raspberry Pi摄像头作为网络摄像头,请确保在运行此脚本之前运行以下命令。这个命令可以让它以/dev/video*接口的形式出现。

sudo modprobe bcm2835-v4l2

4. 可以通过运行以下命令来测试这段新代码。

python TwitterBot.py

完成后,你现在可以跳到我们的自动化Twitter机器人部分。

自动化你的Twitter机器人

1. 如果你必须一直手动运行你的Twitter机器人,那就没什么用了,让你的机器人不断被触发的最好方法之一就是使用Cron Jobs。

你可能想知道为什么我们就是不连续循环运行脚本,好吧,有两个原因,一是不能保证脚本不会在某个时刻挂掉,二是必须不断地循环和检查我们是否应该推送出去,会消耗宝贵的处理周期。

所以现在让我们通过运行以下命令开始编辑crontab。

sudo crontab -e

2. 在这个文件中,你要把下面的一行文字添加到文件底部,基本上这样做就是每隔一小时自动触发一次脚本。

如果你想自己计算出你希望脚本触发的时间,但又不习惯处理Cron Job,你可以尝试使用一个在线工具,比如我们的Crontab生成器。它将提供一个人类可读的cron计划版本。只要用你生成的值替换*/60 * * * *即可。

*/60 * * * * python /home/pi/twitterbot/TwitterBot.py

一旦你写完了代码,按Ctrl + X然后按Y,然后按Enter键保存文件。

现在,你应该也有一个完全运作的基本Twitter机器人,每次cron作业开始时,它都会持续地发出推文。希望我已经解释了足够的代码,你可以很容易地扩展机器人来做更复杂的任务。

如果你喜欢这个树莓派Twitter机器人教程,如果你有任何反馈或遇到任何问题,请在下面留言讨论。

平均: 0 / 5. votes: 0

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » 低成本自动发Twitter,详细步骤用树莓派搭建一个Twitter机器人

赞 (1)

评论

8+4=