《異地戀神器》《奇巧淫計》Python實現郵箱每天自動定時羅莉音播報天氣預報

前言

由於無聊閒來無事,便在CSDN中尋寶,偶然看到一篇每天自動給微信好友發天氣預報的文章,便想動手嘗試一下,但是發現網頁版的wx限制登錄,後來又轉戰QQ,但是發現網頁QQ下架了貌似,也沒有辦法登錄,便盯上了郵箱,且偶然又看到一篇給郵箱發天氣預報的文章和 baidu API 人工語音的文章,這時想法來了,那能不能把天氣預報轉換成語音然後發送到自己郵箱呢,每天起牀點一下就可以聽到當天的天氣預報那種,感覺可行! 開搞!!!

實戰分析

首先我們要獲取天氣信息,查了一下,選了和風天氣,因爲裏面有免費的API 嘻嘻嘻!這個網站是支持免費註冊的,所以一步一步慢慢來,不着急!上圖!

1.官網

註冊就自己來吧!不多說了。註冊完後登錄上,然後會看到下面的界面
在這裏插入圖片描述

看到這個界面後 點應用管理–>新建應用 這個Key值 就是我們等等需要使用的信息。
更加詳細的操作請參考SunriseCai大佬的這篇文章。

2.

現在天氣的接口有了,還需要註冊百度AI的接口(點擊即可打開)
在這裏插入圖片描述
點擊創建應用然後按照如下進行選擇創建
在這裏插入圖片描述
創建成功後,有三個值是我們需要的 分別爲AppID,API_Key, SECRET_Key,如下圖
在這裏插入圖片描述
如何建立連接具體的請參照SunriseCai爬蟲大佬的這篇文章,我這裏就不再多說了,畢竟自己是小白都是參考來的。

3

我這裏用的是QQ郵箱 就以QQ郵箱爲例
先登錄郵箱 --> 設置 --> 賬戶 -->開啓POP3/SMTP服務
然後將自己QQ 郵箱的密鑰弄下來,接下來需要用到
在這裏插入圖片描述

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

三個文件夾必須在同一個目錄中 否則無法使用,如下圖

在這裏插入圖片描述

6

成果視頻 (手機版)

7

最後一步,就是將這個軟件掛到服務器上去,這裏請參照SunriseCai大佬的這篇文章,希望大家都可以實踐出來,給你關心的那個異地的 他/她 一個特別的關心!!!

這是第一次寫,純屬小白瞎玩,有好多地方可能不完整,而且有錯,希望各位大佬海涵,不要噴我,畢竟大部分都是參考來的,再次感謝SunriseCai大佬的三篇文章!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章