侧边栏壁纸
博主头像
小康博客 博主等级

行动起来,活在当下

  • 累计撰写 14 篇文章
  • 累计创建 10 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

[青龙]调用高德API获取当前天气脚本及油价

康
2025-12-10 / 0 评论 / 0 点赞 / 6 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
文章部分素材源于网络,若您发现文中素材侵犯您权益,请联系我。我会及时核实处理,尊重知识产权,愿与大家共创健康有序的网络环境。
广告 广告

之前自己用的天气通知和每日油价通知,还是挺好用的,后面天气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位)以及油价的省。
会调用青龙的通知,设置每日几点通知一次就行了

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
  3. QQ打赏

    qrcode qq

评论区