python天气预报语音播报邮箱小工具(期末大作业之我爱python)

实现功能:
生成一个自动化发邮箱的小程序,每天给女朋友or暗恋的小姑娘发天气预报 用来逗女朋友开心~~
话不多说,直接先上代码!!!

import smtplib#构造简单邮件传输协议
from email.header import Header#导入email模块中的header函数
from email.mime.text import MIMEText#导入email模块中的mime.text函数
from email.mime.image import MIMEImage#导入email模块中的mime.image函数
from email.mime.multipart import MIMEMultipart#导入email模块中的mime.multipart函数
from aip import AipSpeech#导入百度AIP
import requests
import timedef emailsend(act_mail,title_text,text):#定义收件人和邮件内容DIY(text)sd_mail='在这里输入你的邮箱'#定义发件人sd_pass='在这里输入你的密匙'#sd_mail的密匙mail_body=MIMEMultipart('mixed')#定义邮件整体且其对象类型定义为混合型#定义头尾信息(没有也不影响代码的运行)mail_body['From']=sd_mail+'<'+sd_mail+'>'mail_body['To']=act_mail#邮件的标题body_head='你的天气预报来啦!'+title_textmail_body['subject']=Header(body_head,'utf-8')#此行代码主要是用'subject'定义了发送的邮件主题#构造图片img_fil = open('image/weather.jpg','rb').read()mail_img=MIMEImage(img_fil)mail_img.add_header('Content-ID','<image1>')mail_img["Content-Disposition"] = 'attachment; filename="Hatsune Miku.jpg"'mail_body.attach(mail_img)#发送邮件附件adc=open('这是你的萝莉音.mp3','rb').read()#此处采用了萝莉音。你也可以不采用萝莉音,大叔?mail_adc=MIMEText(adc,'base64','utf-8')mail_adc['Content-Type']='application/octet-stream'mail_adc.add_header('Content-Disposition','attachment',filename='Lolita.mp3')mail_body.attach(mail_adc)#发送邮件内容body_main_string=textbody_main=MIMEText(body_main_string,'plain','utf-8')mail_body.attach(body_main)ftp=smtplib.SMTP('smtp.qq.com',25)#定义接口,网口号为25ftp.login(sd_mail,sd_pass)#登录扣扣邮箱ftp.sendmail(sd_mail,act_mail,mail_body.as_string())#发送邮件ftp.quit()#结束def DIY(text):one='输入你的API_ID'#API_IDtwo='输入你的API_KEY'#API_KEYthree='输入你的SECRER_KEY'#SECRER_KEYclient = AipSpeech(one,two,three)#用AipSpeech方法将文字转码为声音result = client.synthesis(text, 'zh', 1,{'spd':3,'pit':6,'vol': 5, 'per': 4})'''主要参数:spd:语速,取值0—9,默认为5中语速(非必须)pit:音调,取值0—9,默认为5中音调(非必须)vol:音量,取值0—9,默认为5中音量(非必须)per:发音人选择,0位女声,1为男声,3为情感合成-度逍遥,4为情感-度YY,默认为普通女(非必须)'''if not isinstance(result, dict):  # 如果result不是dict(字典)with open('这是你的萝莉音.mp3', 'wb') as f:#将语音转为mp3文件f.write(result)#在兄弟目录下生成文件,新文件将会覆盖旧文件def capture():#我没有采用爬虫,而是采用了接口,嗯,接口稳定多了,咳咳。其实就是懒得看爬虫,急着交大作业url='https://api.heweather.net/s6/weather/forecast?location=auto_ip&key=aed1ba57bc0a40e596fed6a582ec4726'result=requests.get(url).json()#进行解码boxto=['0状态码','1.天气预报时间','2.白天天气状况','3.夜间天气状况','4.最高温','5.最低温','6.相对湿度','7.紫外线强度','8.风力','9.日升日落']msg0=result['HeWeather6'][0]['status']while msg0=='ok':for i in range(3):#msg0=result['HeWeather6'][0]['status']msg1=boxto[1]+result['HeWeather6'][0]['daily_forecast'][i]['date']msg2=boxto[2]+result['HeWeather6'][0]['daily_forecast'][i]['cond_txt_d']msg3=boxto[3]+result['HeWeather6'][0]['daily_forecast'][i]['cond_txt_n']msg4=boxto[4]+result['HeWeather6'][0]['daily_forecast'][i]['tmp_max']+'摄氏度'msg5=boxto[5]+result['HeWeather6'][0]['daily_forecast'][i]['tmp_min']+'摄氏度'msg6=boxto[6]+result['HeWeather6'][0]['daily_forecast'][i]['hum']msg7=boxto[7]+result['HeWeather6'][0]['daily_forecast'][i]['uv_index']msg8=boxto[8]+result['HeWeather6'][0]['daily_forecast'][i]['wind_sc']msg9=boxto[9]+' 早晨 '+result['HeWeather6'][0]['daily_forecast'][i]['sr']+' 至 '+' 下午 '+result['HeWeather6'][0]['daily_forecast'][i]['ss']ttry=[msg1,msg2,msg3,msg4,msg5,msg6,msg7,msg8,msg9]end=''#解码完成for k in ttry:end+=k+'\n'if i==0:No_1=end+'\n\n\n'elif i==1:No_2=end+'\n\n\n'elif i==2:No_3=end+'\n\n\n'else :breakbreakbox=No_1+No_2+No_3return boxtext=capture()
act_mail_class = {'A.大哥:': '大哥的邮箱', 'B.关羽:': '关羽的邮箱'}# 收件人参数
act_len=len(act_mail_class)
for i in range(act_len):for key_1 in act_mail_class:print(key_1)order_send=input('请输入想要发送的人【列如:发给大哥就输入:a(不分大小写)】')order_send=order_send.title()for key in act_mail_class:if order_send[0]==key[0]:send_middle=act_mail_class[key]emailsend(send_middle,key[2:],text)print('发送完成')time.sleep(1.5)fily=input('如果你想结束请输入1\n')end=eval(fily)if end==1:

