mirror of
https://github.com/PaiGramTeam/PaiGram.git
synced 2024-11-16 12:51:35 +00:00
66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
|
import ujson as json
|
||
|
from aiofiles import open as async_open
|
||
|
from httpx import AsyncClient, URL
|
||
|
|
||
|
from utils.const import AMBR_HOST, PROJECT_ROOT
|
||
|
|
||
|
__all__ = ['update_metadata_from_ambr', 'update_metadata_from_github']
|
||
|
|
||
|
client = AsyncClient()
|
||
|
|
||
|
|
||
|
async def update_metadata_from_ambr(overwrite: bool = True):
|
||
|
result = []
|
||
|
targets = ['material', 'weapon', 'avatar', 'reliquary']
|
||
|
for target in targets:
|
||
|
path = PROJECT_ROOT.joinpath(f'metadata/data/{target}.json')
|
||
|
if not overwrite and path.exists():
|
||
|
continue
|
||
|
url = AMBR_HOST.join(f"v2/chs/{target}")
|
||
|
path.parent.mkdir(parents=True, exist_ok=True)
|
||
|
response = await client.get(url)
|
||
|
json_data = json.loads(response.text)['data']['items']
|
||
|
async with async_open(path, mode='w', encoding='utf-8') as file:
|
||
|
data = json.dumps(json_data, ensure_ascii=False)
|
||
|
await file.write(data)
|
||
|
result.append(json_data)
|
||
|
return result
|
||
|
|
||
|
|
||
|
async def update_metadata_from_github(overwrite: bool = True):
|
||
|
path = PROJECT_ROOT.joinpath('metadata/data/namecard.json')
|
||
|
if not overwrite and path.exists():
|
||
|
return
|
||
|
|
||
|
host = URL("https://raw.fastgit.org/Dimbreath/GenshinData/master/")
|
||
|
|
||
|
text_map_url = host.join("TextMap/TextMapCHS.json")
|
||
|
material_url = host.join("ExcelBinOutput/MaterialExcelConfigData.json")
|
||
|
|
||
|
text_map_json_data = json.loads((await client.get(text_map_url)).text)
|
||
|
material_json_data = json.loads((await client.get(material_url)).text)
|
||
|
|
||
|
data = {}
|
||
|
for namecard_data in filter(lambda x: x.get('materialType', None) == 'MATERIAL_NAMECARD', material_json_data):
|
||
|
name = text_map_json_data[str(namecard_data['nameTextMapHash'])]
|
||
|
icon = namecard_data['icon']
|
||
|
navbar = namecard_data['picPath'][0]
|
||
|
banner = namecard_data['picPath'][1]
|
||
|
rank = namecard_data['rankLevel']
|
||
|
description = text_map_json_data[str(namecard_data['descTextMapHash'])].replace('\\n', '\n')
|
||
|
data.update({
|
||
|
str(namecard_data['id']): {
|
||
|
"id": namecard_data['id'],
|
||
|
"name": name,
|
||
|
"rank": rank,
|
||
|
"icon": icon,
|
||
|
"navbar": navbar,
|
||
|
"profile": banner,
|
||
|
"description": description,
|
||
|
}
|
||
|
})
|
||
|
async with async_open(path, mode='w', encoding='utf-8') as file:
|
||
|
data = json.dumps(data, ensure_ascii=False)
|
||
|
await file.write(data)
|
||
|
return data
|