为什么没有调整文字转向工具?(怎么让字体转向)
701
2022-05-30
如果,每天清晨洗漱完毕,都会收到朋友的温柔来信,告诉你今天的天气,并将你喜爱的内容发过来,这一天是不是会特别的劲儿呢?
今天,数据猿就想做一个自动邮件程序,可以将每天的天气、优美诗句,还有带给朋友的祝福,在每天的清晨准时带给他!
当然,也可以作为社畜的工具,比如每天/周给老板汇报工作进度~
本文目录如下:
分析需求
步骤
模块搭建
获取天气数据
提取诗句
合成html
发送邮件
获取授权码
登录smtp并发送
定时发送
小结
分析需求
背景:每天8点左右,给朋友的邮箱发送天气情况、拜伦诗句和祝福语~
一般的项目需求可以细分为目标-输入&输出-步骤三个部分。
经过思考,本项目需要以下内容——
目标:定时发邮件
输入:str【邮箱号、天气、诗句、祝福】
输出:html【天气、诗句、祝福合成的html】
为什么是html?因为自动发邮件需要调用smtplib库,内容需为html语言格式
步骤:
爬取今日天气信息
提取今日诗句
合成html
发送邮件
步骤
首先,搭建项目的基本框架
def get_weather(): ''' 爬取中国天气网,获取天气信息 ''' pass def get_poem(): ''' 获取拜伦诗句 ''' pass def sentemail(): ''' 合成内容,并发送邮件 ''' pass if __name__ == '__main__': ''' 主函数,调用函数以上函数 ''' pass
这里推荐使用中国天气网的免费API,面向个人用户免费单日可调用300次,非常良心。
详见开发指南:
https://www.tianqiapi.com/index/doc?version=v6
请求的API示例:
https://www.tianqiapi.com/api?version=v6&appid=95561987&appsecret=Wb6VbSzq&city=北京
注意需要申请注册开发者账号,获得appid和appsecret字段,否则获取不到内容,注册过程非常简单。
以上示例可以得到如下内容:
可以发现,是json格式储存的天气信息,文档提供了详细的字段说明,可获取api内容后,自由选择想要的内容。
数据猿根据需要,挑选了date、week、tem2、tem1、city、wea、win_speed、air_level、air_tips字段。
在使用requests.get()获取了之后,使用.json()解析,选择以上字段组成内容,返回给主函数。
获取天气数据代码如下:
def getWeather(city): url = 'https://www.tianqiapi.com/api?version=v6&appid=213751&appsecret=fv5E&city='+city kv={'user-agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/500.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/500.36"} r = requests.get(url, headers=kv, timeout=5).json() value = '亲爱的朋友,早上好!' + '\n'+ \ '今天是' + r['date'] + ' ' + r['week'] + ',\n'+ \ '气温' + r['tem2'] + '到' + r['tem1']+ ',\n'+ \ r['city'] + '今天' + r['wea'] + ', 风力' + r['win_speed'] + ',\n'+ \ '空气质量' + r['air_level'] + ', ' + r['air_tips'] + '\n' return value
要读取拜伦的诗,首先需要搞到拜伦的诗集文本数据
前不久发现了一个宝藏网站,古登堡项目,网址如下:
http://www.gutenberg.org/
包含了许多电子书资源,而且很多还有txt格式的下载资源,介绍如下:
从古登堡项目里下载拜伦勋爵的诗集,存在本地Byron Poetry Collection.txt,然后部分读取其中诗句的位置,确保每天都是一段诗句。
获取诗句部分代码如下:
def get_poem(): with open('Byron Poetry Collection.txt','r',encoding='utf-8') as f: alltext = f.read() start = alltext.find("Bob Southey! You're a poet, poet laureate,") final = alltext.find('End of the Project Gutenberg EBook of Don Juan, by Lord Byron.') # 经测试,start的几个字母会被包含,但是final的几个字母不会,所以可如下使用 alltext1 = alltext[start:final] alltext_list = alltext1.replace(' ','').replace(' ','').split('\n\n') while '' in alltext_list:alltext_list.remove('') return alltext_list
smtplib库支持html语言传入内容,这里结合html语言的组合我们的天气、诗句和祝福!
body = '
{0}
\n下面是您今天的拜伦小诗,请查收~\n{1}
数据猿Rigggle祝你度过愉快的一天
'.format(wea,text)#img # 设置邮件正文,这里是支持HTML的 msg = MIMEText(body, 'html')首先,需要去往邮箱,进入设置-POP3/SMTP/IMAP设置,这里需要确保开启smtp功能。
如果已经开启,则继续向下,找到授权密码管理-新增授权密码,然后记住授权码。
将授权码赋值给本文pwd变量,host变量是服务器地址,一般163邮箱是 smtp.163.com,qq邮箱是smtp.qq.com,也可从POP3/SMTP/IMAP设置中找到。port是发邮箱的端口,一般选择465。
如下变量值可以写出:
host = 'smtp.163.com' # 注意如果是 port = 465 sender = 'mjc_data@163.com' #这里是数据猿邮箱,请替换 pwd = 'PDSUNTQVERPZCEAC'#这里是数据猿邮箱的授权码,请替换
设置邮件主题和收件人,收件人邮箱号赋值给receiver变量:
msg['subject'] = '拜伦小诗来了,今天元气满满!' msg['from'] = sender # 设置发送人 msg['to'] = receiver
然后,使用smtplib库登录邮箱,并发送内容到收件人。将发件人邮箱号、收件人邮箱号、发件内容一同传入sendmail()函数,即可完成邮件发送。
s = smtplib.SMTP_SSL(host, port) s.login(sender, pwd) s.sendmail(sender, receiver, msg.as_string())
本节代码如下:
def sentemail(receiver,city,text_n): host = 'smtp.163.com' # 注意如果是 port = 465 sender = 'mjc_data@163.com' #替换为自己的邮箱号 pwd = 'PDSUNTQVERPZCEAC' # 替换为自己邮箱的授权码 wea = getWeather(city) text = get_poem()[text_n] print('文本正常,内容为:'+ text ) body = '
{0}
\n下面是您今天的拜伦小诗,请查收~\n{1}
数据猿Rigggle祝你度过愉快的一天
'.format(wea,text)#img # 设置邮件正文,这里是支持HTML的 msg = MIMEText(body, 'html') # 设置正文为符合邮件格式的HTML内容 msg['subject'] = '拜伦小诗来了,今天元气满满!' # 设置邮件标题 msg['from'] = sender # 设置发送人 msg['to'] = receiver # 设置接收人 try: s = smtplib.SMTP_SSL(host, port) # 注意!如果是使用SSL端口,这里就要改为SMTP_SSL s.login(sender, pwd) # 登陆邮箱 s.sendmail(sender, receiver, msg.as_string()) # 发送邮件! print ('邮件发送顺利') except smtplib.SMTPException: print('发送失败!请检查配置!')整体效果如下:
定时有两种方式,一种是到固定时间执行代码,一种是间隔一段时间执行代码。
要实现每天发送,数据猿使用time.sleep(86400)来间隔一天,86400是一天的秒数。
同时,根据拜伦诗集的内容长度,每天只获取其中一段。
if __name__ == '__main__': receiver = ['mjc_data@163.com','myreceiver@qq.com']# 请替换为自己的收件人邮箱 for i,v in enumerate(get_poem()): for j in receiver: sentemail(j,'广州',i) sleep(86400) #休息一天86400
因为需要定时、联网发送,所以最好放在服务器内,比较稳定可靠。
小结
本片内容是将自动发邮件、利用API获取数据、文件读写都杂糅一起了,项目难度较大,有兴趣的可多多尝试,欢迎私聊数据猿交流。
网络上可免费使用的API有很多,还是比较适合我们这些个人用户玩耍的,走正规途径获取内容更可靠,避免维护爬虫。
诗句的呈现目前做的还不好,不能像诗歌那样隔行呈现;获取天气部分目前没有深入使用city字段,现在只能手动调整天气的城市。
如需要本文代码和文件,请移步公众号后台回复 自动邮件
往期精品:
Python办公自动化(一) | chardet库自动读写多编码格式的文件
python办公自动化(二) | 读取.txt、.data、.doc和.docx文档的部分内容
参考资料:
中国天气网开发指南:https://www.tianqiapi.com/index/doc?version=v6
文字编辑:数据猿Riggle
在读新闻与传播专业硕士研究生,正在毕业论文、找工作ing…
首发平台:文科数据员(ID: HSS_data)
API HTML Python 云速邮箱 自动化测试
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。