本例的思路來源於網上,但網上執行步驟講解的不夠清楚,尤其實現這一系列的步驟中,會有很多坑,今天就詳細說一下,給想玩一下的朋友作個參考。
首先,第一步是如何從免費笑話api接口下載到笑話的文本,api大家都知道是應用程序接口,即我們可以發送請求、獲得數據。我選擇iteys,有請求方法示例,
用Python實現如下:需要載入包,
import sys, urllib, urllib2, json
import random
用urllib2發送請求和獲得數據,因為從接口取出的數據默認是josn格式(如何解析json請參考我的另一篇博客),需要解析成Python支持的dic格式,通過生成隨機數,用以拼接請求的url實現隨機翻頁效果,代碼如下:
page_num = random.randint(1,500)
url = 'http://api.1-blog.com/biz/bizserver/xiaohua/list.do?page=%d'%page_num
req = urllib2.Request(url)
resp = urllib2.urlopen(req)
content = resp.read()
if (content):
print 'content ok'
#print content
#解析json串
dic_str = json.loads(content)
接下來通過解析json把每一則笑話的title(json串對應的字段問author)和content,拼接起來,生成隨機數實現隨機抽取10條笑話,
代碼如下:
num = random.randint(0,9)
for i in range(0,10):
joke_str += 'title:' + dic_str['detail'][num + i]['author'] + '\n' + 'content:' + dic_str['detail'][num + i]['content'] + '\n' + '---'*20 + '\n'
joke_str += u'來源:ITeye'
其次,進行發送郵件的代碼編寫,經過上一步已經獲得要發送的內容了(joke_str),腳本發送郵件有比較固定的思路:調用smtplib模塊,smtp服務器連接、smtp服務器登錄、設置加密傳輸,smtp服務器發送,smtp服務器斷開連接,第一個坑出現了–郵箱的問題:我先後嘗試了qq郵箱和163郵箱,qq郵箱一定記得開啟smpt服務,並且會獲得一個獨立的密碼,smtp服務器登錄要用這個獨立密碼,163郵箱是默認開通的,且登錄密碼就是郵箱賬號密碼即可。代碼及tips如下:
import smtplib
import string
HOST='smtp.163.com'
SUBJECT='happy new day~~~'
TO=['收信郵箱1','收信郵箱2','收信郵箱x']#實現群發功能
FROM='[email protected]'
text=joke_str
BODY=string.join((
'From: %s' %FROM,
'To: %s' %TO,
'Subject: %s' %SUBJECT,
'',
text
),'\r\n')
try:
server=smtplib.SMTP()
server.connect(HOST,'25')
server.starttls()
server.login('***@163.com','password')
for item in TO:
server.sendmail(FROM,item,BODY)#sendmail 發送的內容為string類型,body/msg,as_string()
server.quit()
print '郵件發送成功~'
except Exception,e:
print '失敗'+str(e)
最後,發送郵件腳本完成後,就差一步了,發送郵件這種簡單粗暴的活,當然不能手動來了。。。,這一步需要你有一個雲主機服務器,這樣我們就可以把腳本掛在服務器下,定時執行,豈不美哉??~~,我用的是Ubuntu14.04,可以開啟crontab服務,步驟如下:1、設置定時任務,執行crontab -e命令編輯,2、crontab -e格式參照Linux運維工程師的技術博客。3、重啟service crontab restart,查看crontab服務,執行crontab -l如果出現如下圖所示表示設置成功,第二個坑:時區的問題,雲主機默認的是UTC(世界時區),所以定時的時候,北京時間要減去8小時。。,
經過以上步驟,這個實例就完成了~