只要你稍微更改一下扣扣账号然后注册一个和风天气的密匙就可以直接拿去玩了,哈哈
下面,为小白剖析讲解一下这个过程

用到的库:
import smtplib#构造简单邮件传输协议 from email.header import Header#导入email模块中的header函数 from email.mime.text import MIMEText#导入email模块中的mime.text函数 from email.mime.image import MIMEImage#导入email模块中的mime.image函数 from email.mime.multipart import MIMEMultipart#导入email模块中的mime.multipart函数 from aip import AipSpeech#导入百度AIP import requests import timesmtplib模块用来构造一个传输协议
email模块你可以全部导入也可以导入里面的几个函数(header , mime.text , mime.image , mime.multipart),随你心意
requests库用来访问url
time库可导可不导,看你心情发挥
API我用的是百度的,所以导入了Aipspeech(用API关键是萝莉音语音播报的功能实现,如果不喜欢这个功能就不要导入这个函数库叭)

第一部分:
1.首先去QQ邮箱
打开 设置-账户-开启服务-开启POP3/SMTP服务,然后点击生成授权码,python发送邮件要用。
不会可以参考菜鸟教程

2.推荐使用和风天气API(强烈推荐付费版,一两块钱就可以访问一两千次,主要是稳定)
2.1浏览器打开和风天气

2.2:自己注册一个账号后打开控制台

2.3:点击登录

2.4:打开开发文档:

2.5:点击快速开始,并且仔细阅读:
红色剪头指向的三个重点工具,里面说的很详细,关于如何使用。

2.6:特别提醒,当后面程序访问报错的时候一定要仔细阅读错误码,然后再去检查程序。

代码块:

