Initial commit: WeChat bot project with AI chat, video export, and image upload scripts

This commit is contained in:
anqiang12
2026-06-18 15:53:24 +08:00
commit 3b1e106cb0
16 changed files with 2541 additions and 0 deletions

125
get_tianqi.py Normal file
View File

@@ -0,0 +1,125 @@
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)