這篇文章來(lái)源于DevicePlus.com英語(yǔ)網(wǎng)站的翻譯稿。 
原文最初由deviceplus.jp.發(fā)布,本文為英譯版。
歡迎來(lái)到通過(guò)“Twython”在Raspberry Pi上發(fā)推文的第2部分。
和上次一樣,我們將遵循Raspberry Pi 官方網(wǎng)站文檔中的內(nèi)容來(lái)完成本項(xiàng)目。本次,我們將介紹如何發(fā)布包含隨機(jī)字符串的推文,包含圖片的推文以及與如何實(shí)現(xiàn)流式API的連接。
本文中,我們將使用2017年11月29日發(fā)布的“Raspbian Stretch with desktop”操作系統(tǒng)和“Raspberry Pi2Model B”。
有關(guān)第1部分的內(nèi)容,請(qǐng)查看→“通過(guò)Twython在Raspberry Pi上發(fā)推文?。ǖ?部分)”
發(fā)布隨機(jī)推文
第七頁(yè)中的“隨機(jī)發(fā)布推文信息”功能使用了Python 中的“random”模塊,并使用了一個(gè)用于發(fā)布隨機(jī)信息的程序。
01 import random 02 03 from twython import Twython 04 05 from auth import ( 06 07 consumer_key, 08 consumer_secret, 09 access_token, 10 access_token_secret 11 ) 12 13 14 twitter = Twython( 15 consumer_key, 16 consumer_secret, 17 access_token, 18 access_token_secret 19 20 ) 21 22 23 24 messages = [ 25 "Hello world", 26 "Hi there", 27 "What's up?", 28 "How's it going?", "Have you been here before?", "Get a hair cut!", ] message = random.choice(messages) twitter.update_status(status=message) print("Tweeted: %s" % message)
然后我們將文件以“random_tweet.py”的名稱保存在“/home/pi”目錄中。
第3行中名為“auth”的模塊就是我們上次所創(chuàng)建的“auth.py”。該模塊將“消費(fèi)者密鑰(API密鑰)”、“消費(fèi)者秘密(API秘密)”、“訪問(wèn)令牌”和“訪問(wèn)令牌秘密”都放置在了一起。接下來(lái),我們把該模塊放入和“random_tweet.py”相同的路徑中。
auth.py
01 consumer_key = 'ABCDEFGHIJKLKMNOPQRSTUVWXYZ' 02 consumer_secret = '1234567890ABCDEFGHIJKLMNOPQRSTUVXYZ' 03 access_token = 'ZYXWVUTSRQPONMLKJIHFEDCBA' 04 access_token_secret = '0987654321ZYXWVUTSRQPONMLKJIHFEDCBA'
*將每個(gè)值替換為您在Twitter Apps上獲取的值。
第2-15行和我們?cè)谏弦黄恼履┪矂?chuàng)建的Twitter發(fā)布程序(twitter.py)相同。
將“import random”添加到第一行,以能夠使用隨機(jī)數(shù)。在第17-24行,我們以數(shù)組的形式存儲(chǔ)了六個(gè)信息,接下來(lái)我們?cè)诘?5行中選擇其中的一個(gè)信息。
圖 1
輸出內(nèi)容為“How’s it going?”。這是存儲(chǔ)在“messages”變量(數(shù)組)中的第四個(gè)字符串。
圖 2
通過(guò)查看實(shí)際發(fā)布的推文,我們可以確認(rèn)發(fā)布的內(nèi)容為“How’s it going?”。雖然這是隨機(jī)發(fā)布的,但是如果重復(fù)發(fā)布相同的字符串,Twitter就會(huì)報(bào)錯(cuò)。出現(xiàn)這種情況時(shí),請(qǐng)隔一會(huì)再發(fā)布推文,并且盡量不要發(fā)布相同的字符串(例如,包含相同的時(shí)間或字符串)。這樣一來(lái)應(yīng)該能夠解決該問(wèn)題。
發(fā)布包含圖片的推文!
在開(kāi)始一個(gè)新的程序之前,我們先準(zhǔn)備好一張圖片。這次,我們將需要對(duì)文檔進(jìn)行調(diào)整,并將圖像文件“image.png”存儲(chǔ)到“ /home/pi/Downloads/ ”目錄中。
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 - here's a picture!"
with open('/home/pi/Downloads/raspberry.png', 'rb') as photo: twitter.update_status_with_media(status=message, media=photo)
print("Tweeted: %s" % message)
第17-18行需要將“update_status”改為“update_status_with_media”。
圖 3
上圖顯示的是運(yùn)行的結(jié)果。不知道為什么,出現(xiàn)了一些警告信息。
查看一下警告內(nèi)容,其中顯示當(dāng)前不建議使用“update_status_with_media”函數(shù)。
圖 4
雖然不推薦,但是看起來(lái)這并不影響我們成功發(fā)布推文。不過(guò)我們對(duì)于發(fā)生的狀況產(chǎn)生了一些興趣。查看Twython 官方網(wǎng)站手冊(cè)之后,我們重新寫(xiě)了程序!
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 - here's a picture!"
photo = open('/home/pi/Downloads/raspberry.png','rb')
response = twitter.upload_media(media=photo)
twitter.update_status(status=message,
media_ids=[response['media_id']]
print("Tweeted: %s" % message)
查看手冊(cè)中“Updating Status with Image”(使用圖片更新?tīng)顟B(tài))部分后,我們更改了發(fā)布推文的有關(guān)內(nèi)容。
我們?cè)凇皍pdate_status”函數(shù)中添加了圖像的參數(shù)后,成功發(fā)布了推文,并且沒(méi)有產(chǎn)生任何錯(cuò)誤?。ㄍ莆呐c圖4相同)。
實(shí)時(shí)推特操作!
我們將要介紹的最后一項(xiàng)內(nèi)容是第九頁(yè)中的“測(cè)試Twython Streamer”!
這次我們要做的是“獲取”已經(jīng)發(fā)布的推文,而非“發(fā)布”推文。
查看文檔中的示例后,我們進(jìn)行了一定程度的修改,程序源如下所示:
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:
username = data['user']['screen_name']
tweet = data['text']
date = data['created_at']
print("%s @%s: %s" % (date,username, tweet))
print("----------")
stream = MyStreamer(
consumer_key,
consumer_secret,
access_token,
access_token_secret
stream.statuses.filter(track='#raspberrypi')
首先,第1行的導(dǎo)入模塊部分發(fā)生了變化。之前,所有的示例程序都在“Twython”類下,但本步更改為“TwythonStreamer”。
Streaming message (流式信息) 類型 — Twitter 開(kāi)發(fā)者
“TwythonStreamer” 是一種用于Twitter中流式API的類。
Streaming message (流式信息)類型 — Twitter 開(kāi)發(fā)者
在第9-16行,聲明了名為“MyStreamer”的類。這用于在找到推文時(shí)指定操作。
在上述程序源中,除了推文的正文外,日期、賬戶名稱和分隔線都是在輸出內(nèi)容中自定義的。
在第18-24行,我為新的“MyStreamer”類創(chuàng)建了一個(gè)實(shí)例,并開(kāi)始追蹤包含“# raspberrypi”的推文。
圖 5
如果您找到了推文,輸出將如上所示。在您停止該程序之前,它會(huì)繼續(xù)獲取該類型的推文(該程序似乎不區(qū)分大小寫(xiě))。
尋找包含“#raspberrypi”的推文
接下來(lái)讓我們?cè)L問(wèn)Twitter并查看搜索結(jié)果。
您會(huì)得到部分的時(shí)間日志,不過(guò)我想從中可以大致證明這些信息是實(shí)時(shí)獲取的。
總結(jié)
至此,我們結(jié)束了介紹如何使用“Twython”的第2部分。您現(xiàn)在可以更加輕松地在Twitter上發(fā)布和搜索推文了!
我認(rèn)為基于Python的“Twython”可以很容易地應(yīng)用到任何使用元器件的電子產(chǎn)品中?!癟wython”是將通過(guò)API進(jìn)行的內(nèi)部處理部分與以可視化形式輸出的部分之間相連接的好方法。通過(guò)發(fā)布您所拍攝的照片,或者對(duì)包含特定關(guān)鍵字的推文進(jìn)行一些操作,您可以結(jié)合所學(xué)的知識(shí)創(chuàng)建出各種各樣的事物!

