Twitter是一个社交网络与微博客服务,它可以让用户更新消息,这些消息也被称作“推文”。这个服务是由杰克·多西在2006年3月创办并在当年7月启动的。Twitter风行于全世界多个国家,是互联网上访问量最大的十个网站之一。

maxresdefault (2).jpg

使用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数据,将非常关键。
  • ……
  • 最后提交审核

20191221172636.png

接下来会收到并回复一封验证申请的电子邮件,以及一封Twitter接受开发者帐户申请的通知邮件。

20191221174402.png

获得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的学习指南


本文由 CulmartPlay 整理发布,参考 CC-BY-SA 3.0 协议共享,欢迎转载、引用或改编。
感谢您的支持,以让我们持续关注中国学子的STEAM旅程!

还不快抢沙发

添加新评论