前言
由於無聊閒來無事,便在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大佬的三篇文章!!!