博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Python和Raspberry Pi制作自己的Twitter机器人
阅读量:2526 次
发布时间:2019-05-11

本文共 9191 字,大约阅读时间需要 30 分钟。

Twitter是一个很棒的交流和社交媒体平台。 它拥有一切:突发新闻,政治见解,幽默,名人,娱乐,特殊兴趣聊天等等。 个人,公司,部门,项目等(实际上是任何人或任何东西)都可以拥有Twitter帐户。 某些Twitter帐户甚至不是由一个人或一群人手动运行的,它们是自动机器人。

使用Python编写非常简单,而Raspberry Pi是运行代码的理想工具。 而不是让PC或笔记本电脑永久打开,您可以使Raspberry Pi以24/7的速度运行,几乎不使用任何电源。 就是说,如果您没有Raspberry Pi,则本教程中的大部分内容仍然可以在PC上使用。

Twitter API入门

Twitter是提供应用程序编程接口(API)的Web服务,这意味着您可以编写与实时Twitter服务通信的软件-可能实时读取tweet或自动发布tweet。

该API是免费的,但是您必须拥有一个Twitter帐户并注册您的应用程序才能访问该API,但这很容易。

首先转到 。 通过填写必填字段来创建新应用-确保在应用权限下选择“ 读取”和“写入 ”。 这将生成使用者密钥使用者密钥访问令牌访问令牌密钥 。 您需要这四个键才能从Python代码连接到您的Twitter帐户。 请勿与任何人共享这些密钥,因为无需帐户密码即可使用它们。 如果您在线共享代码,请确保不包括这些密钥

Creating a Twitter app

要从Python访问Twitter API,您需要安装库。 在终端窗口中使用安装此程序:

sudo pip3 install twython

打开您的Python编辑器并创建一个新文件。 将其另存为auth.py并将您自己的API密钥插入此示例代码中:

consumer_key             
=
'ABCDEFGHIJKLKMNOPQRSTUVWXYZ'
consumer_secret    
=
'1234567890ABCDEFGHIJKLMNOPQRSTUVXYZ'
access_token        
=
'ZYXWVUTSRQPONMLKJIHFEDCBA'
access_token_secret
=
'0987654321ZYXWVUTSRQPONMLKJIHFEDCBA'

在另一个文件中,编写以下简单程序以测试是否可以发送推文:

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!” 从您的帐户。

A Hello world tweet

如果出现错误,请检查API密钥是否正确复制。

现在尝试为您的程序添加一些随机性。 在顶部添加随机模块:

import random

添加消息列表,然后随机选择一个:

messages      
=
[
       
"Hi Twitter"
,
       
"Hello from Python"
,
       
"Hello from my Raspberry Pi"
,
       
"I'm a bot"
,
]

然后更改您的代码以在发推文之前从列表中选择一条随机消息:

message = random . choice ( messages )

您可能还想尝试在Twitter上发布图片:

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
)

阅读推特

除了使用Python发送推文外,您还可以使用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”的推文。 当找到推文时,它将有关该推文的数据集合发送到on_success方法中。 数据是包含推文和大量元数据的字典。 在这里,我们只打印了推文内容。 您可以使其保持运行状态,并且每当有一条新的推文与搜索匹配时,它将运行on_success方法。 这可以是单词,短语或主题标签。

此示例将打印出发布的帐户的用户名以及推文内容:

class MyStreamer      
( TwythonStreamer
) :
   
def on_success
(
self
, data
) :
       
if
'text'
in data:
            username
= data
[
'user'
]
[
'screen_name'
]
            tweet
= data
[
'text'
]
           
print
(
"@{}: {}" .
format
( username
, tweet
)
)

有关更多信息,请参见Raspberry Pi关于的学习指南。

如果您希望Twitter机器人代码以24/7运行,您可以将其安装在Web服务器上,也可以在家里的Raspberry Pi上运行,甚至可以使用 。

物理组成

Adding physical components to a Twitter program

使用Raspberry Pi,您可以轻松地将物理组件(例如按钮和LED)添加到Twitter程序中。 例如,您可以将其设置为在按下物理按钮时发送随机推文:

from gpiozero      
import Button
button
= Button
(
2
)
button.
wait_for_press
(
)
message
=
"Hello world!"
twitter.
update_status
( status
= message
)
print
(
"Tweeted: {}" .
format
( message
)
)

或鸣叫的温度读数:

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

或在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
)
)

有关使用Raspberry Pi进行物理计算的更多信息,请参阅有关以及 文章。 您还可以通过遵循Raspberry Pi学习资源上的教程,制作一个Twitter Raspberry Pi相机项目。

真正的Twitter机器人

不久前,我创建了一个名为pyjokes的Twitter机器人,从我维护的Python模块中发布了令人讨厌的笑话。 该代码非常简单:

import pyjokes     
joke
= pyjokes.
get_joke
(
)
twitter.
update_status
( status
= joke
)

我只是使用安排任务运行。

跟随获得有趣的 。 你可以阅读更多关于该项目的网站pyjokes ,你可以看到代码为Twitter的僵尸 。

我最近制作了另一个Twitter机器人, 机器人在推特上发布了“ ”链接到Raspberry Pi Foundation博客前几年内容的链接。

Raspberry Pi on this day twitter feed

它稍微复杂一点,因为它维护着所有历史博客文章的(单表)数据库,但是bot代码非常简单。 它只是在数据库中查询日期与当前日期的月份和日期相匹配的所有帖子,随机选择一个,然后发布年份,标题和链接:

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
)

您可以按照此提要并查看该机器人的代码。

翻译自:

转载地址:http://bwdzd.baihongyu.com/

你可能感兴趣的文章
MongoDB 最大连接数 设置失效的异常分析
查看>>
Android 开发BottomNavigationView学习
查看>>
unix-poll
查看>>
anaconda+youcompleteme
查看>>
HLS: High-Level Synthesis Operators
查看>>
消息队列Rabbit安装
查看>>
Android应用程序在某些机型上启动有几率一直黑屏
查看>>
读《大道至简》有感
查看>>
在 EF 中只对 日期(不包括时间)进行比较的方法
查看>>
C#关于等待窗体(转)
查看>>
CockroachDB学习笔记——[译]Cgo的成本与复杂性
查看>>
JS数组经典冒泡排序
查看>>
【leetcode】Trapping Rain Water(hard)
查看>>
关键字 static
查看>>
11. Container With Most Water
查看>>
别人抢红包,我们研究一下红包算法
查看>>
泛型的一些问题
查看>>
PHP与正则表达式 2 :一些修饰符与preg_match_all
查看>>
45个纯 CSS 实现的精美边框效果【附演示和源码】【上篇】
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>