diff --git a/Apilot.py b/Apilot.py index 5032c7d..f5ff803 100644 --- a/Apilot.py +++ b/Apilot.py @@ -25,6 +25,7 @@ def __init__(self): super().__init__() try: self.conf = super().load_config() + self.condition_2_and_3_cities = None # 天气查询,存储重复城市信息,Initially set to None if not self.conf: logger.warn("[Apilot] inited but alapi_token not found in config") self.alapi_token = None # Setting a default value for alapi_token @@ -40,7 +41,7 @@ def on_handle_context(self, e_context: EventContext): ContextType.TEXT ]: return - content = e_context["context"].content + content = e_context["context"].content.strip() logger.debug("[Apilot] on_handle_context. content: %s" % content) if content == "早报": @@ -60,19 +61,29 @@ def on_handle_context(self, e_context: EventContext): # Extract the part after "快递" tracking_number = content[2:].strip() + tracking_number = tracking_number.replace(':', ':') # 替换可能出现的中文符号 # Check if alapi_token is available before calling the function if not self.alapi_token: self.handle_error("alapi_token not configured", "快递请求失败") reply = self.create_reply(ReplyType.TEXT, "请先配置alapi的token") else: + # Check if the tracking_number starts with "SF" for Shunfeng (顺丰) Express + if tracking_number.startswith("SF"): + # Check if the user has included the last four digits of the phone number + if ':' not in tracking_number: + reply = self.create_reply(ReplyType.TEXT, "顺丰快递需要补充寄/收件人手机号后四位,格式:SF12345:0000") + e_context["reply"] = reply + e_context.action = EventAction.BREAK_PASS # 事件结束,并跳过处理context的默认逻辑 + return # End the function here + # Call query_express_info function with the extracted tracking_number and the alapi_token from config content = self.query_express_info(self.alapi_token, tracking_number) reply = self.create_reply(ReplyType.TEXT, content) e_context["reply"] = reply e_context.action = EventAction.BREAK_PASS # 事件结束,并跳过处理context的默认逻辑 - match = re.match(r'^([\u4e00-\u9fa5]{2}座)$', content) - if match: + horoscope_match = re.match(r'^([\u4e00-\u9fa5]{2}座)$', content) + if horoscope_match: if content in ZODIAC_MAPPING: zodiac_english = ZODIAC_MAPPING[content] content = self.get_horoscope(zodiac_english) @@ -82,30 +93,49 @@ def on_handle_context(self, e_context: EventContext): e_context["reply"] = reply e_context.action = EventAction.BREAK_PASS # 事件结束,并跳过处理context的默认逻辑 - if content == "微博热搜": - content = self.get_weibo_hot_trends() + hot_trend_match = re.search(r'(.{1,6})热榜$', content) + if hot_trend_match: + hot_trends_type = hot_trend_match.group(1).strip() # 提取匹配的组并去掉可能的空格 + content = self.get_hot_trends(hot_trends_type) reply = self.create_reply(ReplyType.TEXT, content) e_context["reply"] = reply e_context.action = EventAction.BREAK_PASS # 事件结束,并跳过处理context的默认逻辑 + # 天气查询 - weather_match = re.search(r'([\u4e00-\u9fa5]{1,6})的?天气$', content) + weather_match = re.search(r'([\u4e00-\u9fa5]{1,6}|\d{1,10})\s*的?天气$', content) if weather_match: - # 如果匹配成功,提取第一个捕获组(可能包含“的”的城市名) - city_with_optional_de = weather_match.group(1) - # 移除可能存在的“的” - city = city_with_optional_de.replace('的', '') + # 如果匹配成功,提取第一个捕获组 + content = weather_match.group(1) if not self.alapi_token: self.handle_error("alapi_token not configured", "天气请求失败") reply = self.create_reply(ReplyType.TEXT, "请先配置alapi的token") else: - content = self.get_weather(self.alapi_token, city) + content = self.get_weather(self.alapi_token, content) reply = self.create_reply(ReplyType.TEXT, content) e_context["reply"] = reply e_context.action = EventAction.BREAK_PASS # 事件结束,并跳过处理context的默认逻辑 - def get_help_text(self, **kwargs): - help_text = "\n🐳发送“早报”、“摸鱼”、“微博热搜”、“星座名称”会有惊喜!\n📦快递查询:<快递+快递单号>\n🌦️天气查询:城市+天气" + def get_help_text(self, verbose=False, **kwargs): + short_help_text = " 发送特定指令以获取早报、查询天气、星座运势、快递信息等!" + + if not verbose: + return short_help_text + + help_text = "📚 发送关键词获取特定信息!\n" + + # 娱乐和信息类 + help_text += "\n🎉 娱乐与资讯:\n" + help_text += " 🌅 早报: 发送“早报”获取早报。\n" + help_text += " 🐟 摸鱼: 发送“摸鱼”获取摸鱼人日历。\n" + help_text += " 🔥 热榜: 发送“xx热榜”查看支持的热榜。\n" + + # 查询类 + help_text += "\n🔍 查询工具:\n" + help_text += " 🌦️ 天气: 发送“城市+天气”查天气,如“北京天气”。\n" + help_text += " 📦 快递: 发送“快递+单号”查询快递状态。如“快递112345655”\n" + help_text += " 🌌 星座: 发送星座名称查看今日运势,如“白羊座”。\n" + return help_text @@ -150,7 +180,6 @@ def get_moyu_calendar(self): except Exception as e: return self.handle_error(e, "获取摸鱼日历信息失败") - def get_horoscope(self, astro_sign: str, time_period: str = "today"): url = BASE_URL_VVHAN + "horoscope" params = { @@ -191,24 +220,33 @@ def get_horoscope(self, astro_sign: str, time_period: str = "today"): except Exception as e: return self.handle_error(e, "获取星座信息失败") - - def get_weibo_hot_trends(self): - url = BASE_URL_VVHAN + "wbhot" - try: - data = self.make_request(url, "GET") - if isinstance(data, dict) and data['success'] == True: - output = [] - topics = data['data'] - output.append(f'更新时间:{data["time"]}\n') - for i, topic in enumerate(topics[:15], 1): - formatted_str = f"{i}. {topic['title']} ({topic['hot']} 浏览)\nURL: {topic['url']}\n" - output.append(formatted_str) - return "\n".join(output) - else: - return self.handle_error(data, "热榜获取失败") - except Exception as e: - return self.handle_error(e, "获取热搜失败") - + def get_hot_trends(self, hot_trends_type): + # 查找映射字典以获取API参数 + hot_trends_type_en = hot_trend_types.get(hot_trends_type, None) + if hot_trends_type_en is not None: + url = BASE_URL_VVHAN + "hotlist?type=" + hot_trends_type_en + try: + data = self.make_request(url, "GET") + if isinstance(data, dict) and data['success'] == True: + output = [] + topics = data['data'] + output.append(f'更新时间:{data["update_time"]}\n') + for i, topic in enumerate(topics[:15], 1): + hot = topic.get('hot', '无热度参数, 0') + formatted_str = f"{i}. {topic['title']} ({hot} 浏览)\nURL: {topic['url']}\n" + output.append(formatted_str) + return "\n".join(output) + else: + return self.handle_error(data, "热榜获取失败") + except Exception as e: + return self.handle_error(e, "获取热榜失败") + else: + supported_types = "/".join(hot_trend_types.keys()) + final_output = ( + f"👉 已支持的类型有:\n\n {supported_types}\n" + f"\n📝 请按照以下格式发送:\n 类型+热榜 例如:微博热榜" + ) + return final_output def query_express_info(self, alapi_token, tracking_number, com="", order="asc"): url = BASE_URL_ALAPI + "kd" @@ -238,12 +276,28 @@ def query_express_info(self, alapi_token, tracking_number, com="", order="asc"): except Exception as e: return self.handle_error(e, "快递查询失败") - def get_weather(self, alapi_token, city: str): + def get_weather(self, alapi_token, city_or_id: str): url = BASE_URL_ALAPI + 'tianqi' - params = { - 'city': city, - 'token': f'{alapi_token}' # 请将你的token填在这里 - } + # 判断使用id还是city请求api + if city_or_id.isnumeric(): # 判断是否为纯数字,也即是否为 city_id + params = { + 'city_id': city_or_id, + 'token': f'{alapi_token}' + } + else: + city_info = self.check_multiple_city_ids(city_or_id) + if city_info: + data = city_info['data'] + formatted_city_info = "\n".join( + [f"{idx + 1}) {entry['province']}--{entry['leader']}, ID: {entry['city_id']}" + for idx, entry in enumerate(data)] + ) + return f"查询 <{city_or_id}> 具有多条数据:\n{formatted_city_info}\n请使用id查询,发送“id天气”" + + params = { + 'city': city_or_id, + 'token': f'{alapi_token}' + } try: weather_data = self.make_request(url, "GET", params=params) if isinstance(weather_data, dict) and weather_data.get('code') == 200: @@ -330,7 +384,6 @@ def create_reply(self, reply_type, content): reply.content = content return reply - def handle_error(self, error, message): logger.error(f"{message},错误信息:{error}") return message @@ -341,6 +394,25 @@ def is_valid_url(self, url): return all([result.scheme, result.netloc]) except ValueError: return False + + def load_city_conditions(self): + if self.condition_2_and_3_cities is None: + try: + json_file_path = os.path.join(os.path.dirname(__file__), 'duplicate-citys.json') + with open(json_file_path, 'r', encoding='utf-8') as f: + self.condition_2_and_3_cities = json.load(f) + except Exception as e: + return self.handle_error(e, "加载condition_2_and_3_cities.json失败") + + + def check_multiple_city_ids(self, city): + self.load_city_conditions() + city_info = self.condition_2_and_3_cities.get(city, None) + if city_info: + return city_info + return None + + ZODIAC_MAPPING = { '白羊座': 'aries', '金牛座': 'taurus', @@ -355,3 +427,16 @@ def is_valid_url(self, url): '水瓶座': 'aquarius', '双鱼座': 'pisces' } + +hot_trend_types = { + "微博": "wbHot", + "虎扑": "huPu", + "知乎": "zhihuHot", + "哔哩哔哩": "bili", + "36氪": "36Ke", + "抖音": "douyinHot", + "少数派": "ssPai", + "IT最新": "itNews", + "IT科技": "itInfo" + +} \ No newline at end of file diff --git a/README.md b/README.md index c560994..9baca8e 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,8 @@ 复制插件目录的`config.json.template`文件并重命名为`config.json`,在`alapi_token`字段填入申请的token,token申请点击这里[alapi](https://admin.alapi.cn/account/center) ### 使用 -* 对话框发送“早报”、“摸鱼”、"微博热搜"、”任意星座名称”可以直接返回对应的内容! +* 对话框发送“早报”、“摸鱼”、"微博热搜(已更新为"微博热榜)"、”任意星座名称”可以直接返回对应的内容! - @@ -34,13 +33,16 @@ * 快递查询格式:快递+快递编号。如:快递YT2505082504474,如下图! - - + * 天气查询格式:城市+天气。如:成都天气。(支持3400+城市天气,输入不正确或者查询失败返回北京天气) - + + +* 热榜查询。支持:<微博/虎扑/知乎/哔哩哔哩/36氪/抖音/少数派/IT最新/IT科技> + + diff --git a/duplicate-citys.json b/duplicate-citys.json new file mode 100644 index 0000000..66c19a1 --- /dev/null +++ b/duplicate-citys.json @@ -0,0 +1,1192 @@ +{ + "朝阳": { + "condition": 2, + "data": [ + { + "province": "北京", + "leader": "北京", + "city_id": "101010300" + }, + { + "province": "吉林", + "leader": "长春", + "city_id": "101060110" + }, + { + "province": "辽宁", + "leader": "朝阳", + "city_id": "101071201" + } + ] + }, + "通州": { + "condition": 2, + "data": [ + { + "province": "北京", + "leader": "北京", + "city_id": "101010600" + }, + { + "province": "江苏", + "leader": "南通", + "city_id": "101190509" + } + ] + }, + "宝山": { + "condition": 2, + "data": [ + { + "province": "上海", + "leader": "上海", + "city_id": "101020300" + }, + { + "province": "黑龙江", + "leader": "双鸭山", + "city_id": "101051309" + } + ] + }, + "长宁": { + "condition": 2, + "data": [ + { + "province": "上海", + "leader": "长宁", + "city_id": "101021300" + }, + { + "province": "四川", + "leader": "宜宾", + "city_id": "101271106" + } + ] + }, + "普陀": { + "condition": 2, + "data": [ + { + "province": "上海", + "leader": "普陀", + "city_id": "101021500" + }, + { + "province": "浙江", + "leader": "舟山", + "city_id": "101211105" + } + ] + }, + "和平": { + "condition": 2, + "data": [ + { + "province": "天津", + "leader": "和平", + "city_id": "101030800" + }, + { + "province": "辽宁", + "leader": "沈阳", + "city_id": "101070107" + }, + { + "province": "广东", + "leader": "河源", + "city_id": "101281204" + } + ] + }, + "河东": { + "condition": 2, + "data": [ + { + "province": "天津", + "leader": "河东", + "city_id": "101031200" + }, + { + "province": "山东", + "leader": "临沂", + "city_id": "101120913" + } + ] + }, + "江北": { + "condition": 2, + "data": [ + { + "province": "重庆", + "leader": "江北", + "city_id": "101043700" + }, + { + "province": "浙江", + "leader": "宁波", + "city_id": "101210409" + } + ] + }, + "甘南": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "齐齐哈尔", + "city_id": "101050204" + }, + { + "province": "甘肃", + "leader": "甘南", + "city_id": "101161209" + } + ] + }, + "东安": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "牡丹江", + "city_id": "101050308" + }, + { + "province": "湖南", + "leader": "永州", + "city_id": "101251403" + } + ] + }, + "西安": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "牡丹江", + "city_id": "101050311" + }, + { + "province": "吉林", + "leader": "辽源", + "city_id": "101060705" + }, + { + "province": "陕西", + "leader": "西安", + "city_id": "101110101" + } + ] + }, + "向阳": { + "condition": 3, + "data": [ + { + "province": "黑龙江", + "leader": "佳木斯", + "city_id": "101050408" + }, + { + "province": "黑龙江", + "leader": "鹤岗", + "city_id": "101051204" + } + ] + }, + "郊区": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "佳木斯", + "city_id": "101050411" + }, + { + "province": "山西", + "leader": "阳泉", + "city_id": "101100305" + }, + { + "province": "山西", + "leader": "长治", + "city_id": "101100512" + }, + { + "province": "安徽", + "leader": "铜陵", + "city_id": "101221304" + } + ] + }, + "西林": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "伊春", + "city_id": "101050808" + }, + { + "province": "广西", + "leader": "百色", + "city_id": "101301009" + } + ] + }, + "大同": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "大庆", + "city_id": "101050910" + }, + { + "province": "山西", + "leader": "大同", + "city_id": "101100201" + } + ] + }, + "新兴": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "七台河", + "city_id": "101051001" + }, + { + "province": "广东", + "leader": "云浮", + "city_id": "101281403" + } + ] + }, + "梨树": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "鸡西", + "city_id": "101051108" + }, + { + "province": "吉林", + "leader": "四平", + "city_id": "101060403" + } + ] + }, + "南山": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "鹤岗", + "city_id": "101051206" + }, + { + "province": "广东", + "leader": "深圳", + "city_id": "101280604" + } + ] + }, + "兴安": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "鹤岗", + "city_id": "101051207" + }, + { + "province": "广西", + "leader": "桂林", + "city_id": "101300506" + } + ] + }, + "东山": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "鹤岗", + "city_id": "101051208" + }, + { + "province": "福建", + "leader": "漳州", + "city_id": "101230608" + } + ] + }, + "兴山": { + "condition": 2, + "data": [ + { + "province": "黑龙江", + "leader": "鹤岗", + "city_id": "101051209" + }, + { + "province": "湖北", + "leader": "宜昌", + "city_id": "101200904" + } + ] + }, + "宽城": { + "condition": 2, + "data": [ + { + "province": "吉林", + "leader": "长春", + "city_id": "101060109" + }, + { + "province": "河北", + "leader": "承德", + "city_id": "101090409" + } + ] + }, + "昌邑": { + "condition": 2, + "data": [ + { + "province": "吉林", + "leader": "吉林", + "city_id": "101060207" + }, + { + "province": "山东", + "leader": "潍坊", + "city_id": "101120606" + } + ] + }, + "铁西": { + "condition": 2, + "data": [ + { + "province": "吉林", + "leader": "四平", + "city_id": "101060406" + }, + { + "province": "辽宁", + "leader": "沈阳", + "city_id": "101070111" + }, + { + "province": "辽宁", + "leader": "鞍山", + "city_id": "101070306" + } + ] + }, + "铁东": { + "condition": 2, + "data": [ + { + "province": "吉林", + "leader": "四平", + "city_id": "101060407" + }, + { + "province": "辽宁", + "leader": "鞍山", + "city_id": "101070305" + } + ] + }, + "大安": { + "condition": 2, + "data": [ + { + "province": "吉林", + "leader": "白城", + "city_id": "101060603" + }, + { + "province": "四川", + "leader": "自贡", + "city_id": "101270306" + } + ] + }, + "龙山": { + "condition": 2, + "data": [ + { + "province": "吉林", + "leader": "辽源", + "city_id": "101060704" + }, + { + "province": "湖南", + "leader": "湘西", + "city_id": "101251507" + } + ] + }, + "中山": { + "condition": 2, + "data": [ + { + "province": "辽宁", + "leader": "大连", + "city_id": "101070208" + }, + { + "province": "广东", + "leader": "中山", + "city_id": "101281701" + } + ] + }, + "海城": { + "condition": 2, + "data": [ + { + "province": "辽宁", + "leader": "鞍山", + "city_id": "101070304" + }, + { + "province": "广西", + "leader": "北海", + "city_id": "101301304" + } + ] + }, + "平山": { + "condition": 2, + "data": [ + { + "province": "辽宁", + "leader": "本溪", + "city_id": "101070503" + }, + { + "province": "河北", + "leader": "石家庄", + "city_id": "101090111" + } + ] + }, + "东港": { + "condition": 2, + "data": [ + { + "province": "辽宁", + "leader": "丹东", + "city_id": "101070604" + }, + { + "province": "山东", + "leader": "日照", + "city_id": "101121504" + } + ] + }, + "太和": { + "condition": 2, + "data": [ + { + "province": "辽宁", + "leader": "锦州", + "city_id": "101070708" + }, + { + "province": "安徽", + "leader": "阜阳", + "city_id": "101220806" + } + ] + }, + "海州": { + "condition": 2, + "data": [ + { + "province": "辽宁", + "leader": "阜新", + "city_id": "101070903" + }, + { + "province": "江苏", + "leader": "连云港", + "city_id": "101191006" + } + ] + }, + "清河": { + "condition": 2, + "data": [ + { + "province": "辽宁", + "leader": "铁岭", + "city_id": "101071107" + }, + { + "province": "河北", + "leader": "邢台", + "city_id": "101090914" + }, + { + "province": "江苏", + "leader": "淮安", + "city_id": "101190907" + } + ] + }, + "连山": { + "condition": 2, + "data": [ + { + "province": "辽宁", + "leader": "葫芦岛", + "city_id": "101071405" + }, + { + "province": "广东", + "leader": "清远", + "city_id": "101281304" + } + ] + }, + "新城": { + "condition": 2, + "data": [ + { + "province": "内蒙古", + "leader": "呼和浩特", + "city_id": "101080108" + }, + { + "province": "陕西", + "leader": "西安", + "city_id": "101110108" + } + ] + }, + "青山": { + "condition": 2, + "data": [ + { + "province": "内蒙古", + "leader": "包头", + "city_id": "101080210" + }, + { + "province": "湖北", + "leader": "武汉", + "city_id": "101200112" + } + ] + }, + "海南": { + "condition": 2, + "data": [ + { + "province": "内蒙古", + "leader": "乌海", + "city_id": "101080303" + }, + { + "province": "青海", + "leader": "海南", + "city_id": "101150402" + } + ] + }, + "长安": { + "condition": 2, + "data": [ + { + "province": "河北", + "leader": "石家庄", + "city_id": "101090119" + }, + { + "province": "陕西", + "leader": "西安", + "city_id": "101110102" + } + ] + }, + "桥西": { + "condition": 3, + "data": [ + { + "province": "河北", + "leader": "石家庄", + "city_id": "101090120" + }, + { + "province": "河北", + "leader": "张家口", + "city_id": "101090316" + }, + { + "province": "河北", + "leader": "邢台", + "city_id": "101090919" + } + ] + }, + "新华": { + "condition": 2, + "data": [ + { + "province": "河北", + "leader": "石家庄", + "city_id": "101090121" + }, + { + "province": "河北", + "leader": "沧州", + "city_id": "101090715" + }, + { + "province": "河南", + "leader": "平顶山", + "city_id": "101180509" + } + ] + }, + "桥东": { + "condition": 3, + "data": [ + { + "province": "河北", + "leader": "张家口", + "city_id": "101090315" + }, + { + "province": "河北", + "leader": "邢台", + "city_id": "101090903" + } + ] + }, + "开平": { + "condition": 2, + "data": [ + { + "province": "河北", + "leader": "唐山", + "city_id": "101090516" + }, + { + "province": "广东", + "leader": "江门", + "city_id": "101281103" + } + ] + }, + "矿区": { + "condition": 3, + "data": [ + { + "province": "山西", + "leader": "大同", + "city_id": "101100209" + }, + { + "province": "山西", + "leader": "阳泉", + "city_id": "101100304" + } + ] + }, + "山阳": { + "condition": 2, + "data": [ + { + "province": "陕西", + "leader": "商洛", + "city_id": "101110608" + }, + { + "province": "河南", + "leader": "焦作", + "city_id": "101181111" + } + ] + }, + "市中": { + "condition": 2, + "data": [ + { + "province": "山东", + "leader": "济南", + "city_id": "101120108" + }, + { + "province": "山东", + "leader": "枣庄", + "city_id": "101121406" + }, + { + "province": "四川", + "leader": "内江", + "city_id": "101271206" + }, + { + "province": "四川", + "leader": "乐山", + "city_id": "101271410" + } + ] + }, + "栖霞": { + "condition": 2, + "data": [ + { + "province": "山东", + "leader": "烟台", + "city_id": "101120507" + }, + { + "province": "江苏", + "leader": "南京", + "city_id": "101190112" + } + ] + }, + "河口": { + "condition": 2, + "data": [ + { + "province": "山东", + "leader": "东营", + "city_id": "101121202" + }, + { + "province": "云南", + "leader": "红河", + "city_id": "101290313" + } + ] + }, + "沙湾": { + "condition": 2, + "data": [ + { + "province": "新疆", + "leader": "塔城", + "city_id": "101131107" + }, + { + "province": "四川", + "leader": "乐山", + "city_id": "101271411" + } + ] + }, + "城关": { + "condition": 2, + "data": [ + { + "province": "西藏", + "leader": "拉萨", + "city_id": "101140109" + }, + { + "province": "甘肃", + "leader": "兰州", + "city_id": "101160105" + } + ] + }, + "大通": { + "condition": 2, + "data": [ + { + "province": "青海", + "leader": "西宁", + "city_id": "101150102" + }, + { + "province": "安徽", + "leader": "淮南", + "city_id": "101220404" + } + ] + }, + "城中": { + "condition": 2, + "data": [ + { + "province": "青海", + "leader": "西宁", + "city_id": "101150106" + }, + { + "province": "广西", + "leader": "柳州", + "city_id": "101300303" + } + ] + }, + "安宁": { + "condition": 2, + "data": [ + { + "province": "甘肃", + "leader": "兰州", + "city_id": "101160108" + }, + { + "province": "云南", + "leader": "昆明", + "city_id": "101290112" + } + ] + }, + "金川": { + "condition": 2, + "data": [ + { + "province": "甘肃", + "leader": "金昌", + "city_id": "101160603" + }, + { + "province": "四川", + "leader": "阿坝", + "city_id": "101271907" + } + ] + }, + "东乡": { + "condition": 2, + "data": [ + { + "province": "甘肃", + "leader": "临夏", + "city_id": "101161106" + }, + { + "province": "江西", + "leader": "抚州", + "city_id": "101240411" + } + ] + }, + "襄城": { + "condition": 2, + "data": [ + { + "province": "河南", + "leader": "许昌", + "city_id": "101180403" + }, + { + "province": "湖北", + "leader": "襄阳", + "city_id": "101200209" + } + ] + }, + "鼓楼": { + "condition": 2, + "data": [ + { + "province": "河南", + "leader": "开封", + "city_id": "101180808" + }, + { + "province": "江苏", + "leader": "南京", + "city_id": "101190111" + }, + { + "province": "江苏", + "leader": "徐州", + "city_id": "101190808" + }, + { + "province": "福建", + "leader": "福州", + "city_id": "101230106" + } + ] + }, + "鹤山": { + "condition": 2, + "data": [ + { + "province": "河南", + "leader": "鹤壁", + "city_id": "101181204" + }, + { + "province": "广东", + "leader": "江门", + "city_id": "101281108" + } + ] + }, + "云龙": { + "condition": 2, + "data": [ + { + "province": "江苏", + "leader": "徐州", + "city_id": "101190809" + }, + { + "province": "云南", + "leader": "大理", + "city_id": "101290202" + } + ] + }, + "华容": { + "condition": 2, + "data": [ + { + "province": "湖北", + "leader": "鄂州", + "city_id": "101200303" + }, + { + "province": "湖南", + "leader": "岳阳", + "city_id": "101251002" + } + ] + }, + "西湖": { + "condition": 2, + "data": [ + { + "province": "浙江", + "leader": "杭州", + "city_id": "101210113" + }, + { + "province": "江西", + "leader": "南昌", + "city_id": "101240107" + } + ] + }, + "象山": { + "condition": 2, + "data": [ + { + "province": "浙江", + "leader": "宁波", + "city_id": "101210406" + }, + { + "province": "广西", + "leader": "桂林", + "city_id": "101300516" + } + ] + }, + "台江": { + "condition": 2, + "data": [ + { + "province": "福建", + "leader": "福州", + "city_id": "101230109" + }, + { + "province": "贵州", + "leader": "黔东南", + "city_id": "101260510" + } + ] + }, + "永定": { + "condition": 2, + "data": [ + { + "province": "福建", + "leader": "龙岩", + "city_id": "101230706" + }, + { + "province": "湖南", + "leader": "张家界", + "city_id": "101251105" + } + ] + }, + "昌江": { + "condition": 2, + "data": [ + { + "province": "江西", + "leader": "景德镇", + "city_id": "101240804" + }, + { + "province": "海南", + "leader": "昌江", + "city_id": "101310206" + } + ] + }, + "资阳": { + "condition": 2, + "data": [ + { + "province": "湖南", + "leader": "益阳", + "city_id": "101250706" + }, + { + "province": "四川", + "leader": "资阳", + "city_id": "101271301" + } + ] + }, + "白云": { + "condition": 2, + "data": [ + { + "province": "贵州", + "leader": "贵阳", + "city_id": "101260102" + }, + { + "province": "广东", + "leader": "广州", + "city_id": "101280110" + } + ] + }, + "钟山": { + "condition": 2, + "data": [ + { + "province": "贵州", + "leader": "六盘水", + "city_id": "101260805" + }, + { + "province": "广西", + "leader": "贺州", + "city_id": "101300704" + } + ] + }, + "东兴": { + "condition": 2, + "data": [ + { + "province": "四川", + "leader": "内江", + "city_id": "101271202" + }, + { + "province": "广西", + "leader": "防城港", + "city_id": "101301403" + } + ] + }, + "九龙": { + "condition": 2, + "data": [ + { + "province": "四川", + "leader": "甘孜", + "city_id": "101271805" + }, + { + "province": "香港", + "leader": "香港", + "city_id": "101320102" + } + ] + }, + "南沙": { + "condition": 2, + "data": [ + { + "province": "广东", + "leader": "广州", + "city_id": "101280112" + }, + { + "province": "海南", + "leader": "三沙", + "city_id": "101310304" + } + ] + }, + "兴宁": { + "condition": 2, + "data": [ + { + "province": "广东", + "leader": "梅州", + "city_id": "101280402" + }, + { + "province": "广西", + "leader": "南宁", + "city_id": "101300102" + } + ] + }, + "五华": { + "condition": 2, + "data": [ + { + "province": "广东", + "leader": "梅州", + "city_id": "101280408" + }, + { + "province": "云南", + "leader": "昆明", + "city_id": "101290102" + } + ] + }, + "金平": { + "condition": 2, + "data": [ + { + "province": "广东", + "leader": "汕头", + "city_id": "101280506" + }, + { + "province": "云南", + "leader": "红河", + "city_id": "101290312" + } + ] + }, + "江城": { + "condition": 2, + "data": [ + { + "province": "广东", + "leader": "阳江", + "city_id": "101281805" + }, + { + "province": "云南", + "leader": "普洱", + "city_id": "101290907" + } + ] + } +} \ No newline at end of file diff --git "a/img/\345\256\211\350\243\205.png" "b/img/\345\256\211\350\243\205.png" index 27840fa..dcfc892 100644 Binary files "a/img/\345\256\211\350\243\205.png" and "b/img/\345\256\211\350\243\205.png" differ diff --git "a/img/\346\221\270\351\261\274.png" "b/img/\346\221\270\351\261\274.png" index 9ecd1c1..734410a 100644 Binary files "a/img/\346\221\270\351\261\274.png" and "b/img/\346\221\270\351\261\274.png" differ diff --git "a/img/\346\230\237\345\272\247.png" "b/img/\346\230\237\345\272\247.png" index 0447551..a10d8f5 100644 Binary files "a/img/\346\230\237\345\272\247.png" and "b/img/\346\230\237\345\272\247.png" differ diff --git "a/img/\347\203\255\346\246\234.png" "b/img/\347\203\255\346\246\234.png" new file mode 100644 index 0000000..6ec0f92 Binary files /dev/null and "b/img/\347\203\255\346\246\234.png" differ