def capture():url='https://api.heweather.net/s6/weather/forecast?location=auto_ip&key=aed1ba57bc0a40e596fed6a582ec4726'#和风天气的urlresult=requests.get(url).json()#进行解码boxto=['0状态码','1.天气预报时间','2.白天天气状况','3.夜间天气状况','4.最高温','5.最低温','6.相对湿度','7.紫外线强度','8.风力','9.日升日落']#根据你的需求去解码,在开发文档里面很清晰,他的返回全部是字典嵌套格式。msg0=result['HeWeather6'][0]['status']while msg0=='ok':for i in range(3):#msg0=result['HeWeather6'][0]['status']msg1=boxto[1]+result['HeWeather6'][0]['daily_forecast'][i]['date']msg2=boxto[2]+result['HeWeather6'][0]['daily_forecast'][i]['cond_txt_d']msg3=boxto[3]+result['HeWeather6'][0]['daily_forecast'][i]['cond_txt_n']msg4=boxto[4]+result['HeWeather6'][0]['daily_forecast'][i]['tmp_max']+'摄氏度'msg5=boxto[5]+result['HeWeather6'][0]['daily_forecast'][i]['tmp_min']+'摄氏度'msg6=boxto[6]+result['HeWeather6'][0]['daily_forecast'][i]['hum']msg7=boxto[7]+result['HeWeather6'][0]['daily_forecast'][i]['uv_index']msg8=boxto[8]+result['HeWeather6'][0]['daily_forecast'][i]['wind_sc']msg9=boxto[9]+' 早晨 '+result['HeWeather6'][0]['daily_forecast'][i]['sr']+' 至 '+' 下午 '+result['HeWeather6'][0]['daily_forecast'][i]['ss']ttry=[msg1,msg2,msg3,msg4,msg5,msg6,msg7,msg8,msg9]end=''#解码完成for k in ttry:end+=k+'\n'if i==0:No_1=end+'\n\n\n'elif i==1:No_2=end+'\n\n\n'elif i==2:No_3=end+'\n\n\n'else :breakbreakbox=No_1+No_2+No_3return box#返回了一段基础天气信息的文本

这个函数功能就是进入和风天气提供的接口(API)里面找到一些我们需要的天气预报信息,然后提取解码成人类看得懂的语言,返回文本出来。

3.萝莉音~~功能实现:要采用间接访问,不能用直接访问,不然后面打包的时候会出错

def DIY(text):one='输入你的API_ID'#API_IDtwo='输入你的API_KEY'#API_KEYthree='输入你的SECRER_KEY'#SECRER_KEYclient = AipSpeech(one,two,three)#用AipSpeech方法将文字转码为声音result = client.synthesis(text, 'zh', 1,{'spd':3,'pit':6,'vol': 5, 'per': 4})'''主要参数:spd:语速,取值0—9,默认为5中语速(非必须)pit:音调,取值0—9,默认为5中音调(非必须)vol:音量,取值0—9,默认为5中音量(非必须)per:发音人选择,0位女声,1为男声,3为情感合成-度逍遥,4为情感-度YY,默认为普通女(非必须)'''if not isinstance(result, dict):  # 如果result不是dict(字典)with open('这是你的萝莉音.mp3', 'wb') as f:#将语音转为mp3文件f.write(result)#在兄弟目录下生成文件,新文件将会覆盖旧文件def capture():url='https://api.heweather.net/s6/weather/forecast?location=auto_ip&key=aed1ba57bc0a40e596fed6a582ec4726'result=requests.get(url).json()#进行解码boxto=['0状态码','1.天气预报时间','2.白天天气状况','3.夜间天气状况','4.最高温','5.最低温','6.相对湿度','7.紫外线强度','8.风力','9.日升日落']msg0=result['HeWeather6'][0]['status']while msg0=='ok':for i in range(3):#msg0=result['HeWeather6'][0]['status']msg1=boxto[1]+result['HeWeather6'][0]['daily_forecast'][i]['date']msg2=boxto[2]+result['HeWeather6'][0]['daily_forecast'][i]['cond_txt_d']msg3=boxto[3]+result['HeWeather6'][0]['daily_forecast'][i]['cond_txt_n']msg4=boxto[4]+result['HeWeather6'][0]['daily_forecast'][i]['tmp_max']+'摄氏度'msg5=boxto[5]+result['HeWeather6'][0]['daily_forecast'][i]['tmp_min']+'摄氏度'msg6=boxto[6]+result['HeWeather6'][0]['daily_forecast'][i]['hum']msg7=boxto[7]+result['HeWeather6'][0]['daily_forecast'][i]['uv_index']msg8=boxto[8]+result['HeWeather6'][0]['daily_forecast'][i]['wind_sc']msg9=boxto[9]+' 早晨 '+result['HeWeather6'][0]['daily_forecast'][i]['sr']+' 至 '+' 下午 '+result['HeWeather6'][0]['daily_forecast'][i]['ss']ttry=[msg1,msg2,msg3,msg4,msg5,msg6,msg7,msg8,msg9]end=''#解码完成for k in ttry:end+=k+'\n'if i==0:No_1=end+'\n\n\n'elif i==1:No_2=end+'\n\n\n'elif i==2:No_3=end+'\n\n\n'else :breakbreakbox=No_1+No_2+No_3return box

