GenshinUID/utils/download_resource/download_from_miniggicu.py
2022-08-29 23:26:46 +08:00

84 lines
2.5 KiB
Python

from pathlib import Path
from bs4 import BeautifulSoup
from nonebot.log import logger
from aiohttp.client import ClientSession
from .download_url import PATH_MAP, download_file
MINIGG_FILE = 'https://file.minigg.icu/genshin/KimigaiiWuyi/resource/'
NAMECARD_FILE = MINIGG_FILE + 'char_namecard'
SIDE_FILE = MINIGG_FILE + 'char_side'
STAND_FILE = MINIGG_FILE + 'char_stand'
CHARS_FILE = MINIGG_FILE + 'chars'
GACHA_FILE = MINIGG_FILE + 'gacha_img'
ICON_FILE = MINIGG_FILE + 'icon'
REL_FILE = MINIGG_FILE + 'reliquaries'
WEAPON_FILE = MINIGG_FILE + 'weapon'
FILE_TO_PATH = {
NAMECARD_FILE: 6,
SIDE_FILE: 3,
STAND_FILE: 2,
CHARS_FILE: 1,
GACHA_FILE: 4,
ICON_FILE: 8,
REL_FILE: 7,
WEAPON_FILE: 5,
}
FILE_TO_NAME = {
NAMECARD_FILE: '角色名片',
SIDE_FILE: '角色侧视图',
STAND_FILE: '角色半身照',
CHARS_FILE: '角色头像',
GACHA_FILE: '角色立绘',
ICON_FILE: '图标',
REL_FILE: '圣遗物',
WEAPON_FILE: '武器',
}
async def _get_url(url: str, sess: ClientSession):
req = await sess.get(url=url)
return await req.read()
async def download_all_file_from_miniggicu():
async with ClientSession() as sess:
for file in [
NAMECARD_FILE,
SIDE_FILE,
STAND_FILE,
CHARS_FILE,
GACHA_FILE,
ICON_FILE,
REL_FILE,
WEAPON_FILE,
]:
base_data = await _get_url(file, sess)
content_bs = BeautifulSoup(base_data, 'lxml')
pre_data = content_bs.find_all('pre')[0]
data_list = pre_data.find_all('a')
logger.info(
f'[minigg.icu]数据库[{FILE_TO_NAME[file]}]中存在{len(data_list)}个内容!'
)
temp_num = 0
for data in data_list:
url = f'{file}/{data["href"]}'
name = data.text
path = Path(PATH_MAP[FILE_TO_PATH[file]] / name)
if not path.exists():
logger.info(
f'[minigg.icu]开始下载[{FILE_TO_NAME[file]}]_[{name}]...'
)
temp_num += 1
await download_file(url, FILE_TO_PATH[file], name)
logger.info('[minigg.icu]下载完成!')
if temp_num == 0:
im = f'[minigg.icu]数据库[{FILE_TO_NAME[file]}]无需下载!'
else:
im = f'[minigg.icu]数据库[{FILE_TO_NAME[file]}]已下载{temp_num}个内容!'
temp_num = 0
logger.info(im)