You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

api_ru.md 27 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. # Enka.Network - API
  2. ## Содержание
  3. - [Начало работы](#начало-работы)
  4. - [Структура данных](#структура-данных)
  5. - [Определения](#определения)
  6. - [Иконки и изображения](#иконки-и-изображения)
  7. - [Локализация](#локализация)
  8. ## Начало работы
  9. Вы можете использовать API напрямую, либо использовать библиотеки-врапперы, написанные другими. API довольно несложное, основная работа заключается в поиске нужных вещей в датамайне из игры на основе данных, которые возвращает API - в этом основной функционал такой библиотеки.
  10. В разделе [библиотеки-врапперы](#библиотеки-врапперы) вы можете найти библиотеку на подходящем языке программирования.
  11. ## То, чего следует придерживаться при запросах
  12. Несколько правил использования API:
  13. 1. Пожалуйста, не пытайтесь перебирать UID или выполнять массовые запросы (чтобы разом заполнить свою базу данных, например). В игре сотни миллионов UID, через мой API это просто не представляется вомзожным. Возможно, позднее я сделаю выгрузку, которую можно будет скачать целиком.
  14. 2. Поставьте `User-Agent` хедер на ваши запросы, чтобы я мог их видеть - для того чтобы я если что смог помочь или подсказать что-то.
  15. 3. На запрос данных по UID есть динамические рейтлимиты — если вы делаете слишком много запросов, время отклика будет расти. В конце концов вы уткнетесь в HTTP-код 429. В этом случае нужно принять меры, чтобы уменьшить их количество. Можете связаться со мной, чтобы узнать, возможно ли увеличить рейтлимиты для вашего конкретного случая, но в большинстве случаев это не нужно и просто является результатом неоптимизированного кода.
  16. 4. Запросы на UID возвращают поле `ttl` - это поле означает "сколько осталось секунд до очередного запроса в игру". Пока `ttl` не истечет, эндпоинт будет возвращать кешированные данные - но в рейтлимит такой запрос всё равно будет считаться. Рекоменндую кэшировать данные и использовать `ttl` для того, чтобы UID нельзя было запросить снова (пока оно не истечет). Для этого рекомендую использовать Redis.
  17. Если есть вопросы по API или распарсиванию данных, можете задать вопрос на [Discord-сервере](https://discord.gg/PcSZr5sbn3).
  18. ## API
  19. ### UID-эндпоинты
  20. #### Получение данных с витрины с полной информацией об игроке
  21. > https://enka.network/api/uid/618285856/
  22. Ответ будет содержать `playerInfo` и `avatarInfoList`. `playerInfo` содержит основные данные об игровом аккаунте. Если `avatarInfoList` отсутствует, это значит, что витрина этой учетной записи либо скрыта игроком, либо там нет персонажей.
  23. #### Получение только информации об игроке
  24. > https://enka.network/api/uid/618285856/?info
  25. Подставив `?info` к запросу, Вы получите только `playerInfo`. Основной эндпоинт всегда дополнительно делает запрос для получения `avatarInfoList`; если Вам нужен только `playerInfo`, используйте `?info` - он работает быстрее и на нём меньше рейтлимиты.
  26. Кроме того, оба ответа будут содержать объект «владелец» (`owner`), если:
  27. 1. У пользователя есть аккаунт на сайте;
  28. 2. Пользователь добавил свой UID в профиль;
  29. 3. Пользователь верицифировал, что UID принадлежит ему;
  30. 4. Пользователь установил его видимость на «публичный».
  31. Подробнее об учетных записях пользователей ниже.
  32. #### Коды ответов HTTP
  33. Убедитесь, что Вы правильно обрабатываете их в своем приложении.
  34. ```
  35. 400 = Неверный формат UID
  36. 404 = Игрок не существует (так сказали сервера михоёв, не стоит на это 100% полагаться)
  37. 424 = Обслуживание серверов / все сломалось после обновления
  38. 429 = Ограничена скорость (либо моим сервером, либо сервером михоёв)
  39. 500 = Общая ошибка сервера (что-то не так в данных?)
  40. 503 = Всё умерло насмерть
  41. ```
  42. ### Эндпоинты профиля
  43. На сайте можно создать аккаунт (профиль) и привязать к нему несколько игровых аккаунтов. Затем, с помощью кода подтверждения, засунутого в подпись, пользователи могут подтвердить, что это их аккаунт — таким образом сайт можем гарантировать, что игровой аккаунт принадлежит данному человеку.
  44. Пользователи могут сохранять снапшоты сборок под произвольными именами, я их называю «сохраненные сборки».
  45. > https://enka.network/api/profile/Algoinde/
  46. Получает информацию о пользователе
  47. > https://enka.network/api/profile/Algoinde/hoyos/
  48. Получает список «hoyos» — учетные записи в Геншине и метаданные о них. Эндпоинт вернет только те учетные записи, которые являются и `verified`, и `public` (пользователи могут скрывать учетные записи; неподтвержденные учетные записи скрыты по умолчанию). Каждый ключ в ответе является уникальным идентификатором для `hoyo` - его затем можно использовать для последующих запросов, чтобы получить информацию о персонажах/сборках этого игрового аккаунта.
  49. > https://enka.network/api/profile/Algoinde/hoyos/4Wjv2e/
  50. Возвращает метаданные для одного hoyo (игрового аккаунта).
  51. > https://enka.network/api/profile/Algoinde/hoyos/4Wjv2e/builds/
  52. Возвращает сохраненные сборки для данного hoyo. Это объект массивов, где ключом является `avatarId` персонажа, а объекты в массивах — разные сборки для данного персонажа в произвольном порядке (однако, у них есть поле `order`, по которому можно их упорядочить для отображения).
  53. Если в сборке есть поле `live: true`, это значит, что это не «сохраненная» сборка, а та, что была получена из витрины, когда была нажата кнопка «обновить». При обновлении все старые `live` сборки удаляются и создаются новые. Только пользователь решает, когда выполнять это обновление — эти данные НЕ будут актуальными.
  54. Как указано в разделе [UID-эндпоинты](#uid-эндпоинты), при запросе UID в ответе может быть объект `owner`. Используя поля в этом объекте, можно сконструировать API-ссылку на профиль:
  55. `https://enka.network/api/profile/{owner.username}/hoyos/{owner.hash}/builds/`
  56. ## Структура данных
  57. | Название | Описание |
  58. | :--- | :---------- |
  59. | [playerInfo](#playerinfo) | Информация профиля |
  60. | [avatarInfoList](#avatarinfolist) | Список подробной информации по каждому персонажу из витрины |
  61. ### playerInfo
  62. Базовые данные персонажей по ID можно получить из [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json). <br />
  63. Для дополнительной информации можно обратиться к [данным персонажей](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarExcelConfigData.json).
  64. | Название | Описание |
  65. | :--- | :--------- |
  66. | nickname | Никнейм игрока |
  67. | signature | Подпись ппрофиля |
  68. | worldLevel | Уровень мира игрока |
  69. | namecardId | ID именной карточки профиля |
  70. | finishAchievementNum | Количество полученных достижений |
  71. | towerFloorIndex | Этаж бездны |
  72. | towerLevelIndex | Комната бездны |
  73. | [showAvatarInfoList](#showavatarinfolist) | Список ID персонажей и уровней |
  74. | showNameCardIdList | Список ID именных карточек |
  75. | profilePicture.avatarId | ID персонажа на аватарке |
  76. #### showAvatarInfoList
  77. | Название | Описание |
  78. | :--- | :--------- |
  79. | avatarId | ID персонажа |
  80. | level | Уровень персонажа |
  81. | costumeId | ID скина персонажа. Смотрите `"costumes"` в [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json) |
  82. ### avatarInfoList
  83. Базовые данные персонажей по ID можно получить из [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json). <br />
  84. Для дополнительной информации можно обратиться к [данным персонажей](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarExcelConfigData.json).
  85. | Название | Описание |
  86. | :--- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  87. | avatarID | ID персонажа |
  88. | talentIdList | Список ID созвездий <br /> Нет данных, если 0 созвездий |
  89. | [propMap](#propmap) | Список свойств информации о персонаже |
  90. | fightPropMap -> `{id: value}` | `Map` боевых свойств персонажа. <br />Смотрите [определения для ID](#fightprop) |
  91. | skillDepotId | ID набора навыков персонажа <br />[Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"id"` |
  92. | inherentProudSkillList | Список разблокированных ID навыков <br />[Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"inherentProudSkillOpens"` |
  93. | skillLevelMap -> `{skill_id: level}`| `Map` уровней навыков <br /> [Данные умений](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/AvatarSkillDepotExcelConfigData.json) -> `"inherentProudSkillOpens"` |
  94. | [equipList](#equiplist) | Список снаряжения: Оружие, Артефакты |
  95. | fetterInfo.expLevel | Уровень дружбы персонажа |
  96. #### propMap
  97. | Название | Описание |
  98. | :--- | :--------- |
  99. | type | ID статы, см. [определения для ID статов](#prop) |
  100. | ival | На это можно забить |
  101. | val | Значение этой статы |
  102. #### equipList
  103. | Название | Описание |
  104. | :--- | :--------- |
  105. | 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"` |
  106. | [weapon](#weapon) `[Только оружие]` | Базовая информация об оружии |
  107. | [reliquary](#reliquary) `[Только артефакт]` | Базовая информация об артефакте |
  108. | [flat](#flat) | Дополнительная распарсенная информация |
  109. #### weapon
  110. Для получения дополнительной информации об оружии можно обратиться к [данным оружий](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/WeaponExcelConfigData.json)
  111. | Название | Описание |
  112. | :--- | :---------- |
  113. | level | Уровень оружия |
  114. | promoteLevel | Уровень возвышения оружия |
  115. | affixMap | Уровень пробуждения оружия `[0-4]` |
  116. #### reliquary
  117. Для получения дополнительной информации об артефактах можно обратиться к [данным артефактов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryExcelConfigData.json)
  118. | Название | Описание |
  119. | :--- | :---------- |
  120. | level | Уровень артефакта `[1-21]` |
  121. | mainPropId | ID основного стата артефакта <br /> [Данные основных статов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryMainPropExcelConfigData.json) |
  122. | appendPropIdList | Список ID подстатов артефакта <br /> [Данные подстатов](https://gitlab.com/Dimbreath/AnimeGameData/-/blob/master/ExcelBinOutput/ReliquaryAffixExcelConfigData.json) |
  123. #### flat
  124. | Название | Описание |
  125. | :--- | :---------- |
  126. | nameTextHashMap | Хэш имени предмета <br /> См. [локализация](#локализация) |
  127. | setNameTextHashMap `[Только артефакт]`| Хэш для названия сета артефактов <br /> См. [локализация](#локализация)|
  128. | rankLevel | Уровень редкости снаряжения |
  129. | [reliquaryMainstat](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только артефакт]` | Основной стат артефакта |
  130. | [reliquarySubstats](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только артефакт]` | Список подстатов артефакта |
  131. | [weaponStats](#reliquarymainstat-reliquarysubstats-weaponstats) `[Только оружие]`| Список статов оружия: Базовая слиа атаки, подстат |
  132. | [itemType](#itemtype) | Тип снаряжения: оружие или артефакт |
  133. | icon | Название иконки снаряжения <br /> [Использование названий иконок](#иконки-и-изображения)|
  134. | [equipType](#equiptype) `[Только артефакт]` | Тип артефакта |
  135. #### reliquaryMainstat, reliquarySubstats, weaponStats
  136. | Название | Описание |
  137. | :--- | :---------- |
  138. | mainPropId / appendPropID | ID статы снаряжения. Смотрите [определения имён](#appendprop)|
  139. | propValue | Значение статы |
  140. ## Определения
  141. ### Prop
  142. | Тип | Описание |
  143. | :--: | :---------- |
  144. | 1001 | Опыт |
  145. | 1002 | Возвышение |
  146. | 4001 | Уровень |
  147. ### FightProp
  148. | Тип | Описание |
  149. | :--: | :---------- |
  150. | 1 | Базовое HP |
  151. | 2 | HP |
  152. | 3 | HP% |
  153. | 4 | Базовая сила атаки |
  154. | 5 | Сила атаки |
  155. | 6 | Сила атаки % |
  156. | 7 | Базовая защита |
  157. | 8 | Защита |
  158. | 9 | Защита % |
  159. | 10 | Базовая скорость атаки |
  160. | 11 | Скорость атаки % |
  161. | 20 | Шанс крит. попадания |
  162. | 22 | Крит. урон |
  163. | 23 | Восст. энергии |
  164. | 26 | Бонус лечения |
  165. | 27 | Бонус получаемого лечения |
  166. | 28 | Мастерство стихий |
  167. | 29 | Физ. сопротиление |
  168. | 30 | Бонус физ. урона |
  169. | 40 | Бонус Пиро урона |
  170. | 41 | Бонус Электро урона |
  171. | 42 | Бонус Гидро урона |
  172. | 43 | Бонус Дендро урона |
  173. | 44 | Бонус Анемо урона |
  174. | 45 | Бонус Гео урона |
  175. | 46 | Бонус Крио урона |
  176. | 50 | Пиро сопротивление |
  177. | 51 | Электро сопротивление |
  178. | 52 | Гидро сопротивление |
  179. | 53 | Дендро сопротивление |
  180. | 54 | Анемо сопротивление |
  181. | 55 | Гео сопротивление |
  182. | 56 | Крио сопротивление |
  183. | 70 | Потребление Пиро энергии |
  184. | 71 | Потребление Электро энергии |
  185. | 72 | Потребление Гидро энергии |
  186. | 73 | Потребление Дендро энергии |
  187. | 74 | Потребление Анемо энергии |
  188. | 75 | Потребление Крио энергии |
  189. | 76 | Потребление Гео энергии |
  190. | 80 | Снижение времени отката |
  191. | 81 | Прочность щита |
  192. | 1000 | Текущая Пиро энергия |
  193. | 1001 | Текущая Электро энергия |
  194. | 1002 | Текущая Гидро энергия |
  195. | 1003 | Текущая Дендро энергия |
  196. | 1004 | Текущая Анемо энергия |
  197. | 1005 | Текущая Крио энергия |
  198. | 1006 | Текущая Гео энергия |
  199. | 1010 | Текущее HP |
  200. | 2000 | Максимальное HP |
  201. | 2001 | Сила атаки |
  202. | 2002 | Защита |
  203. | 2003 | Скорость атаки |
  204. | 3025 | Крит. шанс элементальной реакции |
  205. | 3026 | Крит. урон элементальной реакции |
  206. | 3027 | Крит. шанс элементальной реакции (Перегрузка) |
  207. | 3028 | Крит. урон элементальной реакции (Перегрузка) |
  208. | 3029 | Крит. шанс элементальной реакции (Рассеивание) |
  209. | 3030 | Крит. урон элементальной реакции (Рассеивание) |
  210. | 3031 | Крит. шанс элементальной реакции (Заряжен) |
  211. | 3032 | Крит. урон элементальной реакции (Заряжен) |
  212. | 3033 | Крит. шанс элементальной реакции (Сверхпроводник) |
  213. | 3034 | Крит. урон элементальной реакции (Сверхпроводник) |
  214. | 3035 | Крит. шанс элементальной реакции (Горение) |
  215. | 3036 | Крит. урон элементальной реакции (Горение) |
  216. | 3037 | Крит. шанс элементальной реакции (Заморозка (Разбит)) |
  217. | 3038 | Крит. урон элементальной реакции (Заморозка (Разбит)) |
  218. | 3039 | Крит. шанс элементальной реакции (Бутонизация) |
  219. | 3040 | Крит. урон элементальной реакции (Бутонизация) |
  220. | 3041 | Крит. шанс элементальной реакции (Цве­тение) |
  221. | 3042 | Крит. урон элементальной реакции (Цве­тение) |
  222. | 3043 | Крит. шанс элементальной реакции (Веге­тация) |
  223. | 3044 | Крит. урон элементальной реакции (Веге­тация) |
  224. | 3045 | Базовый крит. шанс элементальной реакции |
  225. | 3046 | Базовый крит. урон элементальной реакции |
  226. ### ItemType
  227. | Название | Описание |
  228. | :--- | :---------- |
  229. | ITEM_WEAPON | Оружие |
  230. | ITEM_RELIQUARY | Артефакт |
  231. ### EquipType
  232. | Название | Описание |
  233. | :--- | :---------- |
  234. | EQUIP_BRACER | Цветок жизни |
  235. | EQUIP_NECKLACE | Перо смерти |
  236. | EQUIP_SHOES | Пески времени |
  237. | EQUIP_RING | Кубок пространства |
  238. | EQUIP_DRESS | Корона разума |
  239. ### AppendProp
  240. | Название | Описание |
  241. | :--- | :---------- |
  242. | FIGHT_PROP_BASE_ATTACK `[Оружие]` | Базовая сила атаки |
  243. | FIGHT_PROP_HP | Целочисленное HP |
  244. | FIGHT_PROP_ATTACK | Целочисленная сила атаки |
  245. | FIGHT_PROP_DEFENSE | Целочисленная защита |
  246. | FIGHT_PROP_HP_PERCENT | HP% |
  247. | FIGHT_PROP_ATTACK_PERCENT | Сила атаки % |
  248. | FIGHT_PROP_DEFENSE_PERCENT | Защита % |
  249. | FIGHT_PROP_CRITICAL | Шанс крит. попадания |
  250. | FIGHT_PROP_CRITICAL_HURT | Крит. урон |
  251. | FIGHT_PROP_CHARGE_EFFICIENCY | Восст. энергии |
  252. | FIGHT_PROP_HEAL_ADD | Бонус лечения |
  253. | FIGHT_PROP_ELEMENT_MASTERY | Мастерсто стихий |
  254. | FIGHT_PROP_PHYSICAL_ADD_HURT | Бонус физ. урона |
  255. | FIGHT_PROP_FIRE_ADD_HURT | Бонус Пиро урона |
  256. | FIGHT_PROP_ELEC_ADD_HURT | Бонус Электро урона |
  257. | FIGHT_PROP_WATER_ADD_HURT | Бонус Гидро урона |
  258. | FIGHT_PROP_WIND_ADD_HURT | Бонус Анемо урона |
  259. | FIGHT_PROP_ICE_ADD_HURT | Бонус Крио урона |
  260. | FIGHT_PROP_ROCK_ADD_HURT | Бонус Гео урона |
  261. | FIGHT_PROP_GRASS_ADD_HURT | Бонус Дендро урона |
  262. ## Иконки и изображения
  263. Иконки персонажей, оружия и артефактов можно взять с моего CDN, по URL `https://enka.network/ui/[icon_name].png`.
  264. Обычно название иконки начинается с `"UI_"` или `"Skill_"` для [талантов персонажей](#персонажи-таланты-и-созвездия).
  265. Например, https://enka.network/ui/UI_AvatarIcon_Side_Ambor.png.
  266. ### Оружия и артефакты
  267. Внутри объектов [flat](#flat) есть `icon`.
  268. ### Персонажи, таланты и созвездия
  269. В [store/characters.json](https://github.com/EnkaNetwork/API-docs/blob/master/store/characters.json) - строки, которые «UI_XXXXXX» или «Skill_XXXXXX» - находятся по ID персонажа.
  270. ## Локализация
  271. `"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).
  272. Также можно взять локализацию для [AppendProp](#appendprop) используя имя свойства в качестве ключа - `"FIGHT_PROP_HP"`, `"FIGHT_PROP_HEAL_ADD"` и так далее.
  273. Дополнительные локализованные строки можно взять из [TextMap Data](https://gitlab.com/Dimbreath/AnimeGameData/-/tree/master/TextMap) (включает только языки, поддерживаемые игрой).
  274. ## Библиотеки-врапперы
  275. TS/JS - https://www.npmjs.com/package/enkanetwork.js - [Jelosus1](https://github.com/Jelosus2)
  276. TS/JS - https://github.com/yuko1101/enka-network-api - [yuko1101](https://github.com/yuko1101)
  277. Rust - https://github.com/eratou/enkanetwork-rs - [eratou](https://github.com/eratou)
  278. Python - https://github.com/mrwan200/enkanetwork.py - [mrwan200](https://github.com/mrwan200)
  279. Python - https://github.com/seriaati/enka-py - [seriaati](https://github.com/seriaati)
  280. Java - https://github.com/kazuryyx/EnkaNetworkAPI - [kazury](https://github.com/kazuryyx)