[DotA 2] Web API Пора поставить точку

Почти два месяца активной работы (отсчет от 2 февраля — тогда был создан репозиторий на GitHub‘e) и хочется подвести какой-то итог.

За это время удалось создать вполне работоспособный проект, который может быть использован как отдельной командой для вывода и анализа стастики своих игр, так и небольшими лигами и чемпионатами (особенно, если это «официальный» чемпионат со своим league_id).

Доступный функционал

  • Загрузить данные о матче (матчах) и сохранить их в локальную БД:

    • Общие данные, такие как время начало матча, продолжительность матча, мод, регион и т.д.
    • Данные про пики и баны (если CM).
    • Если в игре был Lone Druid, то можно вытащить и шмотки его медведя.
    • Данные о прокачке героя (какую способность, на какой минуте и на каком уровне качал).
  • Загрузить данные об игроке:
    • Настоящее имя, ссылку на Steam-профайл, ссылку на аватарку и т.д.
  • Список текущих лиг.
  • Список игр, которые сейчас играются в определенной лиге.
  • Данные про команду:
    • Название, рейтинг, страну и т.д.
  • Список героев, доступных сейчас в DotA2.

Да, все это не требует больших усилий со стороны пользователя. Основное, что надо будет сделать пользователю, это решить, что и в каком виде вывести на страницу.

Немного о разработке

Этот проект был первый, который я делал используя GitHub. И обнаружил довольно много плюсов (как не странно):

  • Сама по себе система контроля версий — уже плюс.
  • Удобный bug-tracker.
  • Связывание коммита и номера issue, если в комментарии к коммиту есть номер issue.
  • ReadMe, которое выводится на главной страницы репозитория (в него вынес все, что надо знать пользователю для начала работы).
  • Ну и формат ReadMe (markdown) — полезно знать и уметь его использовать.
  • Wiki, где выложил парочку «не базовых» примеров использования.

Почему-то про bug-tracker на GitHub’e я подумал только через месяц с начала разработки и когда подзадач осталось уже не так много. До этого держал @todo файл со списком задач.

В качестве IDE начал использовать PHP Storm. Настроил в нем Git и коммиты с апдейтами стали делом нажатия пары кнопок.

