|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- # Enka.Network - API
-
- ## Содержание
-
- - [Начало работы](#начало-работы)
- - [Структура данных](#структура-данных)
- - [Определения](#определения)
- - [Иконки и изображения](#иконки-и-изображения)
- - [Локализация](#локализация)
-
- ## Начало работы
-
- Вы можете использовать API напрямую, либо использовать библиотеки-врапперы, написанные другими. API довольно несложное, основная работа заключается в поиске нужных вещей в датамайне из игры на основе данных, которые возвращает API - в этом основной функционал такой библиотеки.
-
- В разделе [библиотеки-врапперы](#библиотеки-врапперы) вы можете найти библиотеку на подходящем языке программирования.
-
- ## То, чего следует придерживаться при запросах
-
- Несколько правил использования API:
-
- 1. Пожалуйста, не пытайтесь перебирать UID или выполнять массовые запросы (чтобы разом заполнить свою базу данных, например). В игре сотни миллионов UID, через мой API это просто не представляется вомзожным. Возможно, позднее я сделаю выгрузку, которую можно будет скачать целиком.
-
- 2. Поставьте `User-Agent` хедер на ваши запросы, чтобы я мог их видеть - для того чтобы я если что смог помочь или подсказать что-то.
-
- 3. На запрос данных по UID есть динамические рейтлимиты — если вы делаете слишком много запросов, время отклика будет расти. В конце концов вы уткнетесь в HTTP-код 429. В этом случае нужно принять меры, чтобы уменьшить их количество. Можете связаться со мной, чтобы узнать, возможно ли увеличить рейтлимиты для вашего конкретного случая, но в большинстве случаев это не нужно и просто является результатом неоптимизированного кода.
-
- 4. Запросы на UID возвращают поле `ttl` - это поле означает "сколько осталось секунд до очередного запроса в игру". Пока `ttl` не истечет, эндпоинт будет возвращать кешированные данные - но в рейтлимит такой запрос всё равно будет считаться. Рекоменндую кэшировать данные и использовать `ttl` для того, чтобы UID нельзя было запросить снова (пока оно не истечет). Для этого рекомендую использовать Redis.
-
- Если есть вопросы по API или распарсиванию данных, можете задать вопрос на [Discord-сервере](https://discord.gg/PcSZr5sbn3).
-
- ## API
-
- ### UID-эндпоинты
-
- #### Получение данных с витрины с полной информацией об игроке
-
- > https://enka.network/api/uid/618285856/
-
- Ответ будет содержать `playerInfo` и `avatarInfoList`. `playerInfo` содержит основные данные об игровом аккаунте. Если `avatarInfoList` отсутствует, это значит, что витрина этой учетной записи либо скрыта игроком, либо там нет персонажей.
-
- #### Получение только информации об игроке
-
- > https://enka.network/api/uid/618285856/?info
-
- Подставив `?info` к запросу, Вы получите только `playerInfo`. Основной эндпоинт всегда дополнительно делает запрос для получения `avatarInfoList`; если Вам нужен только `playerInfo`, используйте `?info` - он работает быстрее и на нём меньше рейтлимиты.
-
- Кроме того, оба ответа будут содержать объект «владелец» (`owner`), если:
-
- 1. У пользователя есть аккаунт на сайте;
- 2. Пользователь добавил свой UID в профиль;
- 3. Пользователь верицифировал, что UID принадлежит ему;
- 4. Пользователь установил его видимость на «публичный».
-
- Подробнее об учетных записях пользователей ниже.
-
- #### Коды ответов HTTP
-
- Убедитесь, что Вы правильно обрабатываете их в своем приложении.
-
- ```
- 400 = Неверный формат UID
- 404 = Игрок не существует (так сказали сервера михоёв, не стоит на это 100% полагаться)
- 424 = Обслуживание серверов / все сломалось после обновления
- 429 = Ограничена скорость (либо моим сервером, либо сервером михоёв)
- 500 = Общая ошибка сервера (что-то не так в данных?)
- 503 = Всё умерло насмерть
- ```
-
- ### Эндпоинты профиля
-
- На сайте можно создать аккаунт (профиль) и привязать к нему несколько игровых аккаунтов. Затем, с помощью кода подтверждения, засунутого в подпись, пользователи могут подтвердить, что это их аккаунт — таким образом сайт можем гарантировать, что игровой аккаунт принадлежит данному человеку.
-
- Пользователи могут сохранять снапшоты сборок под произвольными именами, я их называю «сохраненные сборки».
-
- > https://enka.network/api/profile/Algoinde/
-
- Получает информацию о пользователе
-
- > https://enka.network/api/profile/Algoinde/hoyos/
-
- Получает список «hoyos» — учетные записи в Геншине и метаданные о них. Эндпоинт вернет только те учетные записи, которые являются и `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`. Используя поля в этом объекте, можно сконструировать API-ссылку на профиль:
-
- `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). <br />
- Для дополнительной информации можно обратиться к [данным персонажей](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 скина персонажа. Смотрите `"costumes"` в [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). <br />
- Для дополнительной информации можно обратиться к [данным персонажей](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarExcelConfigData.json).
-
- | Название | Описание |
- | :--- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
- | avatarID | ID персонажа |
- | talentIdList | Список ID созвездий <br /> Нет данных, если 0 созвездий |
- | [propMap](#propmap) | Список свойств информации о персонаже |
- | fightPropMap -> `{id: value}` | `Map` боевых свойств персонажа. <br />Смотрите [определения для ID](#fightprop) |
- | skillDepotId | ID набора навыков персонажа <br />[Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"id"` |
- | inherentProudSkillList | Список разблокированных ID навыков <br />[Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"inherentProudSkillOpens"` |
- | skillLevelMap -> `{skill_id: level}`| `Map` уровней навыков <br /> [Данные умений](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 оружия <br /> [Данные артефактов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryExcelConfigData.json) -> `"id"` <br /> [Данные оружия](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 основного стата артефакта <br /> [Данные основных статов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryMainPropExcelConfigData.json) |
- | appendPropIdList | Список ID подстатов артефакта <br /> [Данные подстатов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryAffixExcelConfigData.json) |
-
- #### flat
-
- | Название | Описание |
- | :--- | :---------- |
- | nameTextHashMap | Хэш имени предмета <br /> См. [локализация](#локализация) |
- | setNameTextHashMap `[Только артефакт]`| Хэш для названия сета артефактов <br /> См. [локализация](#локализация)|
- | rankLevel | Уровень редкости снаряжения |
- | [reliquaryMainstat](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только артефакт]` | Основной стат артефакта |
- | [reliquarySubstats](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только артефакт]` | Список подстатов артефакта |
- | [weaponStats](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только оружие]`| Список статов оружия: Базовая слиа атаки, подстат |
- | [itemType](#itemtype) | Тип снаряжения: оружие или артефакт |
- | icon | Название иконки снаряжения <br /> [Использование названий иконок](#иконки-и-изображения)|
- | [equipType](#equiptype) `[Только артефакт]` | Тип артефакта |
-
- #### reliquaryMainstat, reliquarySubstats, weaponStats
-
- | Название | Описание |
- | :--- | :---------- |
- | mainPropId / appendPropID | ID статы снаряжения. Смотрите [определения имён](#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 | Бонус Дендро урона |
-
- ## Иконки и изображения
-
- Иконки персонажей, оружия и артефактов можно взять с моего CDN, по 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)
-
- Python - https://github.com/seriaati/enka-py - [seriaati](https://github.com/seriaati)
-
- Java - https://github.com/kazuryyx/EnkaNetworkAPI - [kazury](https://github.com/kazuryyx)
|