这一个函数的功能就是讲一段文本(上一个函数得到的天气预报文本)丢到百度API这个接口里面把它转变为音频,嗯,有恩多种音调,选你喜欢的就好。
不得不数百度API真的是太强大了。很有很多其他功能非常好用,老司机都懂。
详情怎么文字转语音请看这位大佬的文章,说的很详细

4.构造邮箱函数:

def emailsend(act_mail,title_text,text):#定义收件人和邮件内容DIY(text)sd_mail='发件人的邮箱'#定义发件人sd_pass='你创建的密匙'#sd_mail的密匙mail_body=MIMEMultipart('mixed')#定义邮件整体且其对象类型定义为混合型,你也可以创建其他类型,可以去看开发文档#定义头尾信息(没有也不影响代码的运行,但是可能会被放到垃圾邮箱里)mail_body['From']=sd_mail+'<'+sd_mail+'>'mail_body['To']=act_mail#邮件的标题body_head='你的天气预报来啦!'+title_textmail_body['subject']=Header(body_head,'utf-8')#此行代码主要是用'subject'定义了发送的邮件主题#构造图片,后面用到访问的时候应该采用间接访问img_fil = open('image/weather.jpg','rb').read()mail_img=MIMEImage(img_fil)mail_img.add_header('Content-ID','<image1>')mail_img["Content-Disposition"] = 'attachment; filename="Hatsune Miku.jpg"'mail_body.attach(mail_img)#发送邮件附件adc=open('这是你的萝莉音.mp3','rb').read()mail_adc=MIMEText(adc,'base64','utf-8')mail_adc['Content-Type']='application/octet-stream'mail_adc.add_header('Content-Disposition','attachment',filename='Lolita.mp3')mail_body.attach(mail_adc)#发送邮件内容body_main_string=textbody_main=MIMEText(body_main_string,'plain','utf-8')mail_body.attach(body_main)ftp=smtplib.SMTP('smtp.qq.com',25)#定义接口,网口号为25ftp.login(sd_mail,sd_pass)#登录扣扣邮箱ftp.sendmail(sd_mail,act_mail,mail_body.as_string())#发送邮件ftp.quit()#结束

这个函数就是实现了将一段确定的文本,语音,图片,自动构造成一封邮件,从你的邮箱发送给另一个人。

5.自动化小模块

text=capture()
act_mail_class = {'A.大哥:': '大哥的邮箱', 'B.二哥:': '二哥的邮箱'}# 收件人参数
act_len=len(act_mail_class)
for i in range(act_len):for key_1 in act_mail_class:print(key_1)order_send=input('请输入想要发送的人【列如:发给大哥就输入:a(不分大小写)】')order_send=order_send.title()for key in act_mail_class:if order_send[0]==key[0]:send_middle=act_mail_class[key]emailsend(send_middle,key[2:],text)print('发送完成')time.sleep(1.5)fily=input('如果你想结束请输入1\n')end=eval(fily)if end==1:break

嗯,最后,将这段代码打包生成exe文件。就ok了。生成一个自动化小程序,给女朋友暖暖心,或者追追暗恋的小姑娘,哈哈,小伙伴们拿去玩吧。
附上两张效果图:

