Парсинг на Python данных из игры PoE

40 000 руб. за проект
05 июня 2024, 01:20 • 16 откликов • 177 просмотров
Существует игра в жанре ARPG под названием Path of Exile (коротко - PoE), на подобии Диабло, но в разы интереснее и сложнее.

У нас фанатский сайт с материалами по игре (различные статьи/гайды), в качестве одной из фишек мы используем тултипы (дополнительное описание при наведении) для предметов/способностей и прочего из игры.

Игра обновляется раз в 3-4 месяца, меняются предметы, способности и т.п., а значит нам нужно не только один раз спарсить все необходимое, но и в том числе настроить функционал для обновления базы с учетом изменения исходников.

Изначально мы парсили базу с другого фан сайта по игре - https://poedb.tw/us/ который сам парсит исходники. Все в целом нормально работает, но есть некоторые проблемы, а именно - непредсказуемость разрабов другого фан сайта, непонятно что и когда они поменяют, а это часто попросту ломало весь наш функционал в самый нужный момент и приходилось часто переписывать функционал. Проблемы с доступом к сайту и т.п.

Мы хотим разработать свой функционал для парсинга всех нужных данных из самой игры.

Для этого уже существует готовый инструмент https://github.com/OmegaK2/PyPoE который позволяет парсить предметы/способности и прочее из исходников игры при помощи питона. Хоть либа и давно не обновлялась но она должна работать.

При желании можете использовать любые другие подходящие инструменты, не обязательно эту либу.

По этому софту есть небольшое комьюнити в реддите https://www.reddit.com/r/pathofexiledev/ там можно будет найти ответы на вопросы.

Все нужные нам данные содержатся в файле content.ggpk в директории с игрой.

Вы можете скачать игру с офф сайта (нужно будет зарегистрироваться) и проверить на исходнике работу либы PyPoE. Игра бесплатная, но сам файл весит ~40гб.
Регатся и качать здесь https://www.pathofexile.com/download

План Б - парсить файлы из Steam версии игры.
В стим версии файла content.ggpk нет, все разбито по мелким файлам, а значит придется изучать что где лежит.
Установить можно из стима, игра бесплатная.

Нужно будет парсить объекты следующих типов:

  • Базы предметов
  • Уникальные предметы
  • Карты
  • Игровая валюта
  • Задания
  • Таланты
  • Камни умений (способности)
  • Свойства предметов (обсуждается)

Они будут сохранятся по одинаковому шаблону, единственное что будет отличаться для них - шаблон верстки.

Нужно будет в том числе загружать изображения связанные с объектами.

По итогу после парсинга и использования шаблонов для предметов мы получаем описание предмета как в игре, выглядит примерно так (центральный блок с названием Veiled orb):


Учитывая что файл content.ggpk весит ~40гб, чтобы не загружать его куда-либо, как можем рассматривать вариант со скриптом под винду, которую мы запускаем на пк на котором уже есть игра последней версии, скрипт парсит нужную инфу из файла игры и отсылает все к нам в базу на сайте.

В идеале чтобы это был микросервис который по нашей команде обновлял данные, но это обсуждается.

Что нужно будет реализовать при разработке:

  • Функционал который будет парсить нужный тип предметов (их список выше) и обновлять их по команде в базу postgresql
  • Поддержка двух языков загружаемых объектов: английский и русский (это все есть в базе)
  • В том числе загружать изображения для объектов
  • Какой-то элементарный веб интерфейс для тестирования результатов парсинга (просто чтобы можно было проверить работу функционала, все может быть “кривое” в плане верстки, позже использоваться это не будет)
Необходимые поля для заполнения при парсинге объектов и шаблоны для разных типов объектов я предоставлю. Как и верстку и все необходимое. Также дам доступ к тестовому серверу.

Необходимые скилы:

  • Python / django (либо любой другой удобный для вас стек, главное чтобы был налажен парсинг)
  • postgresql - обязательно
  • адекватное использование git хотя бы на уровне пуша в нужные ветки (фича/dev/master)
По сути из самого сложного - разобраться как работает PyPoE и настроить его для парсинга нужных нам данных.

При разработке отвечу на любые вопросы и при необходимости составим более подробное ТЗ.

Сроки - гибкие, ориентировочно 1-2 недели, но можно и больше при необходимости.