Python 教你自動(dòng)發(fā)微博,每日一句英語
最近在研究用 Python 來制作各個(gè)類別的機(jī)器人,今天先來分享一個(gè)自動(dòng)發(fā)布新浪微博的機(jī)器人。
基本思路
其實(shí)要實(shí)現(xiàn)一個(gè)簡(jiǎn)單的自動(dòng)發(fā)布微博機(jī)器人還是不難的,只需要每天按時(shí)找好要發(fā)布的素材(一般就是爬蟲了),然后再通過微博開放出來的 API 接口,自動(dòng)發(fā)布即可。
素材
對(duì)于素材,我這里選取的是金山詞霸的每日一句英語,我們可以爬取該網(wǎng)站的相關(guān)信息來組成我們的微博素材。
http://news.iciba.com/views/dailysentence/
微博 API
微博給廣大開發(fā)者提供了一個(gè)開放平臺(tái)
當(dāng)然在使用這個(gè)平臺(tái)之前,我們還是要先注冊(cè)并創(chuàng)建好應(yīng)用。比如像我這樣,創(chuàng)建好一個(gè)應(yīng)用
然后我們還需要設(shè)置好安全域名(后面發(fā)布微博時(shí)會(huì)用到),在應(yīng)用信息->基本信息中設(shè)置。
還需要設(shè)置應(yīng)用回調(diào)地址,在應(yīng)用信息->高級(jí)信息中設(shè)置。
當(dāng)然對(duì)于微博 API 的調(diào)用,我們可以使用其他人封裝好的第三方庫(kù)來更加方便的操作,我這里使用了一個(gè)就叫做“weibo”的庫(kù),直接使用 pip 安裝。
pip install weibo
不過我遇到了安裝問題,報(bào)錯(cuò)如下
- Traceback (most recent call last):
- File "setup.py", line 15, in <module>
- long_description=open('README.rst').read(),
- UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 241: illegal multibyte sequence
看起來是編碼問題,我們可以通過修改源代碼來規(guī)避
- 1. 從 pypi.org 上下載 weibo 庫(kù)
- 2. 然后解壓該包,并修改文件 setup.py 如下代碼
- long_description=open('README.rst', encoding='utf-8').read(),
- 3. 分別執(zhí)行如下命令安裝
- python setup.py build
- python setup.py install
至此可以安裝 weibo 庫(kù)成功
準(zhǔn)備工作與編寫思路就是這些,下面我們來看看具體的過程與代碼
自動(dòng)發(fā)布微博
根據(jù) weibo 庫(kù)的說明文檔,使用其操作微博還是相關(guān)容易的,只需要提供我們創(chuàng)建微博應(yīng)用時(shí)的 App Key 與 App Secret 和應(yīng)用回調(diào)地址信息即可。簡(jiǎn)單的調(diào)用代碼如下
- from weibo import Client
- c = Client('App Key', 'App Secret', 'https://www.luobodazahui.top', username='username', password='password')
- c.post('statuses/share', status='haha' + 安全域名)
我們運(yùn)行該代碼,如果不出意外的話,我們就能夠在該賬號(hào)下的微博中看到剛剛發(fā)布的微博了。
最簡(jiǎn)單的微博已經(jīng)發(fā)布成功了,那么能不能發(fā)布帶有圖片的微博呢,我們來嘗試一下
根據(jù)接口 statuses/share 的文檔說明,我們可以傳入 pic 參數(shù)來進(jìn)行圖片的上傳
我們傳入 pic 參數(shù)嘗試下
- f = open('4.png', 'rb')
- c.post('statuses/share', status='haha' + 安全域名, pic=f)
- f.close()
可以的,能夠正常發(fā)布帶有圖片的微博
那么現(xiàn)在自動(dòng)發(fā)布微博搞定了,我們?cè)賮砜纯慈绾巫詣?dòng)獲取微博素材
微博素材
對(duì)于金山詞霸的每日一句,我們可以使用如下的一個(gè) API 來獲得每天的信息
可以看到該接口返回的如下信息
我們可以直接使用 requests 庫(kù)來調(diào)用該接口
- import requests
- url = 'http://open.iciba.com/dsapi/'
- res = requests.get(url)
- content_e = res.json()['content']
- content_c = res.json()['note']
- content = content_e + '\n' + content_c
- content_t = res.json()['picture2']
現(xiàn)在我們來封裝兩個(gè)函數(shù),把功能完善起來
- def weibo(content, picture):
- ff = requests.get(picture).content
- c = Client(app_key, app_secret, 'https://www.luobodazahui.top', usernameusername=username, passwordpassword=password)
- c.post('statuses/share', status=content + 'https://www.luobodazahui.com', pic=ff)
- def auto_weibo():
- url = 'http://open.iciba.com/dsapi/'
- res = requests.get(url)
- content_e = res.json()['content']
- content_c = res.json()['note']
- content = content_e + '\n' + content_c
- content_t = res.json()['picture2']
- weibo(content, content_t)
- return 'OK'
現(xiàn)在我們就可以創(chuàng)建一個(gè)定時(shí)任務(wù),每天7點(diǎn)運(yùn)行該腳本就可以啦
0 7 * * * python auto_weibo.py
最后效果如下
今天的分享就到這里啦,如果你覺得有用請(qǐng)務(wù)必點(diǎn)個(gè)贊 + 在看 支持下。