From df04822839b11470cf15c447265cb5976251fea5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 08:33:49 +0000 Subject: [PATCH 1/3] Initial plan From 1e4775b0bc861e0c0cebe999b8d56f7d5386811b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 08:37:19 +0000 Subject: [PATCH 2/3] Add city name parameter support and WeatherSkill Co-authored-by: whitejoce <36195824+whitejoce@users.noreply.github.com> --- GetWeather.py | 47 ++++++++++----- WeatherSkill.py | 77 +++++++++++++++++++++++++ __pycache__/GetWeather.cpython-312.pyc | Bin 0 -> 12830 bytes 3 files changed, 108 insertions(+), 16 deletions(-) create mode 100644 WeatherSkill.py create mode 100644 __pycache__/GetWeather.cpython-312.pyc diff --git a/GetWeather.py b/GetWeather.py index ba05319..fee098b 100644 --- a/GetWeather.py +++ b/GetWeather.py @@ -202,23 +202,30 @@ def weather_alarm(alarm_list): + id["w11"] ) -def main_weather_process(output=0): +def main_weather_process(output=0, city_name=None): try: - address, code = get_CityName() - if len(address) == 0: - address = input(" [?] 请手动输入所在地(例:广州)[输入为空即退出]:") - if address == "": - print(" [#] 退出脚本") + if city_name: + if CheckInput(city_name): + print(" [!]检测非地名字符,退出脚本") sys.exit(1) - else: - if CheckInput(address): - print(" [!]检测非地名字符,退出脚本") + print(" [+] 使用指定城市:" + city_name) + code = get_city_code(city_name) + else: + address, code = get_CityName() + if len(address) == 0: + address = input(" [?] 请手动输入所在地(例:广州)[输入为空即退出]:") + if address == "": + print(" [#] 退出脚本") sys.exit(1) else: - print(" [+] 使用手动输入定位位置:"+address) - code = get_city_code(address) - else: - print(" [+] 自动定位位置:"+address) + if CheckInput(address): + print(" [!]检测非地名字符,退出脚本") + sys.exit(1) + else: + print(" [+] 使用手动输入定位位置:"+address) + code = get_city_code(address) + else: + print(" [+] 自动定位位置:"+address) try: weather_text = get_weather(code) @@ -274,13 +281,21 @@ def debug_mode(city): # 改动 2:支持命令行参数解析 parser = argparse.ArgumentParser(description="Weather Script with Debug Mode") parser.add_argument("--debug", action="store_true", help="启用 Debug 模式,仅检查状态码") - parser.add_argument("--city", type=str, default="101280601", help="城市代码 (默认: 广州)") + parser.add_argument("--city", type=str, default=None, help="城市名称 (例:北京)") parser.add_argument("--output", type=int, default=0, help="输出模式,0为shell输出,1为窗口输出(窗口仅输出天气信息)") args = parser.parse_args() # 改动 3:根据参数选择运行模式 if args.debug: - debug_mode(args.city) + if args.city: + try: + city_code = get_city_code(args.city) + except SystemExit: + print(f" [!] Debug 模式:未能找到城市 '{args.city}' 的城市代码,退出") + sys.exit(1) + else: + city_code = "101280601" + debug_mode(city_code) else: output = args.output - main_weather_process(output) + main_weather_process(output, city_name=args.city) diff --git a/WeatherSkill.py b/WeatherSkill.py new file mode 100644 index 0000000..bbc1809 --- /dev/null +++ b/WeatherSkill.py @@ -0,0 +1,77 @@ +#!/usr/bin/python +# _*_coding: utf-8 _*_ +# WeatherSkill: 天气查询 Skill,基于 GetWeather.py + +import sys +import argparse + +from GetWeather import ( + get_CityName, + get_city_code, + get_weather, + CheckInput, +) + + +def query_weather(city_name: str) -> str: + """ + 查询指定城市的天气信息,返回天气文本。 + + 参数: + city_name (str): 城市名称,例如 "北京"、"上海" + + 返回: + str: 格式化的天气信息文本;若查询失败则返回错误提示字符串。 + """ + if not city_name or not city_name.strip(): + return " [!] 城市名称不能为空" + city_name = city_name.strip() + if CheckInput(city_name): + return " [!] 检测到非地名字符(不能包含数字、纯空格或英文字母),请输入有效的城市名称(例:北京)" + try: + code = get_city_code(city_name) + weather_text = get_weather(code) + return weather_text + except SystemExit: + return f" [!] 未能找到城市 '{city_name}' 的天气信息" + except Exception as e: + return f" [!] 查询天气时出错: {e}" + + +def query_weather_auto() -> str: + """ + 自动定位并查询当前所在城市的天气信息,返回天气文本。 + + 返回: + str: 格式化的天气信息文本;若定位或查询失败则返回错误提示字符串。 + """ + try: + address, code = get_CityName() + if not address: + return " [!] 无法自动定位城市,请使用 query_weather(city_name) 指定城市" + weather_text = get_weather(code) + return weather_text + except SystemExit: + return " [!] 未能获取当前位置的天气信息" + except Exception as e: + return f" [!] 查询天气时出错: {e}" + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="天气查询 Skill — 通过城市名称查询实时天气" + ) + parser.add_argument( + "--city", + type=str, + default=None, + help="城市名称 (例:北京);不指定时自动定位", + ) + args = parser.parse_args() + + if args.city: + result = query_weather(args.city) + else: + result = query_weather_auto() + + print("\n" + result + "\n") diff --git a/__pycache__/GetWeather.cpython-312.pyc b/__pycache__/GetWeather.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fd81bd0499fc49bfc99f35dc51a4c428accc86b8 GIT binary patch literal 12830 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 N+ZI-0>H=xH{x8WxfF%F` literal 0 HcmV?d00001 From ab556f3e696c78eab0371297c6545e65b71bd6ce Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 08:37:35 +0000 Subject: [PATCH 3/3] Add .gitignore to exclude build artifacts Co-authored-by: whitejoce <36195824+whitejoce@users.noreply.github.com> --- .gitignore | 5 +++++ __pycache__/GetWeather.cpython-312.pyc | Bin 12830 -> 0 bytes 2 files changed, 5 insertions(+) create mode 100644 .gitignore delete mode 100644 __pycache__/GetWeather.cpython-312.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..844b9da --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +__pycache__/ +*.pyc +*.pyo +response.html +debug_results.json diff --git a/__pycache__/GetWeather.cpython-312.pyc b/__pycache__/GetWeather.cpython-312.pyc deleted file mode 100644 index fd81bd0499fc49bfc99f35dc51a4c428accc86b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12830 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 N+ZI-0>H=xH{x8WxfF%F`