mihomo README

The project's README from github.com/MetaCubeX/mihomo. As one markdown file: README.md.

mihomo

A simple python pydantic model (type hint and autocompletion support) for Honkai: Star Rail parsed data from the Mihomo API.

API url: https://api.mihomo.me/sr_info_parsed/{UID}?lang={LANG}

Installation

pip install -U git+https://github.com/KT-Yeh/mihomo.git

Usage

Basic

There are two parsed data formats:

If you don't want to use client.get_icon_url to get the image url everytime, you can use client.fetch_user(800333171, replace_icon_name_with_url=True) to get the parsed data with asset urls.

Example

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"Name: {data.player.name}")
    print(f"Level: {data.player.level}")
    print(f"Signature: {data.player.signature}")
    print(f"Achievements: {data.player_details.achievements}")
    print(f"Characters count: {data.player_details.characters}")
    print(f"Profile picture url: {client.get_icon_url(data.player.icon)}")
    for character in data.characters:
        print("-----------")
        print(f"Name: {character.name}")
        print(f"Rarity: {character.rarity}")
        print(f"Level: {character.level}")
        print(f"Avatar url: {client.get_icon_url(character.icon)}")
        print(f"Preview url: {client.get_icon_url(character.preview)}")
        print(f"Portrait 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"Name: {data.player.name}")
    print(f"Level: {data.player.level}")
    print(f"Signature: {data.player.signature}")
    print(f"Profile picture url: {data.player.avatar.icon}")
    for character in data.characters:
        print("-----------")
        print(f"Name: {character.name}")
        print(f"Rarity: {character.rarity}")
        print(f"Portrait url: {character.portrait}")

asyncio.run(v1())
asyncio.run(v2())

Tools

from mihomo import tools

Remove Duplicate Character

    data = await client.fetch_user(800333171)
    data = tools.remove_duplicate_character(data)

Merge Character Data

    old_data = await client.fetch_user(800333171)

    # Change characters in game and wait for the API to refresh
    # ...

    new_data = await client.fetch_user(800333171)
    data = tools.merge_character_data(new_data, old_data)

Data Persistence

Take pickle and json as an example

import pickle
import zlib
from mihomo import MihomoAPI, Language, StarrailInfoParsed

client = MihomoAPI(language=Language.EN)
data = await client.fetch_user(800333171)

# Save
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))

# Load
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))

mihomo (MetaCubeX/mihomo)

Searching Database…

35K ·GitHub
这是什么?这是一个基于 Pydantic 构建的 Python 库,用于对 Mihomo API 返回的 Honkai: Star Rail 数据进行建模和解析,让你能以带类型标注、支持自动补全的方式访问玩家解析后的角色和展示信息。
这是独立应用,还是我需要在代码中导入的库?这是一个纯 Python 库,需要你在代码中导入并直接调用,而不是应用程序或服务器。创建客户端后,调用 fetchuser、fetchuserv1 等方法,即可获得解析后的 Pydantic 模型对象。
我该如何用它获取玩家的 Honkai: Star Rail 数据?安装后,调用 client.fetchuser(800333171) 获取 V2 格式的数据,或调用 client.fetchuserv1(800333171) 获取较早的 V1 格式数据,参数为玩家的游戏内 UID。
我需要自己单独获取素材图标的 URL 吗?不需要。调用 client.fetchuser(800333171, replaceiconnamewithurl=True) 即可跳过这一步,它会自动填充素材 URL,无需再单独调用 client.geticonurl。
V1 和 V2 数据格式有什么区别?V1 和 V2 是 Mihomo API 的两套独立解析格式,各自拥有独立的模型(StarrailInfoParsedV1 与 StarrailInfoParsed)和获取方法,分别定义在 mihomo/models 内的不同目录中。
除了获取数据,这个库还自带哪些实用工具?mihomo.tools 模块提供了一些辅助函数,可用于去除重复角色,以及合并多次获取的角色数据。
我可以把获取到的玩家数据保存到本地吗?可以。README 中展示了一个数据持久化示例,使用 Python 的 pickle 和 json 模块来保存并重新加载解析后的数据。
Creator
MetaCubeX
Size
13.5 MB
Stars
35K
Age
5y
Commits · 90 Days