【奇巧淫技】系列-python!!每天早上八點自動發送天氣預報郵件到QQ郵箱

此博客僅爲我業餘記錄文章所用,發佈到此,僅供網友閱讀參考,如有侵權,請通知我,我會刪掉。

補充

有不少槓精小婊貝留言說本文章沒有用,因爲天氣預報直接打開手機就可以收到了,爲何要多此一舉發送到郵箱呢!!!那我在這裏只能說:因爲你沒用,所以你沒用!!!

ps:其實部分槓精槓的也不無道理,覺得查看天氣預報都麻煩了,那查看郵件就不麻煩嗎?哈哈哈

這裏主要介紹的是思路不是天氣預報!不是天氣預報!!不是天氣預報!!!天氣預報只是用於舉例。請各位不要再剛了!!!

下面是我會用到的兩個場景:

  1. 工作日下班之前發送整理後的文檔到領導郵箱。(將文檔放到指定文件夾,遍歷發送即可)
  2. 服務器日誌在早晨8點發送至我的郵箱,上班通勤路上可以瞄幾眼前晚服務器有異常否。
  3. 以後有用到的場景再做補充。。。

以下的內容並沒有更改,與初發表的博文一致。


前言:

近來天氣轉涼,我是每日起牀都會查一下當天的天氣情況。但我又覺得查天氣麻煩,於是乎產生了一個每日定時自動獲取天氣預報並且發送到個人郵箱的想法。

如果你也覺得查天氣麻煩,那看這篇文章就對了。
而這篇文章!!將詳細講解如何實現每日早上八點將最近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).json() # 因爲返回的是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 requests

url = 'https://free-api.heweather.net/s6/weather/forecast?location=廣州&key=xxxxxxxxx'
res = requests.get(url).json()		# 返回的數據爲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 requests

url = 'https://free-api.heweather.net/s6/weather/forecast?location=廣州&key=xxxxxx'
res = requests.get(url).json()
result = res['HeWeather6'][0]['daily_forecast']
location = res['HeWeather6'][0]['basic']
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-1027 16 06:37 17:43
廣州廣州 2019-11-1128 18 06:38 17:43
廣州廣州 2019-11-1229 18 06:39 17:42
廣州廣州 2019-11-13 多雲 28 17 06:39 17:42
廣州廣州 2019-11-1425 15 06:40 17:42
廣州廣州 2019-11-1526 15 06:40 17:42
廣州廣州 2019-11-1627 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 = '[email protected]'
# 設置收件人郵箱
TO = '[email protected],[email protected]'	# 可以填寫多個郵箱,用逗號分隔,後面會用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 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).json()
    # res.encoding = 'utf-8'
    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 = '[email protected]'
    # 設置收件人郵箱
    TO = '[email protected],[email protected]'		# 可以同時發送到多個郵箱
    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(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.部署代碼到服務器,以便每日準時運行代碼

說的好聽就叫代碼部署,換句話說就是將代碼拷貝到服務器,然後讓代碼運行。
這裏會用到一丟丟linux的知識。

5.1 首先拷貝文件到服務器

這一步很簡單,直接複製黏貼即可。

5.2 無

創建一個和 python文件在同一個文件夾的 startup.sh文件(命名隨意),然後在 startup.sh文件的裏面填寫

python3 ./python文件名稱 # 記得 / 前面有個小點 .

在這裏插入圖片描述
然後再 /etc/crontab 裏面填寫 stratup.sh文件的路徑即可。
在這裏插入圖片描述
既然你學會了發送天氣預報,那再加上每天發送一句語音或短視頻如何? ,用定製的蘿莉音,御姐音給對方發送天氣預報信息的語音或者附加一段短視頻,豈不美哉??點擊下方文章鏈接跳轉,學習diy語音以及獲取短視頻的方式吧。

  • diy定製自己的文字轉語音
  • 獲取抖音短視頻

點擊直達:【奇巧淫技】系列-Python實現 語音轉文字??非也!!是文字轉語音,DIY你想要的蘿莉音!!!
點擊直達:超簡單!!!利用python下載無水印某音視頻

以上,動手操作一番即可,就可以每天8點準時收到最新的天氣預報信息了。
如果你懶得動手,可以嘗試在留言裏動手留下你的郵箱+城市反正我也不會給你弄
這次的分享就到這裏。如果有什麼疑問可以在下方留言哦。

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