學習如何使用Python構(gòu)建你自己的Twitter機器人
Twitter 允許用戶將博客帖子和文章分享給全世界。使用 Python 和 Tweepy 庫使得創(chuàng)建一個 Twitter 機器人來接管你的所有的推特變得非常簡單。這篇文章告訴你如何去構(gòu)建這樣一個機器人。希望你能將這些概念也同樣應用到其他的在線服務(wù)的項目中去。
開始
tweepy 庫可以讓創(chuàng)建一個 Twitter 機器人的過程更加容易上手。它包含了 Twitter 的 API 調(diào)用和一個很簡單的接口。
下面這些命令使用 pipenv
在一個虛擬環(huán)境中安裝 tweepy。如果你沒有安裝 pipenv
,可以看一看我們之前的文章如何在 Fedora 上安裝 Pipenv。
$ mkdir twitterbot
$ cd twitterbot
$ pipenv --three
$ pipenv install tweepy
$ pipenv shell
Tweepy —— 開始
要使用 Twitter API ,機器人需要通過 Twitter 的授權(quán)。為了解決這個問題, tweepy 使用了 OAuth 授權(quán)標準。你可以通過在 https://apps.twitter.com/ 創(chuàng)建一個新的應用來獲取到憑證。
創(chuàng)建一個新的 Twitter 應用
當你填完了表格并點擊了“創(chuàng)建你自己的 Twitter 應用”的按鈕后,你可以獲取到該應用的憑證。 Tweepy 需要用戶密鑰和用戶密碼,這些都可以在 “密鑰和訪問令牌” 中找到。
向下滾動頁面,使用“創(chuàng)建我的訪問令牌”按鈕生成一個“訪問令牌” 和一個“訪問令牌密鑰”。
使用 Tweppy —— 輸出你的時間線
現(xiàn)在你已經(jīng)有了所需的憑證了,打開一個文件,并寫下如下的 Python 代碼。
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:
print(tweet.text)
在確保你正在使用你的 Pipenv 虛擬環(huán)境后,執(zhí)行你的程序。
$ python tweet.py
上述程序調(diào)用了 home_timeline
方法來獲取到你時間線中的 20 條最近的推特。現(xiàn)在這個機器人能夠使用 tweepy 來獲取到 Twitter 的數(shù)據(jù),接下來嘗試修改代碼來發(fā)送 tweet。
使用 Tweepy —— 發(fā)送一條推特
要發(fā)送一條推特 ,有一個容易上手的 API 方法 update_status
。它的用法很簡單:
api.update_status("The awesome text you would like to tweet")
Tweepy 拓展為制作 Twitter 機器人準備了非常多不同有用的方法。要獲取 API 的詳細信息,請查看文檔。
一個雜志機器人
接下來我們來創(chuàng)建一個搜索 Fedora Magazine 的推特并轉(zhuǎn)推這些的機器人。
為了避免多次轉(zhuǎn)推相同的內(nèi)容,這個機器人存放了最近一條轉(zhuǎn)推的推特的 ID 。 兩個助手函數(shù) store_last_id
和 get_last_id
將會幫助存儲和保存這個 ID。
然后,機器人使用 tweepy 搜索 API 來查找 Fedora Magazine 的最近的推特并存儲這個 ID。
import tweepy
def store_last_id(tweet_id):
""" Stores a tweet id in text file """
with open('lastid', 'w') as fp:
fp.write(str(tweet_id))
def get_last_id():
""" Retrieve the list of tweets that were
already retweeted """
with open('lastid') as fp:
return fp.read()
if __name__ == '__main__':
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)
try:
last_id = get_last_id()
except FileNotFoundError:
print("No retweet yet")
last_id = None
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')
為了只轉(zhuǎn)推 Fedora Magazine 的推特 ,機器人搜索內(nèi)容包含 fedoramagazine.org 和由 「Fedora Project」 Twitter 賬戶發(fā)布的推特。
結(jié)論
在這篇文章中你看到了如何使用 tweepy 的 Python 庫來創(chuàng)建一個自動閱讀、發(fā)送和搜索推特的 Twitter 應用?,F(xiàn)在,你能使用你自己的創(chuàng)造力來創(chuàng)造一個你自己的 Twitter 機器人。
這篇文章的演示源碼可以在 Github 找到。