2018-07-26 23:44:06 +08:00
|
|
|
学习如何使用 Python 构建你自己的 Twitter 机器人
|
2018-07-26 16:35:39 +08:00
|
|
|
======
|
|
|
|
|
|
|
|
![](https://fedoramagazine.org/wp-content/uploads/2018/07/twitterbot-816x345.jpg)
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
Twitter 允许用户将博客帖子和文章[分享][1]给全世界。使用 Python 和 Tweepy 库使得创建一个 Twitter 机器人来接管你的所有的推特变得非常简单。这篇文章告诉你如何去构建这样一个机器人。希望你能将这些概念也同样应用到其他的在线服务的项目中去。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
### 开始
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
[tweepy][2] 库可以让创建一个 Twitter 机器人的过程更加容易上手。它包含了 Twitter 的 API 调用和一个很简单的接口。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
下面这些命令使用 `pipenv` 在一个虚拟环境中安装 tweepy。如果你没有安装 `pipenv`,可以看一看我们之前的文章[如何在 Fedora 上安装 Pipenv][3]。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
```
|
|
|
|
$ mkdir twitterbot
|
|
|
|
$ cd twitterbot
|
|
|
|
$ pipenv --three
|
|
|
|
$ pipenv install tweepy
|
|
|
|
$ pipenv shell
|
|
|
|
```
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
### Tweepy —— 开始
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
要使用 Twitter API ,机器人需要通过 Twitter 的授权。为了解决这个问题, tweepy 使用了 OAuth 授权标准。你可以通过在 <https://apps.twitter.com/> 创建一个新的应用来获取到凭证。
|
|
|
|
|
|
|
|
|
|
|
|
#### 创建一个新的 Twitter 应用
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
当你填完了表格并点击了“<ruby>创建你自己的 Twitter 应用<rt>Create your Twitter application</rt></ruby>”的按钮后,你可以获取到该应用的凭证。 Tweepy 需要<ruby>用户密钥<rt>API Key</rt></ruby>和<ruby>用户密码<rt>API Secret</rt></ruby>,这些都可以在 “<ruby>密钥和访问令牌<rt>Keys and Access Tokens</rt></ruby>” 中找到。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
![][4]
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
向下滚动页面,使用“<ruby>创建我的访问令牌<rt>Create my access token</rt></ruby>”按钮生成一个“<ruby>访问令牌<rt>Access Token</rt></ruby>” 和一个“<ruby>访问令牌密钥<rt>Access Token Secret</rt></ruby>”。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
#### 使用 Tweppy —— 输出你的时间线
|
|
|
|
|
|
|
|
现在你已经有了所需的凭证了,打开一个文件,并写下如下的 Python 代码。
|
2018-07-26 23:44:06 +08:00
|
|
|
|
2018-07-26 16:35:39 +08:00
|
|
|
```
|
|
|
|
import tweepy
|
|
|
|
auth = tweepy.OAuthHandler("your_consumer_key", "your_consumer_key_secret")
|
|
|
|
auth.set_access_token("your_access_token", "your_access_token_secret")
|
|
|
|
api = tweepy.API(auth)
|
|
|
|
public_tweets = api.home_timeline()
|
|
|
|
for tweet in public_tweets:
|
2018-07-26 23:44:06 +08:00
|
|
|
print(tweet.text)
|
2018-07-26 16:35:39 +08:00
|
|
|
```
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
在确保你正在使用你的 Pipenv 虚拟环境后,执行你的程序。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
```
|
|
|
|
$ python tweet.py
|
|
|
|
```
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
上述程序调用了 `home_timeline` 方法来获取到你时间线中的 20 条最近的推特。现在这个机器人能够使用 tweepy 来获取到 Twitter 的数据,接下来尝试修改代码来发送 tweet。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
#### 使用 Tweepy —— 发送一条推特
|
2018-07-26 16:35:39 +08:00
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
要发送一条推特 ,有一个容易上手的 API 方法 `update_status` 。它的用法很简单:
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
```
|
|
|
|
api.update_status("The awesome text you would like to tweet")
|
|
|
|
```
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
Tweepy 拓展为制作 Twitter 机器人准备了非常多不同有用的方法。要获取 API 的详细信息,请查看[文档][5]。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
|
|
|
|
### 一个杂志机器人
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
接下来我们来创建一个搜索 Fedora Magazine 的推特并转推这些的机器人。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
为了避免多次转推相同的内容,这个机器人存放了最近一条转推的推特的 ID 。 两个助手函数 `store_last_id` 和 `get_last_id` 将会帮助存储和保存这个 ID。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
然后,机器人使用 tweepy 搜索 API 来查找 Fedora Magazine 的最近的推特并存储这个 ID。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
```
|
|
|
|
import tweepy
|
|
|
|
|
|
|
|
def store_last_id(tweet_id):
|
2018-07-26 23:44:06 +08:00
|
|
|
""" Stores a tweet id in text file """
|
|
|
|
with open('lastid', 'w') as fp:
|
|
|
|
fp.write(str(tweet_id))
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
|
|
|
|
def get_last_id():
|
2018-07-26 23:44:06 +08:00
|
|
|
""" Retrieve the list of tweets that were
|
|
|
|
already retweeted """
|
2018-07-26 16:35:39 +08:00
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
with open('lastid') as fp:
|
|
|
|
return fp.read()
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
auth = tweepy.OAuthHandler("your_consumer_key", "your_consumer_key_secret")
|
|
|
|
auth.set_access_token("your_access_token", "your_access_token_secret")
|
2018-07-26 16:35:39 +08:00
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
api = tweepy.API(auth)
|
2018-07-26 16:35:39 +08:00
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
try:
|
|
|
|
last_id = get_last_id()
|
|
|
|
except FileNotFoundError:
|
|
|
|
print("No retweet yet")
|
|
|
|
last_id = None
|
2018-07-26 16:35:39 +08:00
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
for tweet in tweepy.Cursor(api.search, q="fedoramagazine.org", since_id=last_id).items():
|
|
|
|
if tweet.user.name == 'Fedora Project':
|
|
|
|
store_last_id(tweet.id)
|
|
|
|
#tweet.retweet()
|
|
|
|
print(f'"{tweet.text}" was retweeted')
|
2018-07-26 16:35:39 +08:00
|
|
|
```
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
为了只转推 Fedora Magazine 的推特 ,机器人搜索内容包含 fedoramagazine.org 和由 「Fedora Project」 Twitter 账户发布的推特。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
### 结论
|
|
|
|
|
2018-07-26 23:44:06 +08:00
|
|
|
在这篇文章中你看到了如何使用 tweepy 的 Python 库来创建一个自动阅读、发送和搜索推特的 Twitter 应用。现在,你能使用你自己的创造力来创造一个你自己的 Twitter 机器人。
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
这篇文章的演示源码可以在 [Github][6] 找到。
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
via: https://fedoramagazine.org/learn-build-twitter-bot-python/
|
|
|
|
|
|
|
|
作者:[Clément Verna][a]
|
|
|
|
选题:[lujun9972](https://github.com/lujun9972)
|
|
|
|
译者:[Bestony](https://github.com/bestony)
|
2018-07-26 23:44:06 +08:00
|
|
|
校对:[wxy](https://github.com/wxy)
|
2018-07-26 16:35:39 +08:00
|
|
|
|
|
|
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
|
|
|
|
|
|
|
[a]:https://fedoramagazine.org
|
|
|
|
[1]:https://twitter.com
|
|
|
|
[2]:https://tweepy.readthedocs.io/en/v3.5.0/
|
2018-07-26 23:44:06 +08:00
|
|
|
[3]:https://linux.cn/article-9827-1.html
|
2018-07-26 16:35:39 +08:00
|
|
|
[4]:https://fedoramagazine.org/wp-content/uploads/2018/07/Screenshot-from-2018-07-19-20-17-17.png
|
|
|
|
[5]:http://docs.tweepy.org/en/v3.5.0/api.html#id1
|
|
|
|
[6]:https://github.com/cverna/magabot
|