DevicePlus 編輯團(tuán)隊(duì)
設(shè)備升級(jí)版適用于所有熱愛(ài)電子和機(jī)電一體化的人。
審核編輯黃宇
-
python
+關(guān)注
關(guān)注
58文章
4882瀏覽量
90286 -
Raspberry Pi
+關(guān)注
關(guān)注
2文章
622瀏覽量
24088
發(fā)布評(píng)論請(qǐng)先 登錄
在 Debian 上沒(méi)有通過(guò) HDMI-VGA 適配器輸出,怎么解決這個(gè)問(wèn)題?
Visionfive V2 上沒(méi)有 ttyUSB* ,如何連接到串行 USB 設(shè)備?
請(qǐng)問(wèn)如何讓 Sony-IMX219-Raspberry-Pi-V2-CMOS 相機(jī)與 VisionFive2 配合使用?
PI7C9X2G系列PCIe Packet Switch:高性能低功耗解決方案
RDMA設(shè)計(jì)46:RoCE v2原語(yǔ)功能:?jiǎn)芜呎Z(yǔ)義
Banana Pi BPI-CM6 – 一款與 Raspberry Pi CM4/CM5 載板兼容的 SpacemiT K1 RISC-V 系統(tǒng)模塊
集裝箱儲(chǔ)能系統(tǒng)標(biāo)準(zhǔn)解析系列(一)|IEC 62933-2-1:電能存儲(chǔ)(EES)系統(tǒng) 第2-1部分-儲(chǔ)能單元參數(shù)和試驗(yàn)方法
集裝箱儲(chǔ)能系統(tǒng)標(biāo)準(zhǔn)解析系列(三)| IEC TS 62933-4-1電能存儲(chǔ)系統(tǒng)(EES) 第4-1部分:環(huán)境問(wèn)題指導(dǎo)
OpenWrt 路由器 Banana Pi R4 評(píng)測(cè) 第一部分:規(guī)格、性能和購(gòu)買(mǎi)渠道
ART-PI2的CherryUSB cdc_acm例程 在復(fù)位后需要好久才能出來(lái)COM口?
Banana Pi BPI-R4 Lite:新型單板計(jì)算機(jī)比 Raspberry Pi 5 更具優(yōu)勢(shì)
貿(mào)澤開(kāi)售Raspberry Pi用于嵌入式和IIoT應(yīng)用的RP2350微控制器
如何用 Raspberry Pi 500 搭建家庭錄音室?
通過(guò)Twython在Raspberry Pi上發(fā)推文!(第2部分)
評(píng)論