mirror of
https://github.com/Remik1r3n/maimaiDX-Api.git
synced 2025-05-20 04:17:28 +08:00
51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
# 感谢伟大的 Diving-Fish 让我被迫直面恐惧
|
|
import xml.dom.minidom as minidom
|
|
from pathlib import Path
|
|
import rapidjson as json
|
|
from loguru import logger
|
|
|
|
def makeMusicDBJson():
|
|
'''
|
|
从 HDD 的文件来生成 music_db.json
|
|
推荐的是如果要国服用 那就用国际服的文件来生成
|
|
免得国服每次更新还要重新生成太麻烦
|
|
'''
|
|
# 记得改
|
|
A000_DIR = Path('H:\PRiSM\Package\Sinmai_Data\StreamingAssets\A000')
|
|
OPTION_DIR = Path('H:\PRiSM\Package\Sinmai_Data\StreamingAssets')
|
|
|
|
music_db: dict[str, dict[str, str | int]] = {}
|
|
DEST_PATH = Path('../Data/musicDB.json')
|
|
|
|
music_folders = [f for f in (A000_DIR / 'music').iterdir() if f.is_dir()]
|
|
for option_dir in OPTION_DIR.iterdir():
|
|
if (option_dir / 'music').exists():
|
|
music_folders.extend([f for f in (option_dir / 'music').iterdir() if f.is_dir()])
|
|
|
|
for folder in music_folders:
|
|
xml_path = (folder / 'Music.xml')
|
|
if xml_path.exists():
|
|
xml = minidom.parse(xml_path.as_posix())
|
|
data = xml.getElementsByTagName('MusicData')[0]
|
|
music_id = data.getElementsByTagName('name')[0].getElementsByTagName('id')[0].firstChild.data
|
|
music_name = data.getElementsByTagName('name')[0].getElementsByTagName('str')[0].firstChild.data
|
|
music_version = data.getElementsByTagName('AddVersion')[0].getElementsByTagName('id')[0].firstChild.data
|
|
music_db[music_id] = {
|
|
"name": music_name,
|
|
"version": int(music_version)
|
|
}
|
|
logger.debug(f'Found {len(music_db)} music data')
|
|
serialized = '{\n'
|
|
sorted_keys = sorted(music_db.keys(), key=lambda x: int(x))
|
|
for key in sorted_keys:
|
|
value = music_db[key]
|
|
serialized += f' "{key}": {json.dumps(value, ensure_ascii=False)},\n'
|
|
serialized = serialized[:-2] + '\n}'
|
|
|
|
with open(DEST_PATH, 'w', encoding='utf-8') as f:
|
|
f.write(serialized)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
makeMusicDBJson()
|
|
print('Done.') |