實戰(zhàn)分享,如何用Python制作屬于你的郵箱自動回復(fù)機(jī)器人?

以下文章來源于早起Python?
作者陳熹
大家好,又來到Python辦公自動化專題。
在之前的系列文章中,我們已經(jīng)講解了如何利用Python讀取、收發(fā)、管理郵件。本文將進(jìn)一步分享如何用Python制作一個郵件自動回復(fù)機(jī)器人。
比如當(dāng)發(fā)送標(biāo)題為“來句詩”時,能夠自動返回一句詩;當(dāng)發(fā)送郵件標(biāo)題為“xx(城市)天氣”如“廣州天氣”時,能夠返回所需城市的天氣情況等等,更多功能可以自己定義,主要將涉及


和之前的文章類似,我們首先整理下思路,然后逐個解決,簡單來說這個需求可以分為下面的步驟:

基本邏輯很簡單,需要用到的知識點我們之前的文章中都有提過,可以直接嘗試完成這個案例。兩個子需求爬取的網(wǎng)站分別是
?今日詩詞:https://www.jinrishici.com
?
中國天氣網(wǎng):http://wthrcdn.etouch.cn/weather_mini?city={城市}

郵箱方面,之前我們講過qq郵箱、網(wǎng)易郵箱、這次再換個郵箱(88郵箱),首先過?imbox
?庫解析郵件,可以通過?kering
?庫獲取預(yù)先存在本地的系統(tǒng)密鑰(本文以 88 郵箱為例):

根據(jù)需求自然而然可以想到是反復(fù)獲取未讀郵件,解析其標(biāo)題觀察是否符合條件,符合相應(yīng)條件則執(zhí)行相應(yīng)的函數(shù),并將函數(shù)返回的內(nèi)容組裝成新的郵件。最后無論是否符合要求都將其標(biāo)記為已讀。
當(dāng)然,如果要持續(xù)運行就還需要將核心代碼包裝成函數(shù),并放在循環(huán)體內(nèi)部。循環(huán)可以間隔10分鐘。代碼如下所示:

發(fā)送郵件可以利用之前介紹的?yagmail
?庫,核心代碼?mail.send
?接收收件人郵箱、郵件標(biāo)題、郵件內(nèi)容三個參數(shù):

由于?send_mail
?函數(shù)接受爬蟲返回的?results
?作為內(nèi)容,也獲取了?imbox
?解析后得到的特定發(fā)件人郵箱,因此可以寫成如下形式:

問題只剩下如何獲取每日一句以及如何獲取指定城市天氣了,首先看一下每日一句的網(wǎng)站特點(實際上這個網(wǎng)站有 API 接口,讀者可以自行嘗試):

先試試直接返回網(wǎng)站內(nèi)容:


可以返回內(nèi)容,沒有特別的反爬措施,但返回的正文是亂碼,同時我們也注意到?utf-8
?編碼,因此直接修改編碼即可:


編碼問題解決以后就可以利用 xpath 解析獲取詩句了:

有趣的是,并沒有按意愿返回詩句,原因是網(wǎng)頁中的詩句是以Ajax動態(tài)加載的,而非靜態(tài)出現(xiàn)在網(wǎng)頁中。
重新分析網(wǎng)頁 XHR 即可獲取真正的訪問連接?https://v2.jinrishici.com/one.json?client=browser-sdk/1.2&X-User-Token=xxxxxx
,Token見下圖:

分析好原因后代碼反而更加簡單了:


返回的詩句直接就可以作為函數(shù)結(jié)果返回,因此代碼又可以寫成:

獲取天氣可以使用官方提供的 API 了,以廣州為例:


根據(jù)返回的 json 數(shù)據(jù)很容易獲取今日的天氣情況和最高最低氣溫,組合成函數(shù)效果如下:

至此,代碼部分就寫完了。我們的郵箱自動回復(fù)機(jī)器人也就擁有了兩個簡單的功能,當(dāng)然你可以結(jié)合自己的需求實現(xiàn)更多有意思的功能!
最后附上完整代碼供大家學(xué)習(xí)與交流
這個機(jī)器人做的不夠過癮?!
關(guān)注我,更多干貨等你來!
