Вы можете использовать API напрямую, либо использовать библиотеки-врапперы, написанные другими. API довольно несложное, основная работа заключается в поиске нужных вещей в датамайне из игры на основе данных, которые возвращает API - в этом основной функционал такой библиотеки.
В разделе библиотеки-врапперы вы можете найти библиотеку на подходящем языке программирования.
Несколько правил использования API:
-
Пожалуйста, не пытайтесь перебирать UID или выполнять массовые запросы (чтобы разом заполнить свою базу данных, например). В игре сотни миллионов UID, через мой API это просто не представляется вомзожным. Возможно, позднее я сделаю выгрузку, которую можно будет скачать целиком.
-
Поставьте
User-Agent
хедер на ваши запросы, чтобы я мог их видеть - для того чтобы я если что смог помочь или подсказать что-то. -
На запрос данных по UID есть динамические рейтлимиты — если вы делаете слишком много запросов, время отклика будет расти. В конце концов вы уткнетесь в HTTP-код 429. В этом случае нужно принять меры, чтобы уменьшить их количество. Можете связаться со мной, чтобы узнать, возможно ли увеличить рейтлимиты для вашего конкретного случая, но в большинстве случаев это не нужно и просто является результатом неоптимизированного кода.
-
Запросы на UID возвращают поле
ttl
- это поле означает "сколько осталось секунд до очередного запроса в игру". Покаttl
не истечет, эндпоинт будет возвращать кешированные данные - но в рейтлимит такой запрос всё равно будет считаться. Рекоменндую кэшировать данные и использоватьttl
для того, чтобы UID нельзя было запросить снова (пока оно не истечет). Для этого рекомендую использовать Redis.
Если есть вопросы по API или распарсиванию данных, можете задать вопрос на Discord-сервере.
Ответ будет содержать playerInfo
и avatarInfoList
. playerInfo
содержит основные данные об игровом аккаунте. Если avatarInfoList
отсутствует, это значит, что витрина этой учетной записи либо скрыта игроком, либо там нет персонажей.
Подставив ?info
к запросу, Вы получите только playerInfo
. Основной эндпоинт всегда дополнительно делает запрос для получения avatarInfoList
; если Вам нужен только playerInfo
, используйте ?info
- он работает быстрее и на нём меньше рейтлимиты.
Кроме того, оба ответа будут содержать объект «владелец» (owner
), если:
- У пользователя есть аккаунт на сайте;
- Пользователь добавил свой UID в профиль;
- Пользователь верицифировал, что UID принадлежит ему;
- Пользователь установил его видимость на «публичный».
Подробнее об учетных записях пользователей ниже.
Убедитесь, что Вы правильно обрабатываете их в своем приложении.
400 = Неверный формат UID
404 = Игрок не существует (так сказали сервера михоёв, не стоит на это 100% полагаться)
424 = Обслуживание серверов / все сломалось после обновления
429 = Ограничена скорость (либо моим сервером, либо сервером михоёв)
500 = Общая ошибка сервера (что-то не так в данных?)
503 = Всё умерло насмерть
На сайте можно создать аккаунт (профиль) и привязать к нему несколько игровых аккаунтов. Затем, с помощью кода подтверждения, засунутого в подпись, пользователи могут подтвердить, что это их аккаунт — таким образом сайт можем гарантировать, что игровой аккаунт принадлежит данному человеку.
Пользователи могут сохранять снапшоты сборок под произвольными именами, я их называю «сохраненные сборки».
Получает информацию о пользователе
Получает список «hoyos» — учетные записи в Геншине и метаданные о них. Эндпоинт вернет только те учетные записи, которые являются и verified
, и public
(пользователи могут скрывать учетные записи; неподтвержденные учетные записи скрыты по умолчанию). Каждый ключ в ответе является уникальным идентификатором для hoyo
- его затем можно использовать для последующих запросов, чтобы получить информацию о персонажах/сборках этого игрового аккаунта.
Возвращает метаданные для одного hoyo (игрового аккаунта).
https://enka.network/api/profile/Algoinde/hoyos/4Wjv2e/builds/
Возвращает сохраненные сборки для данного hoyo. Это объект массивов, где ключом является avatarId
персонажа, а объекты в массивах — разные сборки для данного персонажа в произвольном порядке (однако, у них есть поле order
, по которому можно их упорядочить для отображения).
Если в сборке есть поле live: true
, это значит, что это не «сохраненная» сборка, а та, что была получена из витрины, когда была нажата кнопка «обновить». При обновлении все старые live
сборки удаляются и создаются новые. Только пользователь решает, когда выполнять это обновление — эти данные НЕ будут актуальными.
Как указано в разделе UID-эндпоинты, при запросе UID в ответе может быть объект owner
. Используя поля в этом объекте, можно сконструировать API-ссылку на профиль:
https://enka.network/api/profile/{owner.username}/hoyos/{owner.hash}/builds/
Название | Описание |
---|---|
playerInfo | Информация профиля |
avatarInfoList | Список подробной информации по каждому персонажу из витрины |
Базовые данные персонажей по ID можно получить из store/characters.json.
Для дополнительной информации можно обратиться к данным персонажей.
Название | Описание |
---|---|
nickname | Никнейм игрока |
signature | Подпись ппрофиля |
worldLevel | Уровень мира игрока |
namecardId | ID именной карточки профиля |
finishAchievementNum | Количество полученных достижений |
towerFloorIndex | Этаж бездны |
towerLevelIndex | Комната бездны |
showAvatarInfoList | Список ID персонажей и уровней |
showNameCardIdList | Список ID именных карточек |
profilePicture.avatarId | ID персонажа на аватарке |
Название | Описание |
---|---|
avatarId | ID персонажа |
level | Уровень персонажа |
costumeId | ID скина персонажа. Смотрите "costumes" в store/characters.json |
Базовые данные персонажей по ID можно получить из store/characters.json.
Для дополнительной информации можно обратиться к данным персонажей.
Название | Описание |
---|---|
avatarID | ID персонажа |
talentIdList | Список ID созвездий Нет данных, если 0 созвездий |
propMap | Список свойств информации о персонаже |
fightPropMap -> {id: value} |
Map боевых свойств персонажа. Смотрите определения для ID |
skillDepotId | ID набора навыков персонажа Данные умений -> "id" |
inherentProudSkillList | Список разблокированных ID навыков Данные умений -> "inherentProudSkillOpens" |
skillLevelMap -> {skill_id: level} |
Map уровней навыков Данные умений -> "inherentProudSkillOpens" |
equipList | Список снаряжения: Оружие, Артефакты |
fetterInfo.expLevel | Уровень дружбы персонажа |
Название | Описание |
---|---|
type | ID статы, см. определения для ID статов |
ival | На это можно забить |
val | Значение этой статы |
Название | Описание |
---|---|
itemId | ID оружия Данные артефактов -> "id" Данные оружия -> "id" |
weapon [Только оружие] |
Базовая информация об оружии |
reliquary [Только артефакт] |
Базовая информация об артефакте |
flat | Дополнительная распарсенная информация |
Для получения дополнительной информации об оружии можно обратиться к данным оружий
Название | Описание |
---|---|
level | Уровень оружия |
promoteLevel | Уровень возвышения оружия |
affixMap | Уровень пробуждения оружия [0-4] |
Для получения дополнительной информации об артефактах можно обратиться к данным артефактов
Название | Описание |
---|---|
level | Уровень артефакта [1-21] |
mainPropId | ID основного стата артефакта Данные основных статов |
appendPropIdList | Список ID подстатов артефакта Данные подстатов |
Название | Описание |
---|---|
nameTextHashMap | Хэш имени предмета См. локализация |
setNameTextHashMap [Только артефакт] |
Хэш для названия сета артефактов См. локализация |
rankLevel | Уровень редкости снаряжения |
reliquaryMainstat [Только артефакт] |
Основной стат артефакта |
reliquarySubstats [Только артефакт] |
Список подстатов артефакта |
weaponStats [Только оружие] |
Список статов оружия: Базовая слиа атаки, подстат |
itemType | Тип снаряжения: оружие или артефакт |
icon | Название иконки снаряжения Использование названий иконок |
equipType [Только артефакт] |
Тип артефакта |
Название | Описание |
---|---|
mainPropId / appendPropID | ID статы снаряжения. Смотрите определения имён |
propValue | Значение статы |
Тип | Описание |
---|---|
1001 | Опыт |
1002 | Возвышение |
4001 | Уровень |
Тип | Описание |
---|---|
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 | Базовый крит. урон элементальной реакции |
Название | Описание |
---|---|
ITEM_WEAPON | Оружие |
ITEM_RELIQUARY | Артефакт |
Название | Описание |
---|---|
EQUIP_BRACER | Цветок жизни |
EQUIP_NECKLACE | Перо смерти |
EQUIP_SHOES | Пески времени |
EQUIP_RING | Кубок пространства |
EQUIP_DRESS | Корона разума |
Название | Описание |
---|---|
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 есть icon
.
В store/characters.json - строки, которые «UI_XXXXXX» или «Skill_XXXXXX» - находятся по ID персонажа.
"NameTextMapHash"
в store/characters.json, "nameTextHashMap"
и "setNameTextHashMap"
в flat используется в качестве ключа для получения локализованных названий предметов из store/loc.json.
Также можно взять локализацию для AppendProp используя имя свойства в качестве ключа - "FIGHT_PROP_HP"
, "FIGHT_PROP_HEAL_ADD"
и так далее.
Дополнительные локализованные строки можно взять из TextMap Data (включает только языки, поддерживаемые игрой).
TS/JS - https://www.npmjs.com/package/enkanetwork.js - Jelosus1
TS/JS - https://github.com/yuko1101/enka-network-api - yuko1101
Rust - https://github.com/eratou/enkanetwork-rs - eratou
Python - https://github.com/mrwan200/enkanetwork.py - mrwan200
Python - https://github.com/seriaati/enka-py - seriaati