mihomo
一个简单的 Python pydantic 模型(支持类型提示和自动补全),用于解析来自 Mihomo API 的崩坏:星穹铁道数据。
API 地址: https://api.mihomo.me/sr_info_parsed/{UID}?lang={LANG}
安装
pip install -U git+https://github.com/KT-Yeh/mihomo.git
使用方法
基础用法
有两种解析数据格式:
- V1:
- URL: https://api.mihomo.me/sr_info_parsed/800333171?lang=en&version=v1
- 获取方法: 使用
client.fetch_user_v1(800333171)
- 数据模型:
mihomo.models.v1.StarrailInfoParsedV1
- 所有模型定义在
mihomo/models/v1
目录下。
- V2:
- URL: https://api.mihomo.me/sr_info_parsed/800333171?lang=en
- 获取方法: 使用
client.fetch_user(800333171)
- 数据模型:
mihomo.models.StarrailInfoParsed
- 所有模型定义在
mihomo/models
目录下。
如果你不想每次都使用 client.get_icon_url
来获取图片 URL,可以使用 client.fetch_user(800333171, replace_icon_name_with_url=True)
来获取包含资源 URL 的解析数据。
示例
import asyncio
from mihomo import Language, MihomoAPI
from mihomo.models import StarrailInfoParsed
from mihomo.models.v1 import StarrailInfoParsedV1
client = MihomoAPI(language=Language.EN)
async def v1():
data: StarrailInfoParsedV1 = await client.fetch_user_v1(800333171)
print(f"名称: {data.player.name}")
print(f"等级: {data.player.level}")
print(f"签名: {data.player.signature}")
print(f"成就数: {data.player_details.achievements}")
print(f"角色数量: {data.player_details.characters}")
print(f"头像 URL: {client.get_icon_url(data.player.icon)}")
for character in data.characters:
print("-----------")
print(f"名称: {character.name}")
print(f"稀有度: {character.rarity}")
print(f"等级: {character.level}")
print(f"头像 URL: {client.get_icon_url(character.icon)}")
print(f"预览 URL: {client.get_icon_url(character.preview)}")
print(f"立绘 URL: {client.get_icon_url(character.portrait)}")
async def v2():
data: StarrailInfoParsed = await client.fetch_user(800333171, replace_icon_name_with_url=True)
print(f"名称: {data.player.name}")
print(f"等级: {data.player.level}")
print(f"签名: {data.player.signature}")
print(f"头像 URL: {data.player.avatar.icon}")
for character in data.characters:
print("-----------")
print(f"名称: {character.name}")
print(f"稀有度: {character.rarity}")
print(f"立绘 URL: {character.portrait}")
asyncio.run(v1())
asyncio.run(v2())
工具
from mihomo import tools
移除重复角色
data = await client.fetch_user(800333171)
data = tools.remove_duplicate_character(data)
合并角色数据
old_data = await client.fetch_user(800333171)
# 在游戏中更改角色并等待 API 刷新
# ...
new_data = await client.fetch_user(800333171)
data = tools.merge_character_data(new_data, old_data)
数据持久化
以 pickle 和 json 为例
import pickle
import zlib
from mihomo import MihomoAPI, Language, StarrailInfoParsed
client = MihomoAPI(language=Language.EN)
data = await client.fetch_user(800333171)
# 保存
pickle_data = zlib.compress(pickle.dumps(data))
print(len(pickle_data))
json_data = data.json(by_alias=True, ensure_ascii=False)
print(len(json_data))
# 加载
data_from_pickle = pickle.loads(zlib.decompress(pickle_data))
data_from_json = StarrailInfoParsed.parse_raw(json_data)
print(type(data_from_pickle))
print(type(data_from_json))