python期末大作业 邮箱小程序相关推荐

  1. 微信小程序期末大作业 中草药小程序 药海拾遗

    微信小程序期末大作业 中草药小程序 药海拾遗 小程序详情如下:(下载链接在文末) 学习社区可以自己添加内容 点我下载资源 https://download.csdn.net/download/weix ...

  2. (运动会模拟射靶)Python期末大作业(附完整文档)

    python期末大作业,因为是数据分析与可视化,所以我在网上搜索的时候,找到了一篇关于大作业射靶的题目,原文写的很好,也提供了下载,本篇在其基础上增加了数据可视化-图表,并且增加了,方差,个人平均分在 ...

  3. HTML期末大作业~简单的程序员个人博客网站模板源码(HTML+CSS)~个人主页博客web网页设计制作~HTML简单个人网页制作~Web大学生网页成品...

    HTML期末大作业~ 简单的程序员个人博客网站模板源码(HTML+CSS)~学生HTML个人网页作业作品下载 ~个人主页博客网页设计制作 ~大学生个人网站作业模板 ~简单个人网页制作 临近期末, 你还 ...

  4. HTML5期末大作业:小礼品购物网站设计——小礼品购物商城网站(12页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业

    HTML5期末大作业:小礼品购物网站设计--小礼品购物商城网站(12页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业 常见网页设计作业题材有 个人. 美食. ...

  5. python期末大作业之实现多线程爬虫系统

    实现时必须涵盖以下技术: ①图形界面 -> tkinter ②多线程 -> threading.Thread ③文件读写操作 -> write read ④数据库编程 -> p ...

  6. python期末大作业--爬取网站表情包

    现在大学生都开始忙期末大作业了吧 不知道选啥,有些老师还规定同班的还不能选一样的网站,这就算了,还得来个ppt,真是麻烦事情一大堆 不过-还是好羡慕大学生,读书真的超级舒服啊,这些也就只能等你步入社会 ...

  7. python期末大作业_上海交通大学python期末大作业题目(姚天昉)

    姚天昉是上海交大一位非常有名的计算机老师,期末大作业非常难,给弟弟妹妹们透露下.ps:这是大作业一,另有大作业二即将公布,敬请关注! Project A Simulating a Physical S ...

  8. python自动发QQ邮箱小程序

    简介 这是一个利用爬虫获取API接口数据,通过smtp协议发送邮件到QQ邮箱的小程序,系统设置定时发送.调用了几个接口,大概有以下这几个内容了,比如天气情况,十万个冷笑话,名言名句,冷知识等等,可以根 ...

  9. Python选修课,期末大作业Pygame小游戏<Sharpshooter>

    本篇博文为博主大一Python选修课的期末作业,主要运用了Pygame叙写了一个实现小小功能的小游戏,可以随意拿去当作业上交.(程序在文底附录) 一.目标分析. 1.在屏幕下方中央生成一个炮台 2.随 ...

最新文章

  1. 台湾高校首创气体灭火数位实境教育馆
  2. 解读Junit的@Test注解,避免initializationerror
  3. 用户画像标签维度_一文看懂用户画像标签体系(包括维度、应用场景)
  4. 基于光强的角点检测(SUSAN角点检测、FAST角点检测、FAST-ER角点检测)
  5. Fail - Fast机制
  6. SAS® Model Studio功能调研
  7. String和StringBuffer与StringBuilder的区别
  8. 屏蔽系统的故障定位案例
  9. 图解形态学Morphological
  10. 2022新考纲408计组详细思维导图分享
  11. python嵩天ppt_python知识精华:嵩天微专业笔记
  12. 如何实现高效的室内定位和追踪?
  13. 万能乘法速算法大全_玩转扑克牌亲子游戏大全收藏 孩子爱上数学 快速提升计算能力...
  14. 芭蕉树上第二十二根芭蕉-- QT中一些报错问题
  15. 从HDMI到MHL,手机走进高清时代
  16. 嘉兴 机器人仓库 菜鸟_菜鸟物流展示机器人仓库 提高物流运送效率
  17. 【实践与问题解决38】win10桌面图标变成一个空白图标
  18. 在Win10下安装Anaconda3,“开始”菜单目录下只有Anconda prompt怎么办
  19. 响应式网页设计之JavaScript基础
  20. 石墨烯在生物医学上应用的研究进展_多孔石墨烯的制备及应用

热门文章

  1. ubuntu系统中查看本机cpu和内存信息的命令和用法(分色排版)
  2. 软件评测师 各章节考点汇总(基础知识部分)
  3. in unnamed module of loader
  4. 免费可商用的矢量插图网站
  5. 保罗.格雷厄姆:如何获得创业Ideas | How to Get Startup Ideas
  6. 常用H5标签-第二部分
  7. MOS驱动自举电容和限流电阻的选取
  8. 用PS制作动态雪景的教程
  9. VINS-mono 论文解读:IMU预积分+Marg边缘化
  10. USB 对拷线材 YYDS