From d97e2eac4424368db169ef01154a3db05fbd9c7a Mon Sep 17 00:00:00 2001 From: Andrey Loginov Date: Sat, 17 Jun 2023 14:45:00 +0300 Subject: [PATCH 1/3] Adding "api_ru.md" --- api_ru.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 api_ru.md diff --git a/api_ru.md b/api_ru.md new file mode 100644 index 0000000..e69de29 From 6d6971d48511f16006230afbc58e8cf631c769f2 Mon Sep 17 00:00:00 2001 From: Andrey Loginov Date: Sat, 17 Jun 2023 19:10:14 +0300 Subject: [PATCH 2/3] Adding Russian translation --- README.md | 3 +- api_ru.md | 367 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 369 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e31247f..58ecaf6 100644 --- a/README.md +++ b/README.md @@ -13,4 +13,5 @@ Select your preferred language: * [TH | เอกสาร API](/api_th.md) * [CHS | API 文档](/api_chs.md) * [NL | API-documentatie](/api_nl.md) -* [KR | API 문서](/api_kr.md) \ No newline at end of file +* [KR | API 문서](/api_kr.md) +* [RU | API-документация](/api_ru.md) diff --git a/api_ru.md b/api_ru.md index e69de29..60b61e7 100644 --- a/api_ru.md +++ b/api_ru.md @@ -0,0 +1,367 @@ +# Enka.Network - API + +## Содержание + +- [Начало работы](#начало-работы) +- [Структура данных](#структура-данных) +- [Определения](#определения) +- [Иконки и изображения](#иконки-и-изображения) +- [Локализации](#локализации) + +## Начало работы + +Вы можете использовать обёртки, созданные другими людьми, или использовать API напрямую. Это очень просто, поэтому совсем несложно вручную развернуть собственную логику данных на основе ответов. Самой большой проблемой является навигация по игровым данным, собранным с помощью дата-майнинга, и их согласование с возвращаемыми данными. + +Смотрите [обёртки](#обёртки) для выбора нужного языка программирования. + +## Прежде чем сделать запрос + +Пара правил при использовании API: + +1. Пожалуйста, не пытайтесь перебирать UID или выполнять массовые запросы, чтобы заполнить базу данных. Существуют сотни миллионов UID, и Вы просто не сможете этого сделать через этот API. Я могу предоставить пакетные данные позже. + +2. Пожалуйста, устанавливайте свой уникальный заголовок `User-Agent` с запросами, чтобы я мог лучше их отслеживать и помогать, если необходимо. + +3. На эндпоинтах UID предусмотрены динамические ограничения скорости — если запросы летят слишком быстро, Вы столкнетесь с более медленным временем отклика и, в конечном итоге, с кодом возврата 429. Это означает, что Вам нужно либо снизить скорость, либо связаться со мной, чтобы узнать, возможно ли увеличить лимит скорости. В большинстве случаев это не нужно и является результатом неоптимизированного кода. + +4. В этом примечании, все запросы UID возвращают поле `ttl` - это поле означает "секунд до следующего запроса Showcase для этого UID". Пока он не истечет, эндпоинт будет возвращать кешированные данные, но Вы все равно будете расходовать лимит скорости, если неоднократно попадёте на это. Попробуйте либо кэшировать данные с тайм-аутом `ttl` по запросу, либо запретить запросы к UID до тех пор, пока не истечет его `ttl`. Для этого рекомендую использовать Redis. + +Если Вы испытываете трудности при работе с данными, присоединяйтесь к [Discord серверу](https://discord.gg/PcSZr5sbn3) для получения помощи. + +## Список API + +### UID эндпоинты + +#### Получение данных Showcase с полной информацией об игроке + +> https://enka.network/api/uid/618285856/ + +Ответ будет содержать `playerInfo` и `avatarInfoList`. `playerInfo` содержит основные данные об игровом аккаунте. Если `avatarInfoList` отсутствует, это значит, что витрина этой учетной записи либо закрыта, либо не заполнена персонажами. + +#### Получение только информации об игроке + +> https://enka.network/api/uid/618285856/?info + +Прикрепляя `?info` к запросу, Вы получите только `playerInfo`. Основной запрос также всегда пытается получить `avatarInfoList`; если Вам нужен только `playerInfo`, используйте этот эндпоинт - получится намного быстрее, чем попытка получения полных данных. + +Кроме того, оба ответа будут содержать объект «владелец» (`owner`), если: + +1. У пользователя есть аккаунт на сайте; +2. Пользователь добавил свой UID в профиль; +3. Пользователь подтвердил это; +4. Пользователь установил видимость на «публичную». + +Подробнее об учетных записях пользователей ниже. + +#### Коды ответов HTTP + +Убедитесь, что Вы правильно обрабатываете их в своем приложении. + +``` +400 = Неверный формат UID +404 = Игрок не существует (так сказали сервера MHY) +424 = Обслуживание игры / все сломалось после обновления +429 = Ограничена скорость (либо моим сервером, либо сервером MHY) +500 = Общая ошибка сервера +503 = Я сильно облажался +``` + +### Эндпоинты профиля + +На сайте можно создать аккаунт (профиль) и привязать к нему несколько игровых аккаунтов. Затем, с помощью кода подтверждения, помещенного в их подпись, пользователи должны подтвердить, что это их учетная запись — таким образом мы можем гарантировать, что учетная запись принадлежит им. + +Пользователи могут делать «снэпшоты» сборок под произвольными именами, называемыми «сохраненными сборками». + +> https://enka.network/api/profile/Algoinde/ + +Получает информацию о пользователе + +> https://enka.network/api/profile/Algoinde/hoyos/ + +Получает список «hoyos» — учетные записи Genshin и их метаданные. Это возвращает только `verified` и `public` учетные записи (пользователи могут скрывать учетные записи; неподтвержденные учетные записи скрыты по умолчанию). Каждый ключ в ответе является уникальным идентификатором hoyo, который вам нужно использовать для последующих запросов, чтобы фактически получить информацию о персонажах/сборках. + +> https://enka.network/api/profile/Algoinde/hoyos/4Wjv2e/ + +Возвращает метаданные для одного hoyo. + +> https://enka.network/api/profile/Algoinde/hoyos/4Wjv2e/builds/ + +Возвращает сохраненные сборки для данного hoyo. Это объект массивов, где ключом является `avatarId` персонажа, а объекты в массивах — разные сборки для данного персонажа в произвольном порядке (однако, у них есть поле `order`, по которому нужно упорядочивать для отображения). + +Если в сборке есть поле `live: true`, это значит, что это не «сохраненная» сборка, а та, что была получена из витрины, когда была нажата кнопка «обновить». При обновлении все старые `live` сборки удаляются и создаются новые. Только пользователь решает, когда выполнять это обновление — эти данные НЕ будут актуальными. + +Как указано в разделе [UID эндпоинты](#uid-эндпоинты), когда происходит запрос UID, Вы можете получить объект `owner`. Можно создать URL-адрес, используя эти поля в объекте: + +`https://enka.network/api/profile/{owner.username}/hoyos/{owner.hash}/builds/` + +## Структура данных + +| Название | Описание | +| :--- | :---------- | +| [playerInfo](#playerinfo) | Информация профиля | +| [avatarInfoList](#avatarinfolist) | Список подробной информации по каждому персонажу из витрины | + +### playerInfo + +Базовые данные персонажей по ID можно получить из [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json).
+Для дополнительной информации можно обратиться к [данным персонажей](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarExcelConfigData.json). + +| Название | Описание | +| :--- | :--------- | +| nickname | Никнейм игрока | +| signature | Подпись ппрофиля | +| worldLevel | Уровень мира игрока | +| namecardId | ID именной карточки профиля | +| finishAchievementNum | Количество полученных достижений | +| towerFloorIndex | Этаж витой бездны | +| towerLevelIndex | Комната витой бездны | +| [showAvatarInfoList](#showavatarinfolist) | Список ID персонажей и уровней | +| showNameCardIdList | Список ID именных карточек | +| profilePicture.avatarId | ID персонажа на изображении профиля | + +#### showAvatarInfoList + +| Название | Описание | +| :--- | :--------- | +| avatarId | ID персонажа | +| level | Уровень персонажа | +| costumeId | ID скина персонажа. Проверьте `"Костюмы"` в [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json) | + +### avatarInfoList + +Базовые данные персонажей по ID можно получить из [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json).
+Для дополнительной информации можно обратиться к [данным персонажей](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarExcelConfigData.json). + +| Название | Описание | +| :--- | :---------- | +| avatarID | ID персонажа | +| talentIdList | Список ID созвездий
Нет данных, если 0 созвездий | +| [propMap](#propmap) | Список свойств информации о персонаже | +| fightPropMap -> `{id: value}` | `Map` боевых свойств персонажа.
Проверьте [определения для ID](#fightprop)| +| skillDepotId | ID набора навыков персонажа
[Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"id"`| +| inherentProudSkillList | Список разблокированных ID навыков
[Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"inherentProudSkillOpens"` | +| skillLevelMap -> `{skill_id: level}`| `Map` уровней навыков
[Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"inherentProudSkillOpens"` | +| [equipList](#equiplist) | Список снаряжения: Оружие, Артефакты | +| fetterInfo.expLevel | Уровень дружбы персонажа | + +#### propMap + +| Название | Описание | +| :--- | :--------- | +| type | ID типа свойства, проверьте [определения для ID](#prop) | +| ival | Игнорируйте это | +| val | Значение свойства | + +#### equipList + +| Название | Описание | +| :--- | :--------- | +| itemId | ID снаряжения
[Данные артефактов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryExcelConfigData.json) -> `"id"`
[Данные оружия](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/WeaponExcelConfigData.json) -> `"id"` | +| [weapon](#weapon) `[Только оружие]` | Информация о базе оружия | +| [reliquary](#reliquary) `[Только артефакт]` | Информация о базе артефакта | +| [flat](#flat) | Подробная информация о снаряжении | + +#### weapon + +Для получения дополнительной информации об оружии можно обратиться к [данным оружий](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/WeaponExcelConfigData.json) + +| Название | Описание | +| :--- | :---------- | +| level | Уровень оружия | +| promoteLevel | Уровень возвышения оружия | +| affixMap | Уровень пробуждения оружия `[0-4]` | + +#### reliquary + +Для получения дополнительной информации об артефактах можно обратиться к [данным артефактов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryExcelConfigData.json) + +| Название | Описание | +| :--- | :---------- | +| level | Уровень артефакта `[1-21]` | +| mainPropId | ID основного стата артефакта
[Данные основных статов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryMainPropExcelConfigData.json) | +| appendPropIdList | Список ID подстатов артефакта
[Данные подстатов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryAffixExcelConfigData.json) | + +#### flat + +| Название | Описание | +| :--- | :---------- | +| nameTextHashMap | Хэш для названия снаряжения
Проверьте [локализации](#локализации) | +| setNameTextHashMap `[Только артефакт]`| Хэш для названия набора артефактов
Проверьте [локализации](#локализации)| +| rankLevel | Уровень редкости снаряжения | +| [reliquaryMainstat](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только артефакт]` | Основной стат артефакта | +| [reliquarySubstats](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только артефакт]` | Список подстатов артефакта | +| [weaponStats](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только оружие]`| Список статов оружия: Базовая слиа атаки, подстат | +| [itemType](#itemtype) | Тип снаряжения: оружие или артефакт | +| icon | Название иконки снаряжения
[Использование названий иконок](#иконки-и-изображения)| +| [equipType](#equiptype) `[Только артефакт]` | Тип артефакта | + +#### reliquaryMainstat, reliquarySubstats, weaponStats + +| Название | Описание | +| :--- | :---------- | +| mainPropId / appendPropID | Название добавочного свойства снаряжения. Проверьте [определния имён](#appendprop)| +| propValue | Значение свойства | + +## Определения + +### Prop + +| Тип | Описание | +| :--: | :---------- | +| 1001 | Опыт | +| 1002 | Возвышение | +| 4001 | Уровень | + +### FightProp + +| Тип | Описание | +| :--: | :---------- | +| 1 | Базовое HP | +| 2 | HP | +| 3 | HP% | +| 4 | Базовая сила атаки | +| 5 | Сила атаки | +| 6 | Сила атаки % | +| 7 | Базовая защита | +| 8 | Защита | +| 9 | Защита % | +| 10 | Базовая скорость атаки | +| 11 | Скорость атаки % | +| 20 | Шанс крит. попадания | +| 22 | Крит. урон | +| 23 | Восст. энергии | +| 26 | Бонус лечения | +| 27 | Бонус получаемого лечения | +| 28 | Мастерство стихий | +| 29 | Физ. сопротиление | +| 30 | Бонус физ. урона | +| 40 | Бонус Пиро урона | +| 41 | Бонус Электро урона | +| 42 | Бонус Гидро урона | +| 43 | Бонус Дендро урона | +| 44 | Бонус Анемо урона | +| 45 | Бонус Гео урона | +| 46 | Бонус Крио урона | +| 50 | Пиро сопротивление | +| 51 | Электро сопротивление | +| 52 | Гидро сопротивление | +| 53 | Дендро сопротивление | +| 54 | Анемо сопротивление | +| 55 | Гео сопротивление | +| 56 | Крио сопротивление | +| 70 | Потребление Пиро энергии | +| 71 | Потребление Электро энергии | +| 72 | Потребление Гидро энергии | +| 73 | Потребление Дендро энергии | +| 74 | Потребление Анемо энергии | +| 75 | Потребление Крио энергии | +| 76 | Потребление Гео энергии | +| 80 | Снижение времени отката | +| 81 | Прочность щита | +| 1000 | Текущая Пиро энергия | +| 1001 | Текущая Электро энергия | +| 1002 | Текущая Гидро энергия | +| 1003 | Текущая Дендро энергия | +| 1004 | Текущая Анемо энергия | +| 1005 | Текущая Крио энергия | +| 1006 | Текущая Гео энергия | +| 1010 | Текущее HP | +| 2000 | Максимальное HP | +| 2001 | Сила атаки | +| 2002 | Защита | +| 2003 | Скорость атаки | +| 3025 | Крит. шанс элементальной реакции | +| 3026 | Крит. урон элементальной реакции | +| 3027 | Крит. шанс элементальной реакции (Перегрузка) | +| 3028 | Крит. урон элементальной реакции (Перегрузка) | +| 3029 | Крит. шанс элементальной реакции (Рассеивание) | +| 3030 | Крит. урон элементальной реакции (Рассеивание) | +| 3031 | Крит. шанс элементальной реакции (Заряжен) | +| 3032 | Крит. урон элементальной реакции (Заряжен) | +| 3033 | Крит. шанс элементальной реакции (Сверхпроводник) | +| 3034 | Крит. урон элементальной реакции (Сверхпроводник) | +| 3035 | Крит. шанс элементальной реакции (Горение) | +| 3036 | Крит. урон элементальной реакции (Горение) | +| 3037 | Крит. шанс элементальной реакции (Заморозка (Разбит)) | +| 3038 | Крит. урон элементальной реакции (Заморозка (Разбит)) | +| 3039 | Крит. шанс элементальной реакции (Бутонизация) | +| 3040 | Крит. урон элементальной реакции (Бутонизация) | +| 3041 | Крит. шанс элементальной реакции (Цве­тение) | +| 3042 | Крит. урон элементальной реакции (Цве­тение) | +| 3043 | Крит. шанс элементальной реакции (Веге­тация) | +| 3044 | Крит. урон элементальной реакции (Веге­тация) | +| 3045 | Базовый крит. шанс элементальной реакции | +| 3046 | Базовый крит. урон элементальной реакции | + +### ItemType + +| Название | Описание | +| :--- | :---------- | +| ITEM_WEAPON | Оружие | +| ITEM_RELIQUARY | Артефакт | + +### EquipType + +| Название | Описание | +| :--- | :---------- | +| EQUIP_BRACER | Цветок жизни | +| EQUIP_NECKLACE | Перо смерти | +| EQUIP_SHOES | Пески времени | +| EQUIP_RING | Кубок пространства | +| EQUIP_DRESS | Корона разума | + +### AppendProp + +| Название | Описание | +| :--- | :---------- | +| FIGHT_PROP_BASE_ATTACK `[Оружие]` | Базовая сила атаки | +| FIGHT_PROP_HP | Целочисленное HP | +| FIGHT_PROP_ATTACK | Целочисленная сила атаки | +| FIGHT_PROP_DEFENSE | Целочисленная защита | +| FIGHT_PROP_HP_PERCENT | HP% | +| FIGHT_PROP_ATTACK_PERCENT | Сила атаки % | +| FIGHT_PROP_DEFENSE_PERCENT | Защита % | +| FIGHT_PROP_CRITICAL | Шанс крит. попадания | +| FIGHT_PROP_CRITICAL_HURT | Крит. урон | +| FIGHT_PROP_CHARGE_EFFICIENCY | Восст. энергии | +| FIGHT_PROP_HEAL_ADD | Бонус лечения | +| FIGHT_PROP_ELEMENT_MASTERY | Мастерсто стихий | +| FIGHT_PROP_PHYSICAL_ADD_HURT | Бонус физ. урона | +| FIGHT_PROP_FIRE_ADD_HURT | Бонус Пиро урона | +| FIGHT_PROP_ELEC_ADD_HURT | Бонус Электро урона | +| FIGHT_PROP_WATER_ADD_HURT | Бонус Гидро урона | +| FIGHT_PROP_WIND_ADD_HURT | Бонус Анемо урона | +| FIGHT_PROP_ICE_ADD_HURT | Бонус Крио урона | +| FIGHT_PROP_ROCK_ADD_HURT | Бонус Гео урона | +| FIGHT_PROP_GRASS_ADD_HURT | Бонус Дендро урона | + +## Иконки и изображения + +Вы можете получить иконки персонажей, оружия и артефактов при помощи Enka, по URL `https://enka.network/ui/[icon_name].png`. +Обычно название иконки начинается с `"UI_"` или `"Skill_"` для [талантов персонажей](#персонажи-таланты-и-созвездия). +Например, https://enka.network/ui/UI_AvatarIcon_Side_Ambor.png. + +### Оружия и артефакты + +Перейдите во [flat](#flat) и найдите `icon`. + +### Персонажи, таланты и созвездия + +Перейдите в [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json) и ищите всё, что связано с «UI_XXXXXX» или «Skill_XXXXXX» по ID персонажа. + +## Локализации + +Вы можете заметить `"NameTextMapHash"` в [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json), `"nameTextHashMap"` и `"setNameTextHashMap"` в [flat](#flat) который можно было бы использовать в качестве ключа для получения основных данных о локализации персонажей, оружия и артефактов из [store/loc.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/loc.json). +Вы также можете получить данные локализации [AppendProp](#appendprop) используя имя свойства в качестве ключа - `"FIGHT_PROP_HP"`, `"FIGHT_PROP_HEAL_ADD"` и так далее. + +Для получения дополнительной информации об именах, описаниях и так далее, проверьте [TextMap Data](https://gitlab.com/Dimbreath/AnimeGameData/-/tree/master/TextMap), включает только языки, поддерживаемые игрой. + +## Обёртки + +TS/JS - https://www.npmjs.com/package/enkanetwork.js - [Jelosus1](https://github.com/Jelosus2) + +TS/JS - https://github.com/yuko1101/enka-network-api - [yuko1101](https://github.com/yuko1101) + +Rust - https://github.com/eratou/enkanetwork-rs - [eratou](https://github.com/eratou) + +Python - https://github.com/mrwan200/enkanetwork.py - [mrwan200](https://github.com/mrwan200) From 5059ec4d8dd1eb070ed34e5229947f36c6b0276c Mon Sep 17 00:00:00 2001 From: Algoinde Date: Sat, 17 Jun 2023 22:04:24 +0500 Subject: [PATCH 3/3] Update api_ru.md --- api_ru.md | 104 +++++++++++++++++++++++++++--------------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/api_ru.md b/api_ru.md index 60b61e7..2266aeb 100644 --- a/api_ru.md +++ b/api_ru.md @@ -6,50 +6,50 @@ - [Структура данных](#структура-данных) - [Определения](#определения) - [Иконки и изображения](#иконки-и-изображения) -- [Локализации](#локализации) +- [Локализация](#локализация) ## Начало работы -Вы можете использовать обёртки, созданные другими людьми, или использовать API напрямую. Это очень просто, поэтому совсем несложно вручную развернуть собственную логику данных на основе ответов. Самой большой проблемой является навигация по игровым данным, собранным с помощью дата-майнинга, и их согласование с возвращаемыми данными. +Вы можете использовать API напрямую, либо использовать библиотеки-врапперы, написанные другими. API довольно несложное, основная работа заключается в поиске нужных вещей в датамайне из игры на основе данных, которые возвращает API - в этом основной функционал такой библиотеки. -Смотрите [обёртки](#обёртки) для выбора нужного языка программирования. +В разделе [библиотеки-врапперы](#библиотеки-врапперы) вы можете найти библиотеку на подходящем языке программирования. -## Прежде чем сделать запрос +## То, чего следует придерживаться при запросах -Пара правил при использовании API: +Несколько правил использования API: -1. Пожалуйста, не пытайтесь перебирать UID или выполнять массовые запросы, чтобы заполнить базу данных. Существуют сотни миллионов UID, и Вы просто не сможете этого сделать через этот API. Я могу предоставить пакетные данные позже. +1. Пожалуйста, не пытайтесь перебирать UID или выполнять массовые запросы (чтобы разом заполнить свою базу данных, например). В игре сотни миллионов UID, через мой API это просто не представляется вомзожным. Возможно, позднее я сделаю выгрузку, которую можно будет скачать целиком. -2. Пожалуйста, устанавливайте свой уникальный заголовок `User-Agent` с запросами, чтобы я мог лучше их отслеживать и помогать, если необходимо. +2. Поставьте `User-Agent` хедер на ваши запросы, чтобы я мог их видеть - для того чтобы я если что смог помочь или подсказать что-то. -3. На эндпоинтах UID предусмотрены динамические ограничения скорости — если запросы летят слишком быстро, Вы столкнетесь с более медленным временем отклика и, в конечном итоге, с кодом возврата 429. Это означает, что Вам нужно либо снизить скорость, либо связаться со мной, чтобы узнать, возможно ли увеличить лимит скорости. В большинстве случаев это не нужно и является результатом неоптимизированного кода. +3. На запрос данных по UID есть динамические рейтлимиты — если вы делаете слишком много запросов, время отклика будет расти. В конце концов вы уткнетесь в HTTP-код 429. В этом случае нужно принять меры, чтобы уменьшить их количество. Можете связаться со мной, чтобы узнать, возможно ли увеличить рейтлимиты для вашего конкретного случая, но в большинстве случаев это не нужно и просто является результатом неоптимизированного кода. -4. В этом примечании, все запросы UID возвращают поле `ttl` - это поле означает "секунд до следующего запроса Showcase для этого UID". Пока он не истечет, эндпоинт будет возвращать кешированные данные, но Вы все равно будете расходовать лимит скорости, если неоднократно попадёте на это. Попробуйте либо кэшировать данные с тайм-аутом `ttl` по запросу, либо запретить запросы к UID до тех пор, пока не истечет его `ttl`. Для этого рекомендую использовать Redis. +4. Запросы на UID возвращают поле `ttl` - это поле означает "сколько осталось секунд до очередного запроса в игру". Пока `ttl` не истечет, эндпоинт будет возвращать кешированные данные - но в рейтлимит такой запрос всё равно будет считаться. Рекоменндую кэшировать данные и использовать `ttl` для того, чтобы UID нельзя было запросить снова (пока оно не истечет). Для этого рекомендую использовать Redis. -Если Вы испытываете трудности при работе с данными, присоединяйтесь к [Discord серверу](https://discord.gg/PcSZr5sbn3) для получения помощи. +Если есть вопросы по API или распарсиванию данных, можете задать вопрос на [Discord-сервере](https://discord.gg/PcSZr5sbn3). -## Список API +## API -### UID эндпоинты +### UID-эндпоинты -#### Получение данных Showcase с полной информацией об игроке +#### Получение данных с витрины с полной информацией об игроке > https://enka.network/api/uid/618285856/ -Ответ будет содержать `playerInfo` и `avatarInfoList`. `playerInfo` содержит основные данные об игровом аккаунте. Если `avatarInfoList` отсутствует, это значит, что витрина этой учетной записи либо закрыта, либо не заполнена персонажами. +Ответ будет содержать `playerInfo` и `avatarInfoList`. `playerInfo` содержит основные данные об игровом аккаунте. Если `avatarInfoList` отсутствует, это значит, что витрина этой учетной записи либо скрыта игроком, либо там нет персонажей. #### Получение только информации об игроке > https://enka.network/api/uid/618285856/?info -Прикрепляя `?info` к запросу, Вы получите только `playerInfo`. Основной запрос также всегда пытается получить `avatarInfoList`; если Вам нужен только `playerInfo`, используйте этот эндпоинт - получится намного быстрее, чем попытка получения полных данных. +Подставив `?info` к запросу, Вы получите только `playerInfo`. Основной эндпоинт всегда дополнительно делает запрос для получения `avatarInfoList`; если Вам нужен только `playerInfo`, используйте `?info` - он работает быстрее и на нём меньше рейтлимиты. Кроме того, оба ответа будут содержать объект «владелец» (`owner`), если: 1. У пользователя есть аккаунт на сайте; 2. Пользователь добавил свой UID в профиль; -3. Пользователь подтвердил это; -4. Пользователь установил видимость на «публичную». +3. Пользователь верицифировал, что UID принадлежит ему; +4. Пользователь установил его видимость на «публичный». Подробнее об учетных записях пользователей ниже. @@ -59,18 +59,18 @@ ``` 400 = Неверный формат UID -404 = Игрок не существует (так сказали сервера MHY) -424 = Обслуживание игры / все сломалось после обновления -429 = Ограничена скорость (либо моим сервером, либо сервером MHY) -500 = Общая ошибка сервера -503 = Я сильно облажался +404 = Игрок не существует (так сказали сервера михоёв, не стоит на это 100% полагаться) +424 = Обслуживание серверов / все сломалось после обновления +429 = Ограничена скорость (либо моим сервером, либо сервером михоёв) +500 = Общая ошибка сервера (что-то не так в данных?) +503 = Всё умерло насмерть ``` ### Эндпоинты профиля -На сайте можно создать аккаунт (профиль) и привязать к нему несколько игровых аккаунтов. Затем, с помощью кода подтверждения, помещенного в их подпись, пользователи должны подтвердить, что это их учетная запись — таким образом мы можем гарантировать, что учетная запись принадлежит им. +На сайте можно создать аккаунт (профиль) и привязать к нему несколько игровых аккаунтов. Затем, с помощью кода подтверждения, засунутого в подпись, пользователи могут подтвердить, что это их аккаунт — таким образом сайт можем гарантировать, что игровой аккаунт принадлежит данному человеку. -Пользователи могут делать «снэпшоты» сборок под произвольными именами, называемыми «сохраненными сборками». +Пользователи могут сохранять снапшоты сборок под произвольными именами, я их называю «сохраненные сборки». > https://enka.network/api/profile/Algoinde/ @@ -78,19 +78,19 @@ > https://enka.network/api/profile/Algoinde/hoyos/ -Получает список «hoyos» — учетные записи Genshin и их метаданные. Это возвращает только `verified` и `public` учетные записи (пользователи могут скрывать учетные записи; неподтвержденные учетные записи скрыты по умолчанию). Каждый ключ в ответе является уникальным идентификатором hoyo, который вам нужно использовать для последующих запросов, чтобы фактически получить информацию о персонажах/сборках. +Получает список «hoyos» — учетные записи в Геншине и метаданные о них. Эндпоинт вернет только те учетные записи, которые являются и `verified`, и `public` (пользователи могут скрывать учетные записи; неподтвержденные учетные записи скрыты по умолчанию). Каждый ключ в ответе является уникальным идентификатором для `hoyo` - его затем можно использовать для последующих запросов, чтобы получить информацию о персонажах/сборках этого игрового аккаунта. > https://enka.network/api/profile/Algoinde/hoyos/4Wjv2e/ -Возвращает метаданные для одного hoyo. +Возвращает метаданные для одного hoyo (игрового аккаунта). > https://enka.network/api/profile/Algoinde/hoyos/4Wjv2e/builds/ -Возвращает сохраненные сборки для данного hoyo. Это объект массивов, где ключом является `avatarId` персонажа, а объекты в массивах — разные сборки для данного персонажа в произвольном порядке (однако, у них есть поле `order`, по которому нужно упорядочивать для отображения). +Возвращает сохраненные сборки для данного hoyo. Это объект массивов, где ключом является `avatarId` персонажа, а объекты в массивах — разные сборки для данного персонажа в произвольном порядке (однако, у них есть поле `order`, по которому можно их упорядочить для отображения). Если в сборке есть поле `live: true`, это значит, что это не «сохраненная» сборка, а та, что была получена из витрины, когда была нажата кнопка «обновить». При обновлении все старые `live` сборки удаляются и создаются новые. Только пользователь решает, когда выполнять это обновление — эти данные НЕ будут актуальными. -Как указано в разделе [UID эндпоинты](#uid-эндпоинты), когда происходит запрос UID, Вы можете получить объект `owner`. Можно создать URL-адрес, используя эти поля в объекте: +Как указано в разделе [UID-эндпоинты](#uid-эндпоинты), при запросе UID в ответе может быть объект `owner`. Используя поля в этом объекте, можно сконструировать API-ссылку на профиль: `https://enka.network/api/profile/{owner.username}/hoyos/{owner.hash}/builds/` @@ -113,11 +113,11 @@ | worldLevel | Уровень мира игрока | | namecardId | ID именной карточки профиля | | finishAchievementNum | Количество полученных достижений | -| towerFloorIndex | Этаж витой бездны | -| towerLevelIndex | Комната витой бездны | +| towerFloorIndex | Этаж бездны | +| towerLevelIndex | Комната бездны | | [showAvatarInfoList](#showavatarinfolist) | Список ID персонажей и уровней | | showNameCardIdList | Список ID именных карточек | -| profilePicture.avatarId | ID персонажа на изображении профиля | +| profilePicture.avatarId | ID персонажа на аватарке | #### showAvatarInfoList @@ -125,7 +125,7 @@ | :--- | :--------- | | avatarId | ID персонажа | | level | Уровень персонажа | -| costumeId | ID скина персонажа. Проверьте `"Костюмы"` в [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json) | +| costumeId | ID скина персонажа. Смотрите `"costumes"` в [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json) | ### avatarInfoList @@ -137,7 +137,7 @@ | avatarID | ID персонажа | | talentIdList | Список ID созвездий
Нет данных, если 0 созвездий | | [propMap](#propmap) | Список свойств информации о персонаже | -| fightPropMap -> `{id: value}` | `Map` боевых свойств персонажа.
Проверьте [определения для ID](#fightprop)| +| fightPropMap -> `{id: value}` | `Map` боевых свойств персонажа.
Смотрите [определения для ID](#fightprop)| | skillDepotId | ID набора навыков персонажа
[Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"id"`| | inherentProudSkillList | Список разблокированных ID навыков
[Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"inherentProudSkillOpens"` | | skillLevelMap -> `{skill_id: level}`| `Map` уровней навыков
[Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"inherentProudSkillOpens"` | @@ -148,18 +148,18 @@ | Название | Описание | | :--- | :--------- | -| type | ID типа свойства, проверьте [определения для ID](#prop) | -| ival | Игнорируйте это | -| val | Значение свойства | +| type | ID статы, см. [определения для ID статов](#prop) | +| ival | На это можно забить | +| val | Значение этой статы | #### equipList | Название | Описание | | :--- | :--------- | -| itemId | ID снаряжения
[Данные артефактов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryExcelConfigData.json) -> `"id"`
[Данные оружия](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/WeaponExcelConfigData.json) -> `"id"` | -| [weapon](#weapon) `[Только оружие]` | Информация о базе оружия | -| [reliquary](#reliquary) `[Только артефакт]` | Информация о базе артефакта | -| [flat](#flat) | Подробная информация о снаряжении | +| itemId | ID оружия
[Данные артефактов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryExcelConfigData.json) -> `"id"`
[Данные оружия](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/WeaponExcelConfigData.json) -> `"id"` | +| [weapon](#weapon) `[Только оружие]` | Базовая информация об оружии | +| [reliquary](#reliquary) `[Только артефакт]` | Базовая информация об артефакте | +| [flat](#flat) | Дополнительная распарсенная информация | #### weapon @@ -185,8 +185,8 @@ | Название | Описание | | :--- | :---------- | -| nameTextHashMap | Хэш для названия снаряжения
Проверьте [локализации](#локализации) | -| setNameTextHashMap `[Только артефакт]`| Хэш для названия набора артефактов
Проверьте [локализации](#локализации)| +| nameTextHashMap | Хэш имени предмета
См. [локализация](#локализация) | +| setNameTextHashMap `[Только артефакт]`| Хэш для названия сета артефактов
См. [локализация](#локализация)| | rankLevel | Уровень редкости снаряжения | | [reliquaryMainstat](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только артефакт]` | Основной стат артефакта | | [reliquarySubstats](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только артефакт]` | Список подстатов артефакта | @@ -199,8 +199,8 @@ | Название | Описание | | :--- | :---------- | -| mainPropId / appendPropID | Название добавочного свойства снаряжения. Проверьте [определния имён](#appendprop)| -| propValue | Значение свойства | +| mainPropId / appendPropID | ID статы снаряжения. Смотрите [определения имён](#appendprop)| +| propValue | Значение статы | ## Определения @@ -337,26 +337,26 @@ ## Иконки и изображения -Вы можете получить иконки персонажей, оружия и артефактов при помощи Enka, по URL `https://enka.network/ui/[icon_name].png`. +Иконки персонажей, оружия и артефактов можно взять с моего CDN, по URL `https://enka.network/ui/[icon_name].png`. Обычно название иконки начинается с `"UI_"` или `"Skill_"` для [талантов персонажей](#персонажи-таланты-и-созвездия). Например, https://enka.network/ui/UI_AvatarIcon_Side_Ambor.png. ### Оружия и артефакты -Перейдите во [flat](#flat) и найдите `icon`. +Внутри объектов [flat](#flat) есть `icon`. ### Персонажи, таланты и созвездия -Перейдите в [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json) и ищите всё, что связано с «UI_XXXXXX» или «Skill_XXXXXX» по ID персонажа. +В [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json) - строки, которые «UI_XXXXXX» или «Skill_XXXXXX» - находятся по ID персонажа. -## Локализации +## Локализация -Вы можете заметить `"NameTextMapHash"` в [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json), `"nameTextHashMap"` и `"setNameTextHashMap"` в [flat](#flat) который можно было бы использовать в качестве ключа для получения основных данных о локализации персонажей, оружия и артефактов из [store/loc.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/loc.json). -Вы также можете получить данные локализации [AppendProp](#appendprop) используя имя свойства в качестве ключа - `"FIGHT_PROP_HP"`, `"FIGHT_PROP_HEAL_ADD"` и так далее. +`"NameTextMapHash"` в [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json), `"nameTextHashMap"` и `"setNameTextHashMap"` в [flat](#flat) используется в качестве ключа для получения локализованных названий предметов из [store/loc.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/loc.json). +Также можно взять локализацию для [AppendProp](#appendprop) используя имя свойства в качестве ключа - `"FIGHT_PROP_HP"`, `"FIGHT_PROP_HEAL_ADD"` и так далее. -Для получения дополнительной информации об именах, описаниях и так далее, проверьте [TextMap Data](https://gitlab.com/Dimbreath/AnimeGameData/-/tree/master/TextMap), включает только языки, поддерживаемые игрой. +Дополнительные локализованные строки можно взять из [TextMap Data](https://gitlab.com/Dimbreath/AnimeGameData/-/tree/master/TextMap) (включает только языки, поддерживаемые игрой). -## Обёртки +## Библиотеки-врапперы TS/JS - https://www.npmjs.com/package/enkanetwork.js - [Jelosus1](https://github.com/Jelosus2)