本例的思路来源于网上,但网上执行步骤讲解的不够清楚,尤其实现这一系列的步骤中,会有很多坑,今天就详细说一下,给想玩一下的朋友作个参考。
首先,第一步是如何从免费笑话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小时。。,
经过以上步骤,这个实例就完成了~