mirror of
https://github.com/LiteyukiStudio/nonebot-plugin-acgnshow.git
synced 2024-11-11 01:27:39 +08:00
133 lines
4.5 KiB
Python
133 lines
4.5 KiB
Python
from typing import Dict
|
||
|
||
from aiohttp import ClientSession
|
||
|
||
from .models import *
|
||
from .util import *
|
||
|
||
CITY_API_ROOT = "https://show.bilibili.com/api/ticket/city/list?channel=3"
|
||
SHOWS_API_ROOT = "https://show.bilibili.com/api/ticket/project/listV2"
|
||
HEADERS = {
|
||
"user-agent": "Mozilla/5.0 (Linux; Android 14; 114514YAJU Build/UKQ1.114514.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.165 Mobile Safari/537.36 BiliApp/7810200 mobi_app/android isNotchWindow/0 NotchHeight=34 mallVersion/7810200 mVersion/242 disable_rcmd/0 7.81.0 os/android model/114514YAJU mobi_app/android build/7810200 channel/bilih5 innerVer/7810210 osVer/14 network/2"
|
||
}
|
||
|
||
|
||
async def get_cities_data() -> CityResp:
|
||
"""
|
||
返回支持的城市数据
|
||
"""
|
||
async with ClientSession() as session:
|
||
async with session.get(CITY_API_ROOT, headers=HEADERS) as resp:
|
||
regions_data = await resp.json()
|
||
return CityResp.model_validate(regions_data)
|
||
|
||
|
||
async def get_regions_dict() -> Dict[str, int]:
|
||
"""
|
||
返回支持的地区,键名为地区名,键值为地区id
|
||
"""
|
||
data = {}
|
||
city_data = await get_cities_data()
|
||
for i in city_data.data.list:
|
||
for j in i.city_list:
|
||
data.update({j.name: j.id})
|
||
data.update({"全国": -1, "海外": 900000})
|
||
return data
|
||
|
||
|
||
async def get_shows_data(region_id: int, page=1, pagesize=20):
|
||
"""
|
||
返回举办中/即将举办/取消举办的展览数据
|
||
Args:
|
||
region_id: 地区id
|
||
page: 页码
|
||
pagesize: 一页最大条目数,最大20
|
||
"""
|
||
param = {
|
||
"version": 133,
|
||
"area": region_id,
|
||
"page": page,
|
||
"pagesize": pagesize,
|
||
"platform": "web",
|
||
"p_type": "展览",
|
||
"style": 1,
|
||
}
|
||
async with ClientSession() as session:
|
||
async with session.get(SHOWS_API_ROOT, headers=HEADERS, params=param) as resp:
|
||
shows_data = await resp.json()
|
||
return shows_data
|
||
|
||
|
||
# def process_shows_data_to_text(shows_data: dict):
|
||
# showlist = []
|
||
# data = shows_data["data"]
|
||
# total_pages = data["numPages"]
|
||
# result = data["result"]
|
||
# for i in result:
|
||
# name = i["project_name"]
|
||
# venue_name = i["venue_name"]
|
||
# project_id = i["project_id"]
|
||
# sale_flag = i["sale_flag"]
|
||
# # start_time = i["start_time"]
|
||
# start_unix = i["start_unix"]
|
||
# start_time = convert_timestamp(start_unix)
|
||
# end_time = i["end_time"]
|
||
# price_low = i["price_low"] / 100
|
||
# price_high = i["price_high"] / 100
|
||
# district_name = i["district_name"]
|
||
# text = f"名称:{name}\n举办地:{venue_name}\nid:{project_id}\nflag:{sale_flag}\n开始时间:{start_time}\n结束时间:{end_time}\n最低票价:{price_low}\n最高票价:{price_high}\n区名:{district_name}\n\n"
|
||
# showlist.append(text)
|
||
# return showlist
|
||
|
||
|
||
def process_shows_data_to_template(shows_data: dict):
|
||
showlist = []
|
||
data = shows_data["data"]
|
||
page = data["page"]
|
||
total_pages = data["numPages"]
|
||
total_results = data["total"]
|
||
result = data["result"]
|
||
# show_template = read_template_file('/home/asankilp/LiteyukiBot/src/plugins/acgnshow/res/template.html')
|
||
for i in result:
|
||
name = i["project_name"]
|
||
venue_name = i["venue_name"]
|
||
project_id = i["project_id"]
|
||
sale_flag = i["sale_flag"]
|
||
# start_time = i["start_time"]
|
||
start_unix = i["start_unix"]
|
||
start_time = convert_timestamp(start_unix)
|
||
end_time = i["end_time"]
|
||
price_low = i["price_low"] / 100
|
||
price_high = i["price_high"] / 100
|
||
district_name = i["district_name"]
|
||
wish = i["wish"]
|
||
cover = "https:" + i["cover"]
|
||
if district_name == None:
|
||
district_name = ""
|
||
guests_list = i["guests"]
|
||
if guests_list != None:
|
||
guests = "、".join(n["name"] for n in guests_list)
|
||
else:
|
||
guests = ""
|
||
item_dict = {
|
||
"name": name,
|
||
"location": district_name + venue_name,
|
||
"sale_flag": sale_flag,
|
||
"id": project_id,
|
||
"price": price_low,
|
||
"start_time": start_time,
|
||
"end_time": end_time,
|
||
"wish": wish,
|
||
"image_url": cover,
|
||
"guests": guests,
|
||
"page": page,
|
||
"total_pages": total_pages,
|
||
}
|
||
showlist.append(item_dict)
|
||
global_data_dict = {
|
||
"page": page,
|
||
"total_pages": total_pages,
|
||
"total_results": total_results,
|
||
}
|
||
return [showlist, global_data_dict]
|