Стоит отдельно сказать про ReadMe, демо-страницу и Wiki. Пока я писал код, мне они были не нужны. Делал исключительно для «что б было». Ведь примеры из Readme есть в соответствующих файлах с объявлениями классов мапперов/моделей и т.д. О пользе таких страниц я подумал только тогда, когда появились еще несколько проектов, связанных с API (см. http://dev.dota2.com/forumdisplay.php?f=411), но без (или с малым количеством) документации. Я понимал, что их код и мой код делает одинаковые (ну или почти одинаковые) задачи. Но вот сидеть и разбирать его не было никакого желания. А точнее, было просто лень 🙂 Проекты, где были примеры и демо, я рассматривал больше и сравнивал со своим куда подробнее. Находил сильные и слабые стороны. Анализировал, что же можно улучшить у себя. Так что надо взять себе на заметку, что без простой точки входа (readme, демо, полноценной документации и т.д.) тяжело привлечь пользователя.

Что осталось за бортом

Я умышленно не реализовал в своем проекте два запроса — EconomySchema и GetMatchHistoryBySequenceNum. Считаю, что простым пользователям они без надобности. Ну невозможно сыграть два матча, которые будут идти подряд в GetMatchHistoryBySequenceNum, а список доступных «побрякушек» (EconomySchema) не имеет никакого отношения к качеству игры.

Эпилог

Во время всего процесса разработки было очень приятно читать отзывы от других пользователей, а так же видеть «форки» и «стары» на GitHub‘e.

Считаю, что в этом проекте уже можно поставить точку. Базовый функционал, который я хотел реализовать, уже есть. Расширять можно до бесконечности, но нет надобности, ведь у каждого свои потребности и «хотелки».

, , ,

23 комментария
  1. dota player сказал(а):

    сделай такую же демку только если загружать данные с бд

  2. KronuS сказал(а):

    В ReadMe есть пример получения данных из БД, а форматирование вывода будет идентичное тому, что в демке.

  3. Денис сказал(а):

    Подскажи, пожалуйста, есть ли сейчас возможность через API Dota2 узнать время покупки Items (предметов)? На сколько я понял,последовательность и время изучения скиллов уже можно посмотреть.

    И еще про предметы, их же можно продавать, вопрос как это отражается в статистике?

  4. KronuS сказал(а):

    Денис, по поводу времени покупки шмоток — насколько мне известно, то еще нельзя (из риплея достать эти данные можно — 100%).
    А на счет продажи предметов — не проводил замеры и, увы, подсказать не смогу.

  5. Денис сказал(а):

    Ок, спасибо большое!

  6. Рустам сказал(а):

    Уважаемый KronuS, напишите мне на почту.
    Есть очень интересное предложение по работе над перспективным проектом.
    Не бесплатно разумеется. Надеюсь на взаимовыгодное сотрудничество.

  7. Timon сказал(а):

    А есть более подробный мануал по установке ? так как файл ридми в архиве мне не до конца помог. А вообще суть вопроса — Можно ли сделать статистику локального сервера дота 2 ?

  8. KronuS сказал(а):

    Timon, подробного мануала нет, так как все, что надо сделать для работы с кодом API — это прописать в config.php правильные параметры для подключения к mysql БД и сделать require_once(‘config.php’).

    Если данные об матчах отправляются к «основным» серверам Д2, то можно. Достаточно просто знать match_id матчей, сыгранных на Вашем сервере.

  9. Pobeg сказал(а):

    Пожскажите пожалуйста, как достать количество побед игрока?

  10. KronuS сказал(а):

    Используя Dota2-API, выгружаем все игры игрока.
    Далее смотрим, что бы player_slot < = 5 и radiant_win = 1 или же player_slot >= 127, а radiant_win = 0.
    Так и получится список матчей, где игрок выиграл.

  11. Pobeg сказал(а):

    Блин, не получается, можете помочь? Я заплачу. Отправьте контакты на почту.

  12. KronuS сказал(а):

    Что именно не получается?
    На каком этапе заминка?

  13. Ruslan сказал(а):

    Добрый день KronuS, спасибо большое за сей скрипт. Но у меня почему то банальные проблемы с записью в БД, подключил все как положено с гитхаба, пишу
    load();
    $saver = new match_mapper_db();
    $saver->save($match);

    но инфа в бд не попадает, стопицот ошибок. ТИпо внешние ключи итд. ДЕлал как по мануалу, убирал ключь для лиг в поле матчи все равно не канает, помогите пожалуйста..

  14. Легендарный сказал(а):

    «(из риплея достать эти данные можно — 100%)»(с)KronuS
    а каким образом это сделать, я хочу вытащить график разницы опыта и денег в минуту

  15. KronuS сказал(а):

    Ruslan, в Readme уже добавил описание, что надо сделать, чтоб таких ошибок не было.
    Легендарный, не занимался парсингом риплеев. Могу только показать в сторону — http://www.skadistats.com/.

  16. Сергей сказал(а):

    А возможно ли вытянуть какую нибудь инфу о сыгранной игре в лобби?

  17. KronuS сказал(а):

    Если лобби локальное — то нет.
    В других случаях — запрос GetMatchDetails поможет.

  18. Скоромный сказал(а):

    Привет, KronuS.
    Как узнать, какой у матча был «skill level»? В dotabuff отображается как ‘normal’, ‘high’ и ‘very high skill’

  19. KronuS сказал(а):

    skill может быть использован как фильтр в запросе на GetMatchHistory (см. http://dev.dota2.com/showthread.php?t=58317). Возможно, dotabuff фильтруют по нему. В ответе на запрос к GetMatchHistory значение skill не фигурирует. А использовав skill как фильтр, они изначально сами знают его значение и добавляют его в своей БД к полученным матчам.

  20. Скоромный сказал(а):

    Да.
    Но в «GetMatchHistory» параметры account_id и skill вместе нельзя задавать (фильтр skill игнорируется). Параметр skill можно задавать только без других параметров. И запрос выдаёт максимум 500 результатов, что в корне не даёт возможности узнать скилл игры у старых матчей =(

  21. KronuS сказал(а):

    Попробуй на dev.dota2.com (раздел WebAPI) создать тему с таким вопросом — возможно кто-то сталкивался. Я уже помочь не могу — никак не использовал параметр skill в своей работе с АПИ.

  22. Василий сказал(а):

    KronuS,Здравствуйте.Я только начал изучать это все фот ваши файлы на гитхабе скачал их и не знаю что с ними делать.Нет файла индекс.пхп(или он не нужен?).Если не сложно дайте какие то контакты где с вами можно пообщаться если не трудно)

  23. KronuS сказал(а):

    Вопросы задавайте тут — https://github.com/kronusme/dota2-api/issues

Оставить комментарий

Top ↑ | Main page | Back