scripts/alert/weather_tips.py
2023-06-05 23:04:30 +08:00

99 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import sys
import json
import datetime
import requests
import time
def send_msg_tip(msg_tip):
# get the datetime, which is using at a failed situation
alert_datetime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
# Enterprise WeChat Bot API and the format of body to send
hook_url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ddea3f5f-fbfc-4c21-994a-71e9fc50e4ef'
body = {
"msgtype": "text",
"text": {
"content": msg_tip
}
}
# get the result of API call
res = requests.post(hook_url, data=json.dumps(body, ensure_ascii=False).encode('utf-8'))
# when failed, log it in /opt/logs/alert.log file
if res.status_code != 200:
with open('/opt/logs/alert.log', 'a', encoding='utf-8') as alert_log:
alert_log.write(alert_datetime + ' >>>> ')
alert_log.write('Failed sending message: ')
alert_log.write(msg_tip + '\n')
def weather_forcast(app_id, app_secret, city):
api_url = f"https://www.mxnzp.com/api/weather/forecast/{city}?app_id={app_id}&app_secret={app_secret}"
res = requests.get(api_url)
res_http_code = res.status_code
res_text = json.loads(res.text)
res_code = res_text['code']
res_msg = res_text['msg']
# print(res.text)
if res_http_code != 200 or res_code == 0:
print(f"接口查询失败:{res_msg}")
else:
# print(res_text['data']['forecasts'])
today = datetime.date.today()
hour = datetime.datetime.now().hour
msg_tip = f"{today} {hour}时,查询到{city}最近四天的天气情况如下:\n"
msg_tip += ('*' * 30 + '\n')
when = {1: '今天', 2: '明天', 3: '后天', 4: '大后天', }
week_index = {1: '', 2: '', 3: '', 4: '', 5: '', 6: '', 7: '', }
count = 1
for item in res_text['data']['forecasts']:
item_date = item['date']
item_dayofweek = week_index[int(item['dayOfWeek'])]
if item['dayWeather'] == item['nightWeather']:
msg_tip += f"{when[count]}({item_date} 星期{item_dayofweek})全天天气是{item['dayWeather']}"
else:
msg_tip += f"{when[count]}({item_date} 星期{item_dayofweek})白天天气是{item['dayWeather']},夜间会转为{item['nightWeather']}"
msg_tip += f"最高温{item['dayTemp']},最低温{item['nightTemp']}"
difftemp = int(item['dayTemp'].removesuffix('')) - int(item['nightTemp'].removesuffix(''))
if difftemp > 10:
msg_tip += f"昼夜温差{difftemp}℃,请注意增减衣物,切勿感冒;"
if item['dayWindDirection'] == item['nightWindDirection']:
msg_tip += f"{when[count]}全天是{item['dayWindDirection']}风,"
if item['dayWindPower'] == item['nightWindPower']:
msg_tip += f"风力为{item['dayWindPower']}\n"
else:
msg_tip += f"白天风力为{item['dayWindPower']},夜间风力为{item['nightWindPower']}\n"
else:
msg_tip += f"{when[count]}白天是{item['dayWeather']}风,夜间会转为{item['nightWeather']}风,"
if item['dayWindPower'] == item['nightWindPower']:
msg_tip += f"风力为{item['dayWindPower']}\n"
else:
msg_tip += f"白天风力为{item['dayWindPower']},夜间风力为{item['nightWindPower']}\n"
count += 1
msg_tip += ('*' * 30 + '\n')
# print(msg_tip)
send_msg_tip(msg_tip)
def main():
app_id = "nrsngdkvknqkrwko"
app_secret = "SFFmQWo2dnNBRjdNYkVSclZxa2ZvUT09"
# holiday_today(app_id, app_secret)
# ip_self(app_id, app_secret)
try:
city = sys.argv[1]
except Exception as Err:
print(f"Error Desc: {Err}. Maybe you need to supply correct city next time.")
exit(2)
weather_forcast(app_id, app_secret, city)
if __name__ == '__main__':
main()