Twitter是一个社交网络与微博客服务,它可以让用户更新消息,这些消息也被称作“推文”。这个服务是由杰克·多西在2006年3月创办并在当年7月启动的。Twitter风行于全世界多个国家,是互联网上访问量最大的十个网站之一。
使用Python 编写Twitter机器人非常简单,而Raspberry Pi是运行代码的理想工具,它可以24/7全天候运行而花费最少的电力。
申请Twitter API
Twitter提供应用程序编程接口(API)的Web服务,这意味着您可以编写与实时Twitter服务通信的软件,以实时读取tweet或自动发布tweet。Twitter API是免费的,但您必须拥有一个Twitter帐户并注册您的应用程序才能访问该API。申请Twitter API过程比较严格——
- 登录Twitter API
- Create an app
- Making a bot - I want to make a Twitter account that will Tweet and/or reply programmatically.
- How will you use the Twitter API or Twitter data? - 如何使用Twitter API或Twitter数据,将非常关键。
- ……
- 最后提交审核
接下来会收到并回复一封验证申请的电子邮件,以及一封Twitter接受开发者帐户申请的通知邮件。
获得Twitter API的四个密钥
创建新应用,并确保在应用权限下选择“读取”和“写入”,这将生成Consumer key、Consumer secret、Access token和Access token secret。请勿与任何人共享这些密钥,因为无需帐户密码即可使用它们。
测试Twitter机器人发推
要从Python访问Twitter API,您需要安装Twython库。在终端窗口中使用pip安装此程序:
sudo pip3 install twython
打开您的Python编辑器并创建一个新文件,将其另存为auth.py并将自己的API密钥插入此示例代码中:
# auth.py
consumer_key = 'ABCDEFGHIJKLKMNOPQRSTUVWXYZ'
consumer_secret = '1234567890ABCDEFGHIJKLMNOPQRSTUVXYZ'
access_token = 'ZYXWVUTSRQPONMLKJIHFEDCBA'
access_token_secret = '0987654321ZYXWVUTSRQPONMLKJIHFEDCBA'
在另一个文件twitterbot.py中,编写以下简单程序以测试是否可以发送推文:
# twitterbot.py
from twython import Twython
from auth import (
consumer_key,
consumer_secret,
access_token,
access_token_secret
)
twitter = Twython(
consumer_key,
consumer_secret,
access_token,
access_token_secret
)
message = "Hello world!"
twitter.update_status(status=message)
print("Tweeted: {}".format(message))
保存并运行此文件。它应该发送一条推文“ Hello world!” 。
选择预设的一条随机消息发推的twitterbot.py代码:
# twitterbot.py
from twython import Twython
import random
from auth import (
consumer_key,
consumer_secret,
access_token,
access_token_secret
)
twitter = Twython(
consumer_key,
consumer_secret,
access_token,
access_token_secret
)
messages = [
"Hi Twitter",
"Hello from Python",
"Hello from my Raspberry Pi",
"I'm a bot",
]
message = random.choice(messages)
twitter.update_status(status=message)
print("Tweeted: {}".format(message))
在Twitter上发布图片,以下是twitterbot.py的message部分:
message = "Hello world - here's a picture!"
with open('/home/pi/Downloads/image.jpg', 'rb') as photo:
twitter.update_status_with_media(status=message, media=photo)
阅读推特
使用TwythonStreamer类阅读推文:
from twython import TwythonStreamer
from auth import (
consumer_key,
consumer_secret,
access_token,
access_token_secret
)
class MyStreamer(TwythonStreamer):
def on_success(self, data):
if 'text' in data:
print(data['text'])
stream = MyStreamer(
consumer_key,
consumer_secret,
access_token,
access_token_secret
)
stream.statuses.filter(track='raspberry pi')
此代码跟踪所有包含短语“raspberry pi”的推文,并打印推文内容。
相关代码更忙为以下部分,将打印出发布信息的用户名以及推文内容:
class MyStreamer(TwythonStreamer):
def on_success(self, data):
if 'text' in data:
username = data['user']['screen_name']
tweet = data['text']
print("@{}: {}".format(username, tweet))
Twitter API与Raspberry Pi物理组件的互动
按下物理按钮时发送随机推文:
from gpiozero import Button
button = Button(2)
button.wait_for_press()
message = "Hello world!"
twitter.update_status(status=message)
print("Tweeted: {}".format(message))
发布Sense HAT的温度读数:
from sense_hat import SenseHat
sense = SenseHat()
message = "The temperature is currently {:2.2f}
degrees".format(sense.temperature)
twitter.update_status(status=message)
当一条推文与搜索匹配时点亮一个LED:
from gpiozero import LED
led = LED(3)
class MyStreamer(TwythonStreamer):
def on_success(self, data):
if 'text' in data:
led.on()
username = data['user']['screen_name']
tweet = data['text']
print("@{}: {}".format(username, tweet))
sleep(10)
led.off()
在Sense HAT显示屏上滚动推文:
from sense_hat import SenseHat
sense = SenseHat()
class MyStreamer(TwythonStreamer):
def on_success(self, data):
if 'text' in data:
username = data['user']['screen_name']
tweet = data['text']
sense.show_message("@{}: {}".format(username, tweet))
更多示例
笑话机器人,更多用法在pyjokes网站。
import pyjokes
joke = pyjokes.get_joke()
twitter.update_status(status=joke)
“历史上的今天”博客文章回顾:发布年份、标题和链接。
date = datetime.now().date()
month = date.month
day = date.day
posts = db.get_posts_on_date(month=month, day=day)
post = random.choice(posts)
year = int(post['year'])
title = html.unescape(post['title'])
slug = post['slug']
url = 'https://www.raspberrypi.org/blog/{}'.format(slug)
tweet = "On this day in {}: {} {}".format(year, title, url)
print('Tweeting: {}'.format(tweet))
twitter.update_status(status=tweet)
via - Make your own Twitter bot with Python and Raspberry Pi。有关Twitter API的更多信息,请参见Raspberry Pi关于Twitter API的学习指南。
👍
楼主残忍的关闭了评论