Files
agent_test/get_tianqi.py

125 lines
4.5 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 requests
# ===================== 配置区仅需替换你的高德Key=====================
GAODE_KEY = "ff608780d5d18bab2f875a62b9c0c106" # 必须是Web服务类型Key
# ======================================================================
# 高德API基础地址
GEO_URL = "https://restapi.amap.com/v3/geocode/geo" # 地理编码城市名转ADCODE
WEATHER_URL = "https://restapi.amap.com/v3/weather/weatherInfo" # 天气API
def get_city_adcode(city_name: str) -> str:
"""
【核心函数】传入城市名称字符串返回高德ADCODE编码
:param city_name: 城市名(如:北京、上海市、深圳、朝阳区、杭州)
:return: 城市ADCODE编码失败返回None
"""
params = {
"key": GAODE_KEY,
"address": city_name, # 传入的城市名称
"output": "json"
}
try:
response = requests.get(GEO_URL, params=params, timeout=10)
data = response.json()
# 调用成功解析ADCODE
if data.get("status") == "1" and data.get("geocodes"):
adcode = data["geocodes"][0]["adcode"]
print(f"✅ 城市【{city_name}】匹配成功ADCODE编码{adcode}")
return adcode
else:
print(f"❌ 未找到城市【{city_name}】,请检查城市名称是否正确")
return None
except Exception as e:
print(f"❌ 查询编码失败:{str(e)}")
return None
def get_gaode_weather(adcode: str, is_forecast=False):
"""调用高德天气API实时/4天预报"""
params = {
"key": GAODE_KEY,
"city": adcode,
"extensions": "base" if not is_forecast else "all",
"output": "json"
}
try:
response = requests.get(WEATHER_URL, params=params, timeout=10)
data = response.json()
return data if data.get("status") == "1" else None
except:
return None
def format_weather_info(data) -> str:
"""格式化天气信息并返回字符串"""
if not data:
return "天气数据获取失败"
result = []
# 实时天气
if "lives" in data:
live = data["lives"][0]
result.append(f"【实时天气】")
result.append(f"城市:{live['city']}")
result.append(f"天气:{live['weather']}")
result.append(f"温度:{live['temperature']}")
result.append(f"风向:{live['winddirection']}")
result.append(f"风力:{live['windpower']}")
result.append(f"湿度:{live['humidity']}%")
# 4天预报
if "forecasts" in data:
forecast = data["forecasts"][0]
result.append(f"\n{forecast['city']} 4天预报】")
for day in forecast["casts"]:
result.append(f"{day['date']}:白天{day['dayweather']},夜间{day['nightweather']},气温{day['nighttemp']}~{day['daytemp']}")
return "\n".join(result)
def print_weather_info(data):
"""格式化打印天气信息"""
print(format_weather_info(data))
def get_tianqi_data(city_name: str) -> str:
"""
【供外部调用的主函数】传入城市名称,返回格式化的天气信息字符串
:param city_name: 城市名称(如:北京、上海、深圳)
:return: 格式化的天气信息字符串
"""
# 1. 获取城市ADCODE
adcode = get_city_adcode(city_name)
if not adcode:
return f"未找到城市【{city_name}】的天气信息"
# 2. 获取实时天气
realtime = get_gaode_weather(adcode, is_forecast=False)
# 3. 获取4天预报
forecast = get_gaode_weather(adcode, is_forecast=True)
# 4. 合并结果
result = []
if realtime:
result.append(format_weather_info(realtime))
if forecast:
result.append(format_weather_info(forecast))
return "\n\n".join(result) if result else f"获取【{city_name}】天气失败"
# ===================== 使用示例(直接改这里的城市名)=====================
# if __name__ == "__main__":
# # 1. 传入城市名称(字符串),自动获取编码
# city_name = "北京" # 这里修改为你要查询的城市:上海、广州、深圳、成都、重庆等
# city_adcode = get_city_adcode(city_name)
# # 2. 获取编码成功后,查询天气
# if city_adcode:
# # 实时天气
# realtime = get_gaode_weather(city_adcode, is_forecast=False)
# print_weather_info(realtime)
# # 4天预报
# forecast = get_gaode_weather(city_adcode, is_forecast=True)
# print_weather_info(forecast)