由于无聊闲来无事,便在CSDN中寻宝,偶然看到一篇每天自动给微信好友发天气预报的文章,便想动手尝试一下,但是发现网页版的wx限制登录,后来又转战QQ,但是发现网页QQ下架了貌似,也没有办法登录,便盯上了邮箱,且偶然又看到一篇给邮箱发天气预报的文章和 baidu API 人工语音的文章,这时想法来了,那能不能把天气预报转换成语音然后发送到自己邮箱呢,每天起床点一下就可以听到当天的天气预报那种,感觉可行! 开搞!!!
首先我们要获取天气信息,查了一下,选了和风天气,因为里面有免费的API 嘻嘻嘻!这个网站是支持免费注册的,所以一步一步慢慢来,不着急!上图!
注册就自己来吧!不多说了。注册完后登录上,然后会看到下面的界面
看到这个界面后 点应用管理–>新建应用 这个Key值 就是我们等等需要使用的信息。
更加详细的操作请参考SunriseCai大佬的这篇文章。
现在天气的接口有了,还需要注册百度AI的接口(点击即可打开)
点击创建应用然后按照如下进行选择创建
创建成功后,有三个值是我们需要的 分别为AppID,API_Key, SECRET_Key,如下图
如何建立连接具体的请参照SunriseCai爬虫大佬的这篇文章,我这里就不再多说了,毕竟自己是小白都是参考来的。
我这里用的是QQ邮箱 就以QQ邮箱为例
先登录邮箱 --> 设置 --> 账户 -->开启POP3/SMTP服务
然后将自己QQ 邮箱的密钥弄下来,接下来需要用到
我这里就直接往上贴代码了,具体如何操作和API 如何连接,大佬的博客全有,我只是大自然的搬运工罢了。
#coding=gbk
#-*- coding:utf-8 -*- ## 注:linux服务器上不需要这一行,window需要
import csv
import time
import json
import requests
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
url = r'https://free-api.heweather.net/s6/weather/forecast?location=城市名称&key=和风天气密钥'
# 获取当日时间 2019-11-10
today_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
def get_weather_data():
res = requests.get(url)
res.encoding = 'utf-8'
res = json.loads(res.text)
result = res['HeWeather6'][0]['daily_forecast']
location = res['HeWeather6'][0]['basic']
city = location['parent_city'] + location['location']
names = ['城市', '时间', '天气状况', '最高温', '最低温', '日出', '日落']
with open('test.txt', 'w', newline='')as f:
writer = csv.writer(f)
for data in result:
a='城市'
b='时间'
c='天气状况'
d='风力'
e='风向'
g='百分之'
h='降水概率'
n='紫外线强度指数'
m='。'
date = data['date']
cond = data['cond_txt_d']
dir = data['wind_dir']
sc = data['wind_sc']
pop = data['pop']
index = data['uv_index']
writer.writerows([('城市',city, '时间',date,'天气状况',cond, '风向' ,dir,'风力' ,sc,'降水概率','百分之',pop,'紫外线强度指数',index,'。','。','。')])
send_email()
from aip import AipSpeech
APP_ID = '你的百度密钥ID'
API_KEY = '你的百度密钥'
SECRET_KEY = '你的百度密钥'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# test.txt 为同级目录下的文本
with open('test.txt', 'r') as f:
f_read = f.read()
result = client.synthesis(f_read, 'zh', 1, {
'vol': 4, 'per': 4, 'pit':6
})
# 识别正确返回语音二进制 错误则返回dict 错误码参照开发文档
if not isinstance(result, dict): # 如果result不是dict(字典)
with open('weather forecast.mp3', 'wb') as f:
f.write(result)
def send_email():
# 设置邮箱的域名
HOST = 'smtp.qq.com'
# 设置邮件标题
SUBJECT = '叮咚!你所在城市的音频天气预报请查收'
# 设置发件人邮箱
FROM = '发件人邮箱'
# 设置收件人邮箱
TO = '收件人邮箱' # 可以同时发送到多个邮箱
message = MIMEMultipart('related')
# --------------------------------------发送文本-----------------
# 发送邮件正文到对方的邮箱中
message_html = MIMEText(
"早上好!心情一定要美美哒!"
"今日份天气预报到账啦,请收听!"
" --你专属的天气精灵" )
message.attach(message_html)
# -------------------------------------添加文件---------------------
#weather forecast.mp3这个文件
message_xlsx = MIMEText(open('weather forecast.mp3', 'rb').read(), 'base64', 'utf-8')
# 设置文件在附件当中的名字
message_xlsx['Content-Disposition'] = 'attachment;filename="weather forecast.mp3"'
message.attach(message_xlsx)
# 设置邮件发件人
message['From'] = FROM
# 设置邮件收件人
message['To'] = TO
# 设置邮件标题
message['Subject'] = SUBJECT
# 获取简单邮件传输协议的证书
email_client = smtplib.SMTP_SSL(host='smtp.qq.com')
# 设置发件人邮箱的域名和端口,端口为465
email_client.connect(HOST, '465')
# ---------------------------邮箱授权码------------------------------
result = email_client.login(FROM, '你的邮箱密钥')
print('登录结果', result)
email_client.sendmail(from_addr=FROM, to_addrs=TO.split(','), msg=message.as_string())
# 关闭邮件发送客户端
email_client.close()
get_weather_data()
三个文件夹必须在同一个目录中 否则无法使用,如下图
成果视频 (手机版)
最后一步,就是将这个软件挂到服务器上去,这里请参照SunriseCai大佬的这篇文章,希望大家都可以实践出来,给你关心的那个异地的 他/她 一个特别的关心!!!
这是第一次写,纯属小白瞎玩,有好多地方可能不完整,而且有错,希望各位大佬海涵,不要喷我,毕竟大部分都是参考来的,再次感谢SunriseCai大佬的三篇文章!!!