|
|
之前自己用的天气通知和每日油价通知,还是挺好用的,后面天气api坏了,就一直没有时间修
今天终于有时间搞一下了,就直接把api改高德的了,自己使用免费次数肯定够用
api注册地址:https://console.amap.com 个人认证免费5000次/月
相关代码
- import requests
- from bs4 import BeautifulSoup
- import time
- import notify
- from datetime import datetime
- # 用户输入的秘钥和城市编码
- API_KEY = "9********e" # 高德地图API key
- CITY_CODE = "3****3" # 城市编码:地理位置(所属地区身份证前6位)
- # 天气状况翻译表(只保留需要翻译的,相同的自动使用原词)
- WEATHER_TRANSLATION = {
- "晴": "晴天",
- "阴": "阴天"
- }
- def fetch_weather_data(url):
- """从指定 URL 获取天气数据"""
- try:
- return requests.get(url).json()
- except Exception as e:
- print(f"抓取天气信息失败: {e}")
- return {}
- def get_weather_info(api_key, city_code):
- """获取实时和当日天气信息"""
- # 实时天气API和预报天气API
- urls = [
- f"https://restapi.amap.com/v3/weather/weatherInfo?key={api_key}&city={city_code}&extensions=base",
- f"https://restapi.amap.com/v3/weather/weatherInfo?key={api_key}&city={city_code}&extensions=all"
- ]
-
- # 获取实时和预报天气数据
- realtime_data, forecast_data = [fetch_weather_data(url) for url in urls]
- # 检查API响应是否成功
- if realtime_data.get('status') != '1' or forecast_data.get('status') != '1':
- return "无法获取天气数据。"
- # 提取并解析数据
- realtime = realtime_data.get('lives', [{}])[0]
- forecast = forecast_data.get('forecasts', [{}])[0]
- today = forecast.get('casts', [{}])[0]
-
- if not realtime or not forecast or not today:
- return "无法解析天气数据。"
- # 构建输出字符串
- return (
- f"实时天气情况: {WEATHER_TRANSLATION.get(realtime.get('weather', '未知'), realtime.get('weather', '未知'))}\n"
- f"实时温度: {realtime.get('temperature', '0')}°C\n"
- f"湿度: {realtime.get('humidity', '0')}%\n"
- f"风向: {realtime.get('winddirection', '未知')}\n"
- f"风力: {realtime.get('windpower', '0')}级\n"
- f"数据更新时间: {realtime.get('reporttime', '')}\n"
- f"\n当日天气情况: {WEATHER_TRANSLATION.get(today.get('dayweather', '未知'), today.get('dayweather', '未知'))}\n"
- f"夜间天气情况: {WEATHER_TRANSLATION.get(today.get('nightweather', '未知'), today.get('nightweather', '未知'))}\n"
- f"当日温度: {today.get('nighttemp', '0')}°C ~ {today.get('daytemp', '0')}°C\n"
- f"白天风向: {today.get('daywind', '未知')}\n"
- f"白天风力: {today.get('daypower', '0')}级\n"
- f"夜间风向: {today.get('nightwind', '未知')}\n"
- f"夜间风力: {today.get('nightpower', '0')}级\n"
- )
- def main():
- """主程序入口"""
- # 网页 URL
- url = "https://www.cngold.org/crude/shandong.html"
- # 设置请求头,模拟浏览器
- headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
- # 发送 HTTP 请求并解析汽油价格
- try:
- response = requests.get(url, headers=headers)
- if response.status_code == 200:
- soup = BeautifulSoup(response.content, 'html.parser')
- table = soup.find('table', class_='hq_table1')
- if table:
- headers = [th.get_text(strip=True) for th in table.find('thead').find_all('th')]
- for row in table.find('tbody').find_all('tr'):
- cells = [td.get_text(strip=True) for td in row.find_all('td')]
- try:
- index = headers.index("92#汽油")
- oil_price_message = f"92#价格: {cells[index]}\n\n"
- break
- except ValueError:
- oil_price_message = "未找到 92号汽油 列\n"
- break
- else:
- oil_price_message = "未找到表格\n"
- else:
- oil_price_message = f"请求失败,状态码: {response.status_code}\n"
- except Exception as e:
- oil_price_message = f"获取汽油价格失败: {e}\n"
- # 增加请求间隔
- time.sleep(0.5) # 暂停 0.5 秒钟
- # 调用天气信息函数并合并消息
- weather_msg = f"天气信息:\n{get_weather_info(API_KEY, CITY_CODE)}"
- current_date = datetime.now().strftime("%Y-%m-%d")
- summary_msg = f"{oil_price_message}{weather_msg}"
- notify.send(f"今日资讯 {current_date}", summary_msg)
- print(f"通知内容:\n{summary_msg}")
- print("通知发送成功")
- if __name__ == "__main__":
- main()
复制代码
需要修改的地方
第8,9,68行代码,主要是修改api的key,地理位置(你地区身份证前6位)以及油价的省。
会调用青龙的通知,设置每日几点通知一次就行了
|
|