如何构建Raspberry Pi Twitter Bot

Twitter是世界上最大的短消息存储库,无话可说-现在,您也可以使用由Raspberry Pi驱动的自动Twitter机器人为该史诗项目做出贡献。我当然是在开玩笑-有些人实际上在发推文。我不是其中的一员–我将自己的矿山用于无耻的产品促销,以换取免费的东西,参赛作品和自动发布我们自己的Technophilia播客的新剧集。无论如何–我的追随者都爱我!

—贾斯汀·波特(@jhpot)2013年8月21日

现在,我将通过添加一个Twitter来增加我的个人Twitter流的实用性Raspberry Pi每小时会自动发一条鸣叫它当前的CPU温度和一个摄像头图片!

入门

该项目使用Python;一种简单的编程语言,非常适合DIY项目。首先,在Pi上安装Twython –一个与Twitter交互的Python模块;设置Twitter“应用程序"以获取API密钥;然后代表我们制作Pi推文。

我将在Raspian上执行此操作-但从理论上讲,它应该可以在Pi上使用的任何基于Linux的操作系统上运行。如果尚未安装SSH,请确保已设置SSH,以便我们可以远程登录并执行控制台命令。

安装Twython

最好先运行更新。一次复制并粘贴以下命令-大多数都需要确认。

sudo apt-get updatesudo apt-get upgradesudo apt-get install python-setuptoolssudo easy_install pipsudo pip install twython

注册Twitter应用

要使用Twitter API,即REST接口我们将用于发布新的推文,并通常在Twitter网站外部与Twitter进行互动-我们需要注册一个新应用。通过此链接执行此操作–您无需指定回调URL,也可以根据需要组成一个网站。

完成后,您将看到类似于此的内容–这些键是唯一的

默认情况下,该应用程序设置为只读,因此如果不将其更改为读写" ,我们将无法发布。转到“设置"标签,并更改应用程序类型

保存后,返回到详细信息标签,然后点击底部的按钮创建OAuth访问令牌 –这使您的应用程序可以访问自己的Twitter帐户。刷新,并保持页面打开状态以备后用–我们需要在一分钟内复制粘贴其中的一些键。

创建Python项目

首先创建一个新目录来存放您的Tweet项目,然后创建一个新文件。

mkdir SillyTweetercd SillyTweetersudo nano SillyTweeter.py

您显然可以随意命名。

在出现的文本编辑器中,复制并粘贴以下内容,用我们之前打开的Twitter应用程序页面中的相关密钥替换使用者密钥。每个键都用单引号引起来,因此请确保不要错过这些引号。请注意, ACCESS_KEY 在Twitter应用程序页面上称为访问令牌

#!/usr/bin/env pythonimport sysfrom twython import TwythonCONSUMER_KEY = '***************YOUR DATA*****************'CONSUMER_SECRET = '***************YOUR DATA*****************'ACCESS_KEY = '***************YOUR DATA*****************'ACCESS_SECRET = '***************YOUR DATA*****************'api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET) api.update_status(status=sys.argv[1])

按Ctrl-X,然后按Y退出并保存文件。使用以下命令将其设置为可执行文件(如果选择其他命令,则替换您的Python文件名)

sudo chmod +x SillyTweeter.py

您现在应该能够测试像这样发布tweet的能力:

python SillyTweeter.py 'Hello Everyone, this is my Raspberry Pi tweeting you more nonsense'

鸣叫您的CPU温度

现在您可以发布任何废话了,让我们调整应用程序以获取当前的CPU温度,因为如果世界不需要知道每个

首先为os库添加另一个导入:

import os

然后添加以下几行,以替换上面示例中的先前api.update_status。

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')

我不会过多地解释此代码,因为它并不重要–它运行一个获取温度的命令,然后拆分输出以提取数字,并使用自定义消息推文。您可以在此处找到完整的示例代码。

发推网络摄像头图片

现在,让我们做一些真正有用的事情吧;我们将发布网络摄像头照片。值得庆幸的是,Twython支持API函数update_status_with_media,这使事情变得非常简单。

将USB网络摄像头插入设备并检查是否可以通过以下命令识别它:

ls /dev/video*

video0 ,您很幸运。我使用了Playstation 3 PSEye凸轮,它工作得很好,没有任何其他麻烦。

我们还将使用 pygame 库拍摄照片;在现有的import语句之后添加以下行:

import pygameimport pygame.camerafrom pygame.locals import *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')

简而言之,您已经以特定的分辨率初始化了摄像头(您可能需要调整它,因为它是一个非常老的摄像头),拍摄了一张照片,并将其另存为jpg。

最后,将update_status行调整为以下内容:

photo = open('webcam.jpg','rb')api.update_status_with_media(media=photo, status='My RPi be tweeting images now => ')

当然,您可以更改如果愿意,请再次将状态文本恢复为当前的CPU温度。此示例的完整代码在这里。

您可以重复吗?

Twitter机器人仅在自动运行多次时才有用。您不想每小时都坐在那里运行命令。为此,让我们使用Pi的CRON调度功能(什么是CRON作业?)

sudo crontab -e

此行中的粘贴,每小时运行一次。

*/60 * * * * python /home/pi/SillyTweeter/SillyTweeter.py

将其更改为 * * * * * ,如果您希望它每分钟运行一次,并准备好比快速失去关注者的Twitter帐户更快地失去关注者。

今天。我很高兴为互联网上的大量无用字节贡献了更多的愚蠢,希望您也能这样做!通过发布表示对本教程的赞赏,然后在评论中告诉我们您自己的Twitter机器人将发布哪些内容。

图片来源:adafruit / flickr

标签: Raspberry Pi Twitter