mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-08 04:55:51 +08:00
🧑💻 新增一部分虚空数据库
的API (#499)
This commit is contained in:
parent
437f715edb
commit
569c774be6
@ -8,6 +8,10 @@ from ..genshinuid_xkdata import draw_xk_abyss_img
|
|||||||
from ..genshinuid_help.draw_help_card import draw_help_img
|
from ..genshinuid_help.draw_help_card import draw_help_img
|
||||||
from ..genshinuid_guide.get_abyss_data import generate_data
|
from ..genshinuid_guide.get_abyss_data import generate_data
|
||||||
from ..utils.resource.generate_char_card import create_all_char_card
|
from ..utils.resource.generate_char_card import create_all_char_card
|
||||||
|
from ..genshinuid_xkdata.get_all_char_data import (
|
||||||
|
save_all_char_info,
|
||||||
|
save_all_abyss_rank,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def all_start():
|
async def all_start():
|
||||||
@ -17,6 +21,8 @@ async def all_start():
|
|||||||
await create_all_char_card()
|
await create_all_char_card()
|
||||||
await draw_xk_abyss_img()
|
await draw_xk_abyss_img()
|
||||||
await generate_data()
|
await generate_data()
|
||||||
|
await save_all_char_info()
|
||||||
|
await save_all_abyss_rank()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(e)
|
logger.exception(e)
|
||||||
|
|
||||||
|
73
GenshinUID/genshinuid_xkdata/get_all_char_data.py
Normal file
73
GenshinUID/genshinuid_xkdata/get_all_char_data.py
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
import json
|
||||||
|
from typing import Dict, List, Tuple, Optional
|
||||||
|
|
||||||
|
import aiofiles
|
||||||
|
|
||||||
|
from ..utils.resource.RESOURCE_PATH import DATA_PATH
|
||||||
|
from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name
|
||||||
|
from ..gsuid_utils.api.akashadata.models import (
|
||||||
|
AKaShaRank,
|
||||||
|
AKaShaUsage,
|
||||||
|
AKaShaCharData,
|
||||||
|
)
|
||||||
|
from ..gsuid_utils.api.akashadata.request import (
|
||||||
|
get_akasha_abyss_rank,
|
||||||
|
get_akasha_all_char_info,
|
||||||
|
)
|
||||||
|
|
||||||
|
all_char_info_path = DATA_PATH / 'all_char_info.json'
|
||||||
|
abyss_rank_path = DATA_PATH / 'abyss_rank.json'
|
||||||
|
|
||||||
|
|
||||||
|
async def save_all_char_info():
|
||||||
|
all_char_info = await get_akasha_all_char_info()
|
||||||
|
async with aiofiles.open(all_char_info_path, 'w') as f:
|
||||||
|
await f.write(str(all_char_info))
|
||||||
|
|
||||||
|
|
||||||
|
async def save_all_abyss_rank():
|
||||||
|
abyss_rank = await get_akasha_abyss_rank()
|
||||||
|
async with aiofiles.open(abyss_rank_path, 'w') as f:
|
||||||
|
await f.write(str(abyss_rank))
|
||||||
|
|
||||||
|
|
||||||
|
async def get_akasha_char_data(
|
||||||
|
char_name: str,
|
||||||
|
) -> Optional[Tuple[AKaShaCharData, List[AKaShaUsage]]]:
|
||||||
|
if not all_char_info_path.exists():
|
||||||
|
await save_all_char_info()
|
||||||
|
if not abyss_rank_path.exists():
|
||||||
|
await save_all_abyss_rank()
|
||||||
|
|
||||||
|
async with aiofiles.open(all_char_info_path, 'r') as f:
|
||||||
|
all_char_info: Dict[str, AKaShaCharData] = json.loads(await f.read())
|
||||||
|
|
||||||
|
async with aiofiles.open(abyss_rank_path, 'r') as f:
|
||||||
|
abyss_rank: AKaShaRank = json.loads(await f.read())
|
||||||
|
useage_rank = abyss_rank['usage_list']
|
||||||
|
|
||||||
|
char_name = await alias_to_char_name(char_name)
|
||||||
|
char_id = await name_to_avatar_id(char_name)
|
||||||
|
|
||||||
|
if not char_id:
|
||||||
|
return None
|
||||||
|
|
||||||
|
_char_id = char_id.lstrip('100000').strip('0')
|
||||||
|
if _char_id not in all_char_info:
|
||||||
|
return None
|
||||||
|
|
||||||
|
char_data = all_char_info[_char_id]
|
||||||
|
_char_id_int = int(_char_id)
|
||||||
|
char_useage: List[AKaShaUsage] = []
|
||||||
|
for _char in useage_rank:
|
||||||
|
if _char['i'] == _char_id_int:
|
||||||
|
char_useage.append(_char)
|
||||||
|
return char_data, char_useage
|
||||||
|
|
||||||
|
|
||||||
|
async def draw_char_card(char_name: str):
|
||||||
|
data = await get_akasha_char_data(char_name)
|
||||||
|
if data is None:
|
||||||
|
return
|
||||||
|
char_data, char_useage = data[0], data[1]
|
||||||
|
return char_data, char_useage
|
@ -4,3 +4,6 @@ AKASHA_ABYSS_URL = (
|
|||||||
AKASHA_RANK_URL = (
|
AKASHA_RANK_URL = (
|
||||||
'https://akashadata.feixiaoqiu.com/static/data/abyss_record_list.js'
|
'https://akashadata.feixiaoqiu.com/static/data/abyss_record_list.js'
|
||||||
)
|
)
|
||||||
|
AKASHA_CHAR_URL = (
|
||||||
|
'https://akashadata.feixiaoqiu.com/static/data/card_details.js?v='
|
||||||
|
)
|
||||||
|
@ -99,3 +99,36 @@ class AKaShaRank(TypedDict):
|
|||||||
usage_list: List[AKaShaUsage]
|
usage_list: List[AKaShaUsage]
|
||||||
maxrate_list: List[AKaShaUsage]
|
maxrate_list: List[AKaShaUsage]
|
||||||
out_list: List[AKaShaUsage]
|
out_list: List[AKaShaUsage]
|
||||||
|
|
||||||
|
|
||||||
|
class AKaShaWeaponRate(TypedDict):
|
||||||
|
name: str
|
||||||
|
id: int
|
||||||
|
weapon_icon: str
|
||||||
|
rarity: int
|
||||||
|
rate: str
|
||||||
|
|
||||||
|
|
||||||
|
class AKaShaOneEquipRate(TypedDict):
|
||||||
|
set: str
|
||||||
|
name: str
|
||||||
|
count: str
|
||||||
|
|
||||||
|
|
||||||
|
class AKaShaEquipRate(TypedDict):
|
||||||
|
rate: str
|
||||||
|
set_list: List[AKaShaOneEquipRate]
|
||||||
|
|
||||||
|
|
||||||
|
class AKaShaAbyssChar(TypedDict):
|
||||||
|
use_rate: str
|
||||||
|
maxstar_rate: str
|
||||||
|
come_rate: float
|
||||||
|
avg_level: float
|
||||||
|
avg_constellation: float
|
||||||
|
|
||||||
|
|
||||||
|
class AKaShaCharData(TypedDict):
|
||||||
|
weapons: List[AKaShaWeaponRate]
|
||||||
|
equips: List[AKaShaEquipRate]
|
||||||
|
abyss: AKaShaAbyssChar
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import json
|
import json
|
||||||
from typing import Literal, Optional
|
from typing import Dict, Literal, Optional
|
||||||
|
|
||||||
from httpx import AsyncClient
|
from httpx import AsyncClient
|
||||||
|
|
||||||
from ..types import AnyDict
|
from ..types import AnyDict
|
||||||
from ...version import __version__
|
from ...version import __version__
|
||||||
from .models import AKaShaRank, AkashaAbyssData
|
from .models import AKaShaRank, AKaShaCharData, AkashaAbyssData
|
||||||
from .api import AKASHA_RANK_URL, AKASHA_ABYSS_URL
|
from .api import AKASHA_CHAR_URL, AKASHA_RANK_URL, AKASHA_ABYSS_URL
|
||||||
|
|
||||||
_HEADER = {'User-Agent': f'gsuid-utils/{__version__}'}
|
_HEADER = {'User-Agent': f'gsuid-utils/{__version__}'}
|
||||||
|
|
||||||
@ -28,6 +28,20 @@ async def get_akasha_abyss_info() -> AkashaAbyssData:
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
async def get_akasha_all_char_info() -> Dict[str, AKaShaCharData]:
|
||||||
|
raw_data = await _akasha_request(AKASHA_CHAR_URL)
|
||||||
|
raw_data = (
|
||||||
|
raw_data.replace('\\', '')
|
||||||
|
.lstrip('var static_card_details =')
|
||||||
|
.replace('"[', '[')
|
||||||
|
.replace(']"', ']')
|
||||||
|
.replace('"{', '{')
|
||||||
|
.replace('}"', '}')
|
||||||
|
)
|
||||||
|
data = json.loads(raw_data)
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
async def get_akasha_abyss_rank(is_info: bool = False) -> AKaShaRank:
|
async def get_akasha_abyss_rank(is_info: bool = False) -> AKaShaRank:
|
||||||
raw_data = await _akasha_request(AKASHA_RANK_URL)
|
raw_data = await _akasha_request(AKASHA_RANK_URL)
|
||||||
raw_data = raw_data.lstrip('var static_abyss_total =')
|
raw_data = raw_data.lstrip('var static_abyss_total =')
|
||||||
|
@ -33,7 +33,7 @@ WIKI_CHAR_PATH = WIKI_PATH / 'char'
|
|||||||
WIKI_COST_CHAR_PATH = WIKI_PATH / 'cost_char'
|
WIKI_COST_CHAR_PATH = WIKI_PATH / 'cost_char'
|
||||||
WIKI_COST_WEAPON_PATH = WIKI_PATH / 'cost_weapon'
|
WIKI_COST_WEAPON_PATH = WIKI_PATH / 'cost_weapon'
|
||||||
TEXT2D_PATH = Path(__file__).parent / 'texture2d'
|
TEXT2D_PATH = Path(__file__).parent / 'texture2d'
|
||||||
|
DATA_PATH = MAIN_PATH / 'data'
|
||||||
PLAYER_PATH = MAIN_PATH / 'players'
|
PLAYER_PATH = MAIN_PATH / 'players'
|
||||||
|
|
||||||
|
|
||||||
@ -68,6 +68,7 @@ def init_dir():
|
|||||||
WIKI_CHAR_PATH,
|
WIKI_CHAR_PATH,
|
||||||
WIKI_COST_CHAR_PATH,
|
WIKI_COST_CHAR_PATH,
|
||||||
WIKI_COST_WEAPON_PATH,
|
WIKI_COST_WEAPON_PATH,
|
||||||
|
DATA_PATH,
|
||||||
]:
|
]:
|
||||||
i.mkdir(parents=True, exist_ok=True)
|
i.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
10
poetry.lock
generated
10
poetry.lock
generated
@ -1551,19 +1551,19 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "platformdirs"
|
name = "platformdirs"
|
||||||
version = "3.2.0"
|
version = "3.3.0"
|
||||||
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "platformdirs-3.2.0-py3-none-any.whl", hash = "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e"},
|
{file = "platformdirs-3.3.0-py3-none-any.whl", hash = "sha256:ea61fd7b85554beecbbd3e9b37fb26689b227ffae38f73353cbcc1cf8bd01878"},
|
||||||
{file = "platformdirs-3.2.0.tar.gz", hash = "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08"},
|
{file = "platformdirs-3.3.0.tar.gz", hash = "sha256:64370d47dc3fca65b4879f89bdead8197e93e05d696d6d1816243ebae8595da5"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"]
|
docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"]
|
||||||
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"]
|
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pluggy"
|
name = "pluggy"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user