qwen_agent/skills/weather/scripts/weather_query.py
2026-03-24 00:40:19 +08:00

138 lines
4.4 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.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
中国天气网天气查询命令行工具
数据来源www.weather.com.cn
"""
import argparse
import json
import sys
from weather import query_weather, query_current_weather, search_city, find_city_code
def cmd_query(args):
"""查询天气预报"""
city_code = find_city_code(args.city)
if not city_code:
print(f"错误:未找到城市 \"{args.city}\",请使用 search 命令搜索城市")
return 1
if args.current:
# 查询当前天气
result = query_current_weather(args.city)
if result:
print(result)
return 0
else:
print(f"错误:无法获取 {args.city} 的当前天气")
return 1
else:
# 查询天气预报
days = args.days or 7
result = query_weather(args.city, days)
if result:
print(result)
return 0
else:
print(f"错误:无法获取 {args.city} 的天气预报")
return 1
def cmd_search(args):
"""搜索城市"""
cities = search_city(args.keyword)
if not cities:
print(f"未找到包含 \"{args.keyword}\" 的城市")
return 1
print(f"找到 {len(cities)} 个匹配的城市:")
print("-" * 40)
for city in cities[:args.limit]:
print(f" {city['name']}: {city['code']}")
return 0
def cmd_json(args):
"""输出JSON格式的天气数据"""
city_code = find_city_code(args.city)
if not city_code:
print(f"错误:未找到城市 \"{args.city}\"")
return 1
from weather import WeatherQuery
query = WeatherQuery()
weather_info = query.query(args.city, args.days or 7)
if weather_info:
data = {
"city": weather_info[0].city,
"update_time": weather_info[0].update_time,
"forecast": [
{
"date": info.date,
"weather": info.weather,
"temperature": info.temperature,
"wind": info.wind,
}
for info in weather_info
]
}
print(json.dumps(data, ensure_ascii=False, indent=2))
return 0
else:
print(f"错误:无法获取 {args.city} 的天气数据")
return 1
def main():
parser = argparse.ArgumentParser(
description="中国天气网天气查询工具",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
示例:
%(prog)s query 杭州 # 查询杭州7天天气预报
%(prog)s query 北京 --days 3 # 查询北京3天天气预报
%(prog)s query 深圳 --current # 查询深圳当前天气
%(prog)s search 州 # 搜索带""字的城市
%(prog)s json 杭州 --days 3 # 输出JSON格式的天气数据
"""
)
subparsers = parser.add_subparsers(dest="command", help="子命令")
# query 命令
query_parser = subparsers.add_parser("query", help="查询天气预报")
query_parser.add_argument("city", help="城市名称,如:杭州、北京、上海")
query_parser.add_argument("--days", type=int, choices=[1, 3, 7, 15, 40],
help="查询天数 (1, 3, 7, 15, 40)默认7天")
query_parser.add_argument("--current", "-c", action="store_true",
help="查询当前天气而非预报")
query_parser.set_defaults(func=cmd_query)
# search 命令
search_parser = subparsers.add_parser("search", help="搜索城市")
search_parser.add_argument("keyword", help="搜索关键词")
search_parser.add_argument("--limit", type=int, default=20,
help="返回结果数量限制默认20")
search_parser.set_defaults(func=cmd_search)
# json 命令
json_parser = subparsers.add_parser("json", help="输出JSON格式的天气数据")
json_parser.add_argument("city", help="城市名称")
json_parser.add_argument("--days", type=int, choices=[1, 3, 7, 15, 40],
help="查询天数默认7天")
json_parser.set_defaults(func=cmd_json)
args = parser.parse_args()
if not args.command:
parser.print_help()
return 1
return args.func(args)
if __name__ == "__main__":
sys.exit(main())