您的位置:首页 > 编程语言 > Python开发

Python实例---接入笑话API+发送邮件+云主机crontab定期执行

2016-05-08 10:47 871 查看
本例的思路来源于网上,但网上执行步骤讲解的不够清楚,尤其实现这一系列的步骤中,会有很多坑,今天就详细说一下,给想玩一下的朋友作个参考。

首先,第一步是如何从免费笑话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='xiao_junsheng@163.com'
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小时。。,

经过以上步骤,这个实例就完成了~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python api crontab smtp