《奇巧淫技》系列-python!!每天早上八點自動傳送天氣預報郵件到QQ郵箱
此部落格僅為我業餘記錄文章所用,釋出到此,僅供網友閱讀參考,如有侵權,請通知我,我會刪掉。
有不少讀者留言說本文章沒有用,因為天氣預報直接開啟手機就可以收到了,為何要多此一舉傳送到QQ郵箱呢!!!
仔細想想確實是這麼回事,但是,換一個場景或許就派得上用場了呢。。
前言:
近來天氣轉涼,我是每日起床都會查一下當天的天氣情況。但我又覺得查天氣麻煩,於是乎產生了一個每日定時自動獲取天氣預報並且傳送到個人郵箱的想法。
如果你也覺得查天氣麻煩,那看這篇文章就對了。
而這篇文章!!將詳細講解如何實現每日早上八點將最近7天的天氣狀況傳送到你的個人郵箱。
自動將天氣狀況傳送到你的個人郵箱共有以下四個步驟。
1.註冊免費天氣API
1.1開啟和風天氣註冊賬號
1.下圖是和風天氣:https://dev.heweather.com/的首頁,開啟註冊即可。
2.賬號註冊成功後點選 新建應用 ,建立一個Key,這個Key是用來進行和風天氣API呼叫的。
可以看到新建成功後的Key是一串長長的字串,這個就是獲取天氣資訊需要用到的金鑰啦。
1.2開啟天氣API介面說明,看看和風天氣的開發文件。
API開發文件,點選即可跳轉。
從上圖中可以看到(有商業版與免費版我這裡使用的是免費版),有多種weather-type,這裡我們使用forecast,這個是獲取3-10天預報。
根據上圖的請求URL示例可知,我們需要呼叫的url為
https://free-api.heweather.net/s6/weather/forecast?location=城市程式碼&key=自己建立的Key
2.編寫獲取天氣程式碼
城市可以填寫中文,也可以填寫城市程式碼城市程式碼查詢。
2.1獲取天氣預報情況
import requests
url = 'https://free-api.heweather.net/s6/weather/forecast?location=廣州&key=xxxxxxxxx'
res = requests.get(url)
print(res.text)
返回的是json格式的檔案,可以看到返回了從查詢當天的起始的7天天氣預報資訊。
接下的任務就是解析這一堆json格式的資料啦。
2.2所在城市經緯度等資訊查詢
import json
import requests
url = 'https://free-api.heweather.net/s6/weather/forecast?location=廣州&key=xxxxxxxxx'
res = requests.get(url)
res = json.loads(res.text) # 轉換json資料為字典
result = res['HeWeather6'][0]['basic']
print(result)
# 這是所查詢城市的經緯度,時區等等資訊。
## {'cid': 'CN101280101', 'location': '廣州', 'parent_city': '廣州', 'admin_area': '廣東', 'cnty': '中國', 'lat': '23.12517738', 'lon': '113.28063965', 'tz': '+8.00'}
2.3查詢所在城市未來7天資訊
import json
import requests
url = 'https://free-api.heweather.net/s6/weather/forecast?location=廣州&key=xxxxxxxxx'
res = requests.get(url)
res = json.loads(res.text) # 轉換json資料為字典
result = res['HeWeather6'][0]['daily_forecast']
print(result)
因為這裡呼叫的API會返回7天的資料,所以會返回7組下圖的資料。
{
"cond_code_d": "100", # 白天天氣狀況 100為晴 101為多雲 104為陰 等
"cond_code_n": "100", # 夜間天氣狀況
"cond_txt_d": "晴", # 白天天氣狀況描述
"cond_txt_n": "晴", # 晚間天氣狀況描述
"date": "2019-11-10", # 預報日期
"hum": "50", # 相對溼度
"mr": "16:33", # 月升時間
"ms": "04:21", # 月落時間
"pcpn": "0.0", # 降水量
"pop": "0", # 降水概率
"pres": "1013", # 大氣壓強
"sr": "06:37", # 日出時間
"ss": "17:43", # 日落時間
"tmp_max": "27", # 最高溫度
"tmp_min": "16", # 最低溫度
"uv_index": "7", # 紫外線強度指數
"vis": "25", # 能見度,單位:公里
"wind_deg": "-1", # 風向360角度
"wind_dir": "無持續風向", # 風向
"wind_sc": "1-2", # 風力
"wind_spd": "6" # 風速,公里/小時
}
......
2.4 獲取自己所需要的天氣資訊
import csv
import json
import requests
url = 'https://free-api.heweather.net/s6/weather/forecast?location=廣州&key=xxxxxx'
res = requests.get(url)
res = json.loads(res.text)
result = res['HeWeather6'][0]['daily_forecast']
city = location['parent_city']+location['location']
names = ['城市','時間','天氣狀況','最高溫','最低溫','日出','日落']
for data in result:
date = data['date']
cond = data['cond_txt_d']
max = data['tmp_max']
min = data['tmp_min']
sr = data['sr']
ss = data['ss']
print(city,date,cond,max,min,sr,ss)
## 返回的資料
廣州廣州 2019-11-10 晴 27 16 06:37 17:43
廣州廣州 2019-11-11 晴 28 18 06:38 17:43
廣州廣州 2019-11-12 晴 29 18 06:39 17:42
廣州廣州 2019-11-13 多雲 28 17 06:39 17:42
廣州廣州 2019-11-14 晴 25 15 06:40 17:42
廣州廣州 2019-11-15 晴 26 15 06:40 17:42
廣州廣州 2019-11-16 晴 27 16 06:41 17:41
3.編寫傳送郵件程式碼
這裡參考菜鳥教程的Python SMTP傳送郵件
1.首先去QQ郵箱
開啟 設定-賬戶-開啟服務-開啟POP3/SMTP服務,然後點選生成授權碼,python傳送郵件要用。
直接上程式碼,不解釋。
# 簡單郵件傳輸協議
import smtplib
import email
import time
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
# 設定郵箱的域名
HOST = 'smtp.qq.com'
# 設定郵件標題
SUBJECT = '今日份天氣預報到了喲,主子'
# 設定發件人郵箱
FROM = 'xxx@qq.com'
# 設定收件人郵箱
TO = 'xxx@163.com,xxx@qq.com' # 可以填寫多個郵箱,用逗號分隔,後面會用split做逗號分割
message = MIMEMultipart('related')
# --------------------------------------傳送文字-----------------
# 傳送郵件正文到對方的郵箱中
message_html = MIMEText("主子你的郵件到了\n\nThis is test", 'plain', 'utf-8') # \n為換行
message.attach(message_html)
# -------------------------------------新增檔案---------------------
# 要確定當前目錄有test.csv這個檔案
message_xlsx = MIMEText(open('test.csv', 'rb').read(), 'base64', 'utf-8')
# 設定檔案在附件當中的名字
message_xlsx['Content-Disposition'] = 'attachment;filename="test01.csv"'
message.attach(message_xlsx)
# 設定郵件發件人
message['From'] = FROM
# 設定郵件收件人
message['To'] = TO
# 設定郵件標題
message['Subject'] = SUBJECT
# 獲取簡單郵件傳輸協議的證照
email_client = smtplib.SMTP_SSL()
# 設定發件人郵箱的域名和埠,埠為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()
4.完整程式碼
# coding=gbk ## 注: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=xxxxxx'
# 獲取當日時間 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('today_weather.csv', 'w', newline='')as f:
writer = csv.writer(f)
writer.writerow(names)
for data in result:
date = data['date']
cond = data['cond_txt_d']
max = data['tmp_max']
min = data['tmp_min']
sr = data['sr']
ss = data['ss']
writer.writerows([(city, date, cond, max, min, sr, ss)])
send_email()
def send_email():
# 設定郵箱的域名
HOST = 'smtp.qq.com'
# 設定郵件標題
SUBJECT = '%s日份天氣預報資訊,請查收'%today_time
# 設定發件人郵箱
FROM = 'xxx@qq.com'
# 設定收件人郵箱
TO = 'xxx@163.com,xxx@qq.com' # 可以同時傳送到多個郵箱
message = MIMEMultipart('related')
# --------------------------------------傳送文字-----------------
# 傳送郵件正文到對方的郵箱中
message_html = MIMEText("%s日份天氣預報到賬啦,請查收" % today_time, 'plain', 'utf-8')
message.attach(message_html)
# -------------------------------------新增檔案---------------------
# today_weather.csv這個檔案
message_xlsx = MIMEText(open('today_weather.csv', 'rb').read(), 'base64', 'utf-8')
# 設定檔案在附件當中的名字
message_xlsx['Content-Disposition'] = 'attachment;filename="today_weather.csv"'
message.attach(message_xlsx)
# 設定郵件發件人
message['From'] = FROM
# 設定郵件收件人
message['To'] = TO
# 設定郵件標題
message['Subject'] = SUBJECT
# 獲取簡單郵件傳輸協議的證照
email_client = smtplib.SMTP_SSL()
# 設定發件人郵箱的域名和埠,埠為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.部署程式碼到伺服器,以便每日準時執行程式碼
說的好聽就叫程式碼部署,換句話說就是將程式碼拷貝到伺服器,然後讓程式碼執行。
這裡會用到一丟丟linux的知識。
5.1 首先拷貝檔案到伺服器
這一步很簡單,直接複製黏貼即可。
5.2 無
建立一個和 python檔案在同一個資料夾的 startup.sh檔案(命名隨意),然後在 startup.sh檔案的裡面填寫
python3 ./python檔名稱 # 記得 / 前面有個小點 .
然後再 /etc/crontab 裡面填寫 stratup.sh檔案的路徑即可。
既然你學會了傳送天氣預報,那再加上每天傳送一句語音或短視訊如何? ,用定製的蘿莉音,御姐音給對方傳送天氣預報資訊的語音或者附加一段短視訊,豈不美哉??點選下方文章連結跳轉,學習diy語音以及獲取短視訊的方式吧。
- diy定製自己的文字轉語音
- 獲取抖音短視訊
點選直達:《奇巧淫技》系列-Python實現 語音轉文字??非也!!是文字轉語音,DIY你想要的蘿莉音!!!
點選直達:《超簡單!!!利用python下載無水印某音視訊》
以上,動手操作一番即可,就可以每天8點準時收到最新的天氣預報資訊了。
如果你懶得動手,可以嘗試在留言裡動手留下你的郵箱+城市(反正我也不會給你弄)
這次的分享就到這裡。如果有什麼疑問可以在下方留言哦。
相關文章
- golang傳送郵件(qq郵箱)Golang
- spring boot配置QQ郵箱傳送郵件Spring Boot
- JavaMail:java使用QQ郵箱傳送郵件簡單版。JavaAI
- 如何傳送電子郵件到別人郵箱?電子郵件傳送的方法
- Springboot 自動傳送郵件Spring Boot
- 郵件營銷自動化:批次郵箱API傳送技巧與策略API
- 谷歌郵箱,配置傳送郵件密碼谷歌密碼
- python傳送郵件Python
- GitHub Actions 教程:定時傳送天氣郵件Github
- win10自帶郵件怎麼新增qq郵箱_win10郵箱如何匯入qq郵箱Win10
- 電子郵件協議及GO傳送QQ郵件協議Go
- 一次性解決python smtp 傳送outlook郵件,163郵件,qq郵件等等.Python
- 【Stmplib】Python正確模擬傳送QQ郵件Python
- win10郵件怎麼用qq郵箱 win10郵件如何使用qq郵箱Win10
- qq郵箱怎麼發檔案給別的郵箱 qq郵箱如何將文件傳送給別人
- Python SMTP傳送郵件Python
- 如何使用 ABAP 程式碼傳送郵件到指定郵箱試讀版
- Spring Boot實現傳送QQ郵件Spring Boot
- php 傳送郵件(以QQ為例)PHP
- Linux Centos7傳送QQ郵件LinuxCentOS
- Exchange限制郵箱使用者每天/每分鐘的傳送郵件數量和速率
- 【python3.x】傳送自動化測試報告郵件Python測試報告
- win10使用自帶郵箱傳送郵件時直接進傳送箱裡無法完成傳送怎麼解決Win10
- SpringBoot整合Mail傳送郵件&傳送模板郵件Spring BootAI
- 怎麼傳送電子郵件到別人郵箱?手把手教你!
- [python應用案例] 一.BeautifulSoup爬取天氣資訊併傳送至QQ郵箱Python
- JavaMailSender怎麼傳送163和qq郵件JavaAI
- 郵件傳送
- 傳送郵件
- python實現傳送郵件Python
- Laravel 傳送郵件報錯Laravel
- Python3實現自動傳送MySql查詢併傳送郵件PythonMySql
- Java實現網易企業163郵箱傳送郵件Java
- python 樹莓派 開機傳送IP到郵箱Python樹莓派
- nodejs什麼值得買自動簽到自動評論郵件傳送NodeJS
- Gitlab伺服器郵箱配置,實現自動為使用者傳送郵件(註冊傳送驗證連結)Gitlab伺服器
- python實現郵件的傳送Python
- 郵箱傳送模組