mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2024-11-14 05:11:17 +08:00
116 lines
3.5 KiB
Markdown
116 lines
3.5 KiB
Markdown
# 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:
|
|
- V1:
|
|
- URL: https://api.mihomo.me/sr_info_parsed/800333171?lang=en&version=v1
|
|
- Fetching: use `client.fetch_user_v1(800333171)`
|
|
- Data model: `mihomo.models.v1.StarrailInfoParsedV1`
|
|
- All models defined in `mihomo/models/v1` directory.
|
|
- V2:
|
|
- URL: https://api.mihomo.me/sr_info_parsed/800333171?lang=en
|
|
- Fetching: use `client.fetch_user(800333171)`
|
|
- Data model: `mihomo.models.StarrailInfoParsed`
|
|
- All models defined in `mihomo/models` directory.
|
|
|
|
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
|
|
```py
|
|
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
|
|
```py
|
|
data = await client.fetch_user(800333171)
|
|
data = tools.remove_duplicate_character(data)
|
|
```
|
|
|
|
#### Merge Character Data
|
|
```py
|
|
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
|
|
```py
|
|
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))
|
|
```
|