mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-03 02:30:01 +08:00
fix
This commit is contained in:
+13
-42
@@ -1,10 +1,8 @@
|
||||
from nonebot import on_command
|
||||
from .data_source import get_yiqing_data, clear_data
|
||||
from .data_source import get_yiqing_data
|
||||
from services.log import logger
|
||||
from nonebot.adapters.cqhttp import Bot, MessageEvent, GroupMessageEvent
|
||||
from nonebot.typing import T_State
|
||||
from .config import city_list
|
||||
from utils.utils import scheduler
|
||||
|
||||
__plugin_name__ = "疫情查询"
|
||||
__plugin_usage__ = "查询疫情帮助:\n\t对我说 查询疫情 省份/城市,我会回复疫情的实时数据\n\t示例: 查询疫情 温州"
|
||||
@@ -16,43 +14,16 @@ yiqing = on_command("疫情", aliases={"查询疫情", "疫情查询"}, priority
|
||||
@yiqing.handle()
|
||||
async def _(bot: Bot, event: MessageEvent, state: T_State):
|
||||
msg = str(event.get_message()).strip()
|
||||
if not msg or msg in ["帮助"]:
|
||||
await yiqing.finish(__plugin_usage__)
|
||||
if msg:
|
||||
if msg in city_list.keys():
|
||||
province = msg
|
||||
city = ""
|
||||
else:
|
||||
for key in city_list.keys():
|
||||
if msg in city_list.get(key):
|
||||
province = key
|
||||
city = msg
|
||||
break
|
||||
result = await get_yiqing_data(msg)
|
||||
if result:
|
||||
await yiqing.send(result)
|
||||
logger.info(
|
||||
f"(USER {event.user_id}, GROUP "
|
||||
f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'}) 查询疫情: {msg}"
|
||||
)
|
||||
else:
|
||||
await yiqing.finish(__plugin_usage__)
|
||||
try:
|
||||
result = await get_yiqing_data(province, city)
|
||||
if result:
|
||||
await yiqing.send(result)
|
||||
logger.info(
|
||||
f"(USER {event.user_id}, GROUP "
|
||||
f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'}) 查询疫情:"
|
||||
+ result
|
||||
)
|
||||
else:
|
||||
await yiqing.send("查询失败!!!!", at_sender=True)
|
||||
logger.info(
|
||||
f"(USER {event.user_id}, GROUP "
|
||||
f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'}) 查询疫情失败"
|
||||
)
|
||||
except UnboundLocalError:
|
||||
await yiqing.finish("参数正确吗?只要一个参数啊", at_sender=True)
|
||||
|
||||
|
||||
@scheduler.scheduled_job(
|
||||
"cron",
|
||||
hour=0,
|
||||
minute=1,
|
||||
)
|
||||
async def _():
|
||||
clear_data()
|
||||
await yiqing.send("查询失败!!!!", at_sender=True)
|
||||
logger.info(
|
||||
f"(USER {event.user_id}, GROUP "
|
||||
f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'}) 查询疫情失败"
|
||||
)
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
city_list = {
|
||||
"北京": ["北京"],
|
||||
"天津": ["天津"],
|
||||
"山西": ["太原", "阳泉", "晋城", "长治", "临汾", "运城", "忻州", "吕梁", "晋中", "大同", "朔州"],
|
||||
"河北": ["沧州", "石家庄", "唐山", "保定", "廊坊", "衡水", "邯郸", "邢台", "张家口", "辛集", "秦皇岛", "定州", "承德", "涿州"],
|
||||
"山东": ["济南", "淄博", "聊城", "德州", "滨州", "济宁", "菏泽", "枣庄", "烟台", "威海", "泰安", "青岛", "临沂", "莱芜", "东营", "潍坊", "日照"],
|
||||
"河南": ["郑州", "新乡", "鹤壁", "安阳", "焦作", "濮阳", "开封", "驻马店", "商丘", "三门峡", "南阳", "洛阳", "周口", "许昌", "信阳", "漯河", "平顶山", "济源"],
|
||||
"广东": ["珠海", "中山", "肇庆", "深圳", "清远", "揭阳", "江门", "惠州", "河源", "广州", "佛山", "东莞", "潮州", "汕尾", "梅州", "阳江", "云浮", "韶关", "湛江", "汕头", "茂名"],
|
||||
"浙江": ["舟山", "温州", "台州", "绍兴", "衢州", "宁波", "丽水", "金华", "嘉兴", "湖州", "杭州"],
|
||||
"宁夏": ["中卫", "银川", "吴忠", "石嘴山", "固原"],
|
||||
"江苏": ["镇江", "扬州", "盐城", "徐州", "宿迁", "无锡", "苏州", "南通", "南京", "连云港", "淮安", "常州", "泰州"],
|
||||
"湖南": ["长沙", "邵阳", "怀化", "株洲", "张家界", "永州", "益阳", "湘西", "娄底", "衡阳", "郴州", "岳阳", "常德", "湘潭"],
|
||||
"吉林": ["长春", "长春", "通化", "松原", "四平", "辽源", "吉林", "延边", "白山", "白城"],
|
||||
"福建": ["漳州", "厦门", "福州", "三明", "莆田", "宁德", "南平", "龙岩", "泉州"],
|
||||
"甘肃": ["张掖", "陇南", "兰州", "嘉峪关", "白银", "武威", "天水", "庆阳", "平凉", "临夏", "酒泉", "金昌", "甘南", "定西"],
|
||||
"陕西": ["榆林", "西安", "延安", "咸阳", "渭南", "铜川", "商洛", "汉中", "宝鸡", "安康"],
|
||||
"辽宁": ["营口", "铁岭", "沈阳", "盘锦", "辽阳", "锦州", "葫芦岛", "阜新", "抚顺", "丹东", "大连", "朝阳", "本溪", "鞍山"],
|
||||
"江西": ["鹰潭", "宜春", "上饶", "萍乡", "南昌", "景德镇", "吉安", "抚州", "新余", "九江", "赣州"],
|
||||
"黑龙江": ["伊春", "七台河", "牡丹江", "鸡西", "黑河", "鹤岗", "哈尔滨", "大兴安岭", "绥化", "双鸭山", "齐齐哈尔", "佳木斯", "大庆"],
|
||||
"安徽": ["宣城", "铜陵", "六安", "黄山", "淮南", "合肥", "阜阳", "亳州", "安庆", "池州", "宿州", "芜湖", "马鞍山", "淮北", "滁州", "蚌埠"],
|
||||
"湖北": ["孝感", "武汉", "十堰", "荆门", "黄冈", "襄阳", "咸宁", "随州", "黄石", "恩施", "鄂州", "荆州", "宜昌", "潜江", "天门", "神农架", "仙桃"],
|
||||
"青海": ["西宁", "海西", "海东", "玉树", "黄南", "海南", "海北", "果洛"],
|
||||
"新疆": ["乌鲁木齐", "克州", "阿勒泰", "五家渠", "石河子", "伊犁", "吐鲁番", "塔城", "克拉玛依", "喀什", "和田", "哈密", "昌吉", "博尔塔拉", "阿克苏", "巴音郭楞", "阿拉尔", "图木舒克", "铁门关"],
|
||||
"贵州": ["铜仁", "黔东南", "贵阳", "安顺", "遵义", "黔西南", "黔南", "六盘水", "毕节"],
|
||||
"四川": ["遂宁", "攀枝花", "眉山", "凉山", "成都", "巴中", "广安", "自贡", "甘孜", "资阳", "宜宾", "雅安", "内江", "南充", "绵阳", "泸州", "凉山", "乐山", "广元", "甘孜", "德阳", "达州", "阿坝"],
|
||||
"上海": ["上海"],
|
||||
"广西": ["南宁", "贵港", "玉林", "梧州", "钦州", "柳州", "来宾", "贺州", "河池", "桂林", "防城港", "崇左", "北海", "百色"],
|
||||
"西藏": ["拉萨", "山南", "日喀则", "那曲", "林芝", "昌都", "阿里"],
|
||||
"云南": ["昆明", "红河", "大理", "玉溪", "昭通", "西双版纳", "文山", "曲靖", "普洱", "怒江", "临沧", "丽江", "红河", "迪庆", "德宏", "大理", "楚雄", "保山"],
|
||||
"内蒙古": ["呼和浩特", "乌兰察布", "兴安", "赤峰", "呼伦贝尔", "锡林郭勒", "乌海", "通辽", "巴彦淖尔", "阿拉善", "鄂尔多斯", "包头"],
|
||||
"海南": ["海口", "三沙", "三亚", "临高", "五指山", "陵水", "文昌", "万宁", "白沙", "乐东", "澄迈", "屯昌", "定安", "东方", "保亭", "琼中", "琼海", "儋州", "昌江"],
|
||||
"重庆": ["重庆"],
|
||||
"台湾": ["台北", "高雄", "基隆", "台中", "台南", "新竹", "嘉义", "新北", "桃园"]
|
||||
}
|
||||
@@ -1,67 +1,88 @@
|
||||
from datetime import datetime
|
||||
import aiohttp
|
||||
from utils.user_agent import get_user_agent
|
||||
import json
|
||||
import os
|
||||
from configs.path_config import TXT_PATH
|
||||
from utils.utils import get_local_proxy
|
||||
from typing import List
|
||||
from pathlib import Path
|
||||
import ujson as json
|
||||
import aiohttp
|
||||
|
||||
china_city = Path(TXT_PATH) / "china_city.json"
|
||||
|
||||
try:
|
||||
with open(china_city, "r", encoding="utf8") as f:
|
||||
data = json.load(f)
|
||||
except FileNotFoundError:
|
||||
data = {}
|
||||
|
||||
|
||||
url = "https://api.yimian.xyz/coro/"
|
||||
url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
|
||||
|
||||
|
||||
async def get_yiqing_data(province, city_=""):
|
||||
if not os.path.exists(TXT_PATH + "yiqing/"):
|
||||
os.mkdir(TXT_PATH + "yiqing/")
|
||||
if not os.path.exists(TXT_PATH + "yiqing/" + str(datetime.now().date()) + ".json"):
|
||||
async with aiohttp.ClientSession(headers=get_user_agent()) as session:
|
||||
async with session.get(url, proxy=get_local_proxy(), timeout=7) as response:
|
||||
datalist = await response.json()
|
||||
with open(
|
||||
TXT_PATH + "yiqing/" + str(datetime.now().date()) + ".json", "w"
|
||||
) as f:
|
||||
json.dump(datalist, f)
|
||||
datalist = json.load(
|
||||
open(TXT_PATH + "yiqing/" + str(datetime.now().date()) + ".json", "r")
|
||||
)
|
||||
result = ""
|
||||
for data in datalist:
|
||||
if data["provinceShortName"] == province:
|
||||
if city_ == "":
|
||||
result = (
|
||||
province
|
||||
+ "疫情数据:\n现存确诊: "
|
||||
+ str(data["currentConfirmedCount"])
|
||||
+ "\n累计确诊: "
|
||||
+ str(data["confirmedCount"])
|
||||
+ "\n治愈: "
|
||||
+ str(data["curedCount"])
|
||||
+ "\n死亡: "
|
||||
+ str(data["deadCount"])
|
||||
)
|
||||
break
|
||||
async def get_yiqing_data(area: str):
|
||||
global data
|
||||
province = None
|
||||
city = None
|
||||
province_type = "省"
|
||||
if area == '中国':
|
||||
province = area
|
||||
province_type = ""
|
||||
elif area in data.keys():
|
||||
province = area
|
||||
if len(data[area]) == 1:
|
||||
province_type = "市"
|
||||
city = ""
|
||||
else:
|
||||
for p in data.keys():
|
||||
if area in data[p]:
|
||||
province = p
|
||||
city = area
|
||||
if not province and not city:
|
||||
return "小真寻只支持国内的疫情查询喔..."
|
||||
async with aiohttp.ClientSession(headers=get_user_agent()) as session:
|
||||
async with session.get(url, timeout=7) as response:
|
||||
epidemic_data = json.loads((await response.json())["data"])
|
||||
last_update_time = epidemic_data["lastUpdateTime"]
|
||||
if area == "中国":
|
||||
data_ = epidemic_data["areaTree"][0]
|
||||
else:
|
||||
for city in data["cities"]:
|
||||
if city["cityName"] == city_:
|
||||
result = (
|
||||
city_
|
||||
+ "疫情数据:\n现存确诊: "
|
||||
+ str(city["currentConfirmedCount"])
|
||||
+ "\n累计确诊: "
|
||||
+ str(city["confirmedCount"])
|
||||
+ "\n治愈: "
|
||||
+ str(city["curedCount"])
|
||||
+ "\n死亡: "
|
||||
+ str(city["deadCount"])
|
||||
)
|
||||
break
|
||||
return result
|
||||
data_ = [
|
||||
x
|
||||
for x in epidemic_data["areaTree"][0]["children"]
|
||||
if x["name"] == province
|
||||
][0]
|
||||
if city:
|
||||
try:
|
||||
data_ = [x for x in data_["children"] if x["name"] == city][0]
|
||||
except IndexError:
|
||||
return '未查询到...'
|
||||
confirm = data_["total"]["confirm"] # 累计确诊
|
||||
heal = data_["total"]["heal"] # 累计治愈
|
||||
dead = data_["total"]["dead"] # 累计死亡
|
||||
dead_rate = data_["total"]["deadRate"] # 死亡率
|
||||
heal_rate = data_["total"]["healRate"] # 治愈率
|
||||
now_confirm = data_["total"]["nowConfirm"] # 目前确诊
|
||||
suspect = data_["total"]["suspect"] # 疑似
|
||||
add_confirm = data_["today"]["confirm"] # 新增确诊
|
||||
x = f"{city}市" if city else f'{province}{province_type}'
|
||||
return (
|
||||
f"{x} 疫情数据:\n"
|
||||
f"\t目前确诊:\n"
|
||||
f"\t\t确诊人数:{now_confirm}(+{add_confirm})\n"
|
||||
f"\t\t疑似人数:{suspect}\n"
|
||||
f"==================\n"
|
||||
f"\t累计数据:\n"
|
||||
f"\t\t确诊人数:{confirm}\n"
|
||||
f"\t\t治愈人数:{heal}\n"
|
||||
f"\t\t死亡人数:{dead}\n"
|
||||
f"\t治愈率:{heal_rate}%\n"
|
||||
f"\t死亡率:{dead_rate}%\n"
|
||||
f"更新日期:{last_update_time}"
|
||||
)
|
||||
|
||||
|
||||
def clear_data():
|
||||
for file in os.listdir(TXT_PATH + "yiqing/"):
|
||||
os.remove(TXT_PATH + "yiqing/" + file)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(get_yiqing_data("浙江", city_=""))
|
||||
def get_city_list() -> List[str]:
|
||||
global data
|
||||
city_list = []
|
||||
for p in data.keys():
|
||||
for c in data[p]:
|
||||
city_list.append(c)
|
||||
return city_list
|
||||
|
||||
Reference in New Issue
Block a user