《异地恋神器》《奇巧淫计》Python实现邮箱每天自动定时罗莉音播报天气预报

前言

由于无聊闲来无事,便在CSDN中寻宝,偶然看到一篇每天自动给微信好友发天气预报的文章,便想动手尝试一下,但是发现网页版的wx限制登录,后来又转战QQ,但是发现网页QQ下架了貌似,也没有办法登录,便盯上了邮箱,且偶然又看到一篇给邮箱发天气预报的文章和 baidu API 人工语音的文章,这时想法来了,那能不能把天气预报转换成语音然后发送到自己邮箱呢,每天起床点一下就可以听到当天的天气预报那种,感觉可行! 开搞!!!

实战分析

首先我们要获取天气信息,查了一下,选了和风天气,因为里面有免费的API 嘻嘻嘻!这个网站是支持免费注册的,所以一步一步慢慢来,不着急!上图!

1.

注册就自己来吧!不多说了。注册完后登录上,然后会看到下面的界面
《异地恋神器》《奇巧淫计》Python实现邮箱每天自动定时罗莉音播报天气预报_第1张图片

看到这个界面后 点应用管理–>新建应用 这个Key值 就是我们等等需要使用的信息。
更加详细的操作请参考SunriseCai大佬的这篇文章。

2.

现在天气的接口有了,还需要注册百度AI的接口(点击即可打开)
《异地恋神器》《奇巧淫计》Python实现邮箱每天自动定时罗莉音播报天气预报_第2张图片
点击创建应用然后按照如下进行选择创建
《异地恋神器》《奇巧淫计》Python实现邮箱每天自动定时罗莉音播报天气预报_第3张图片
创建成功后,有三个值是我们需要的 分别为AppID,API_Key, SECRET_Key,如下图
在这里插入图片描述
如何建立连接具体的请参照SunriseCai爬虫大佬的这篇文章,我这里就不再多说了,毕竟自己是小白都是参考来的。

3

我这里用的是QQ邮箱 就以QQ邮箱为例
先登录邮箱 --> 设置 --> 账户 -->开启POP3/SMTP服务
然后将自己QQ 邮箱的密钥弄下来,接下来需要用到
《异地恋神器》《奇巧淫计》Python实现邮箱每天自动定时罗莉音播报天气预报_第4张图片

4.

我这里就直接往上贴代码了,具体如何操作和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()

5

三个文件夹必须在同一个目录中 否则无法使用,如下图

《异地恋神器》《奇巧淫计》Python实现邮箱每天自动定时罗莉音播报天气预报_第5张图片

6

成果视频 (手机版)

7

最后一步,就是将这个软件挂到服务器上去,这里请参照SunriseCai大佬的这篇文章,希望大家都可以实践出来,给你关心的那个异地的 他/她 一个特别的关心!!!

这是第一次写,纯属小白瞎玩,有好多地方可能不完整,而且有错,希望各位大佬海涵,不要喷我,毕竟大部分都是参考来的,再次感谢SunriseCai大佬的三篇文章!!!

你可能感兴趣的:(Python)