PagerMaid_Plugins/covid.py

141 lines
3.8 KiB
Python
Raw Normal View History

2022-01-16 05:34:03 +00:00
""" https://github.com/Zeta-qixi/nonebot-plugin-covid19-news """
2022-01-16 05:26:09 +00:00
import json
from typing import Dict
2022-01-18 08:47:20 +00:00
from pagermaid import version
2022-01-16 05:26:09 +00:00
from pagermaid.listener import listener
2022-01-20 08:42:23 +00:00
from pagermaid.utils import alias_command, obtain_message, client
2022-01-16 05:26:09 +00:00
POLICY_ID = {}
class Area:
def __init__(self, data):
self.name = data['name']
self.today = data['today']
self.total = data['total']
self.grade = data['total'].get('grade', '风险未确认')
self.children = data.get('children', None)
@property
async def policy(self):
return await get_policy(POLICY_ID.get(self.name))
@property
def main_info(self):
return f"**{self.name} 新冠肺炎疫情情况** ({self.grade})\n\n" \
f"`😔新增确诊:{self.today['confirm']}`\n" \
f"`☢️现存确诊:{self.total['nowConfirm']}`"
class AreaList(Dict):
def add(self, data):
self[data.name] = data
class NewsData:
def __init__(self):
self.data = {}
self.time = ''
self.update_data()
async def update_data(self):
url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
2022-01-20 08:42:23 +00:00
res = (await client.get(url)).json()
2022-01-16 05:26:09 +00:00
if res['ret'] != 0:
return
data = json.loads(res['data'])
if data['lastUpdateTime'] != self.time:
self.time = data['lastUpdateTime']
self.data = AreaList()
def get_Data(data_):
if isinstance(data_, list):
for i in data_:
get_Data(i)
if isinstance(data_, dict):
area_ = data_.get('children')
if area_:
get_Data(area_)
self.data.add(Area(data_)) # noqa
get_Data(data['areaTree'][0])
return
async def set_pid():
url_city_list = 'https://r.inews.qq.com/api/trackmap/citylist?'
2022-01-20 08:42:23 +00:00
resp = await client.get(url_city_list)
2022-01-16 05:26:09 +00:00
res = resp.json()
for province in res['result']:
cities = province.get('list')
if cities:
for city in cities:
cid = city['id']
name = city['name']
POLICY_ID[name] = cid
async def get_policy(uid):
url_get_policy = f"https://r.inews.qq.com/api/trackmap/citypolicy?&city_id={uid}"
2022-01-20 08:42:23 +00:00
resp = await client.get(url_get_policy)
2022-01-16 05:26:09 +00:00
res_ = resp.json()
if res_['message'] != 'success':
return "数据获取失败!"
try:
data = res_['result']['data'][0]
except IndexError:
return "暂无政策信息"
# data['leave_policy_date']
# data['leave_policy']
# data['back_policy_date']
# data['back_policy']
# data['poi_list'] # 风险区域
msg = f"出行({data['leave_policy_date']})\n{data['leave_policy']}\n\
------\n\
进入({data['back_policy_date']})\n{data['back_policy']}"
return msg
NewsBot = NewsData()
@listener(is_plugin=True, outgoing=True, command=alias_command("covid"),
description="获取新冠疫情信息。",
parameters="<地区>")
async def covid_info(context):
global POLICY_ID, NewsBot
await context.edit("正在获取中。。。")
if not POLICY_ID:
await set_pid()
await NewsBot.update_data()
try:
city = await obtain_message(context)
except ValueError:
return await context.edit("[covid] 无法获取城市名!")
2022-01-16 05:42:21 +00:00
zc = False
if city.find("政策") != -1:
zc = True
city = city.replace("政策", "")
2022-01-16 05:26:09 +00:00
city = NewsBot.data.get(city)
if city:
2022-01-16 05:42:21 +00:00
policy = "Tips: 查询出行政策可加上 `政策`"
if zc:
policy = await city.policy
2022-01-16 05:34:03 +00:00
await context.edit(f"{city.main_info}\n\n{policy}")
2022-01-16 05:26:09 +00:00
else:
await context.edit("[covid] 只限查询国内城市或你地理没学好。")