『簡書追女神助手』實現(xiàn)的功能:你關(guān)注的簡書作者(女神)更新了文章默责,程序會第一時間自動點贊?多艇,另外你的郵箱會馬上收到一封郵件通知。如果這個郵箱綁定了微信幔戏,微信中就即時通知啼器。
實現(xiàn)步驟:
- 抓取關(guān)注作者的文章列表的最后的一篇旬渠。
- 把文章URL與記錄中的進行比對(第一次記錄為空),如果不一樣镀首,則是新發(fā)表的文章坟漱。用Python發(fā)送一封郵件,并把文章信息更新到文件記錄中更哄。
如果比對相同芋齿,就是未更新。程序結(jié)束成翩。
抓取更新文章中關(guān)鍵值id觅捆,構(gòu)造用于點贊的URL,post方法提交麻敌。到這里栅炒,就完整實現(xiàn)了簡書追女神助手的功能。
這段代碼要放到服務器上開啟定時任務术羔,如果她更新頻率高赢赊,你的心情急迫,時間可以設得短一點级历。
最好的優(yōu)化方法释移,是把她之前所有文章抓取下來,分析一下更新的時間和頻率寥殖,針對做好定時任務玩讳。
當然涩蜘,追女神做到這些還不夠,快去赤果果(zhen cheng)地留言評論熏纯,用力打賞吧同诫。
發(fā)送郵件的代碼:
def send_mail(title,content):
envelope = Envelope(
from_addr=(u'用于發(fā)送的郵箱,我用的QQ郵箱xxx@qq.com'), #發(fā)送的郵箱
to_addr=(u'用于接收的郵箱yyy@qq.com'), #接收的郵箱
subject=title,
text_body=content
)
# envelope.add_attachment('/Users/apple/Desktop/shell.png') #發(fā)送郵件添加附件,這里沒有
# Send the envelope using an ad-hoc connection...
envelope.send('smtp.qq.com', login='xxx@qq.com- 你的qq箱',
password='你的授權(quán)碼', tls=True)
Python用于發(fā)郵件的庫比較很多樟澜,我這里用的是Envelopes误窖,代碼更少,也沒有中文亂碼的問題往扔,注意郵箱設置要改一下贩猎,“設置”--“帳戶”熊户,生成授權(quán)碼萍膛,相于當給第三方當密碼使用。
點贊的代碼:
def post_like(note_url):
resp = requests.post(note_url,headers=headers2)
print resp #提交點贊后返回的結(jié)果
這里關(guān)鍵是從文章頁面獲取點擊“喜歡”提交的URL嚷堡』嚷蓿看下圖的分析。
代碼:
def from_aritle_get_note(artice_url):
ctx = requests.get(url=artice_url).content
soup = BeautifulSoup(ctx, 'html.parser', from_encoding='utf-8')
mts = soup.find_all('meta',property='al:ios:url')
mts = mts[0]['content']
pid = filter(str.isdigit,str(mts))
post_like_url = 'http://www.reibang.com/notes/%s/like' % pid
return post_like_url
后面的代碼就比較簡單了:讀寫一個文章蝌戒,用于保存作者最后一篇文章信息串塑,用于核對是不是新發(fā)表了文章。從作者主頁中抓取文章信息北苟,獲取最后發(fā)表的一篇文章桩匪。
還有其他方式可以實現(xiàn)類似功能的嗎?
- 有同學說友鼻,關(guān)注了作者傻昙,APP中本身就有推送消息啊。如果你想這樣彩扔,就只關(guān)注一個可盡能少的的作者妆档,不然推送消息太多,或者使用小號來關(guān)注你的女神虫碉。
- 還有同學說贾惦,可以使用RSS訂閱來實現(xiàn),關(guān)注的用戶更新了文章敦捧,就收到郵件通知须板。有熱心網(wǎng)友幫簡書燒制了 RSS,《簡書 RSS》 http://jianshu.milkythinking.com/
但是以上這種兩種方法受一些限制兢卵,也不會及時自動點贊习瑰,不如自己擼一段代碼實現(xiàn)的那么酷。
以上代碼和功能都比較適合初步Python童鞋練習济蝉。還可以把來源改為微博杰刽,實現(xiàn)微博版的追女神助手菠发。