歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Python實例---接入笑話API+發送郵件+雲主機crontab定期執行

Python實例---接入笑話API+發送郵件+雲主機crontab定期執行

日期:2017/3/1 11:56:53   编辑:關於Linux

本例的思路來源於網上,但網上執行步驟講解的不夠清楚,尤其實現這一系列的步驟中,會有很多坑,今天就詳細說一下,給想玩一下的朋友作個參考。
首先,第一步是如何從免費笑話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小時。。,
經過以上步驟,這個實例就完成了~

Copyright © Linux教程網 All Rights Reserved