11 KiB
Источники данных RF4: исследование этапа 0
Дата первоначальной проверки: 2 сентября 2026 года. Повторная проверка страницы и robots.txt: 3 сентября 2026 года. Исследовалась только публичная веб-страница; игровой клиент, его трафик и закрытые протоколы не исследовались.
Краткий вывод
Для первого адаптера следует получать серверный HTML страницы https://rf4game.de/records/region/RU/. На момент проверки таблица уже находится в исходном HTML и не требует JavaScript, авторизации или обхода защиты. Доступного JSON/XHR endpoint именно для рекордов не обнаружено.
Страница содержит общий WordPress AJAX-клиент с адресом /wp-admin/admin-ajax.php, но опубликованные на странице действия gajax_Ratings относятся к рейтингу игроков (rating, rating_list, best). Действия для таблицы рекордов не объявлены. Поэтому использовать или подбирать недокументированные AJAX-параметры не рекомендуется.
Подтверждённые URL и параметры
- Абсолютные рекорды региона RU:
https://rf4game.de/records/region/RU/. - Недельная форма URL:
https://rf4game.de/records/weekly/region/RU/. - В навигации страницы перечислены регионы:
GL,RU,DE,US,FR,CN,PL,KR,JP,EN. - В навигации категорий видны:
records,ultralight,recordslight,bottomlight,sea,telestick.
Категория и регион кодируются сегментами URL, а не query-параметрами. Фактический успешный ответ абсолютной страницы был 200, text/html; charset=UTF-8, с Cache-Control: no-cache. Запрос GET /robots.txt вернул 404, то есть явных инструкций для роботов на этом пути при проверке не было. Это не является разрешением на интенсивный сбор.
Серия быстрых проверок категорий позже получила одинаковые небольшие HTML-ответы вместо полных таблиц. Это может быть временной защитой или ограничением частоты; вывод требует повторной осторожной проверки. Именно поэтому исследовательский скрипт проверяет наличие таблицы и завершает работу с ошибкой, а не принимает произвольный HTML за пустой результат.
Подтверждённый DOM-контракт
Корень таблицы: div.records.flex_table. Верхняя строка имеет шесть семантических классов в таком порядке:
fish— рыба;weight— вес;location— водоём;bait— приманка/наживка (отображаемое значение находится в атрибутеtitleу.bait_icon);gamername— игрок;data— дата (именноdata, неdate).
Каждый div.records_subtable объединяет до нескольких результатов одной рыбы. Название рыбы находится только в заголовочной строке группы (.fish .text); вложенные строки имеют пустую ячейку рыбы и наследуют название группы.
Подтверждённые внутренние поля OfficialRecord:
| Поле | Источник/нормализация |
|---|---|
region |
сегмент URL, верхний регистр |
category |
сегмент URL/аргумент запуска |
fish |
.fish .text заголовка группы |
weight_g |
.weight; kg/g приводятся к целым граммам |
waterbody |
.location |
bait |
.bait_icon[title], nullable |
player |
.gamername, nullable |
record_date |
.data, формат D.MM.YY/DD.MM.YY |
source_url |
URL полученной страницы |
Координат, проводки, времени поимки и устойчивого внешнего идентификатора записи в этой таблице нет. Локализация зависит от домена/языка страницы: проверенная .de-страница возвращает немецкие названия рыб, водоёмов и приманок даже для региона RU.
Рекомендуемый режим получения
- Один понятный
User-Agent, таймаут 20 секунд. - Начать не чаще одного раза в 60 минут на выбранную комбинацию категории и региона.
- Не запускать параллельный обход всех регионов/категорий.
- Добавить кэш, ограниченные повторы с экспоненциальной задержкой и общий лимит запросов перед продуктивным импортом.
- При исчезновении таблицы, изменении порядка классов или ошибке HTTP считать запуск неуспешным и сохранять прежние данные.
- Повторно проверить условия использования и связаться с владельцем сайта до регулярного производственного сбора; отсутствие
robots.txtне заменяет разрешения.
При повторной проверке 3 сентября 2026 года страница рекордов по-прежнему публично отдавала таблицу, а https://rf4game.de/robots.txt снова вернул 404. Явного разрешения на автоматический сбор это не даёт. Поэтому планировщик реализован как opt-in профиль Compose scheduler, не запускается обычной командой docker compose up и не должен включаться во внешнем окружении до проверки условий использования или согласования с владельцем сайта.
Сравнение с hurfy/rf4-api
Репозиторий hurfy/rf4-api создан в августе 2024 года; последний push, видимый через GitHub API на дату исследования, был 14 января 2025 года. README прямо называет проект находящимся в разработке. Он использует Django, Celery и браузерный WebDriver, перебирает регионы и категории, затем разбирает те же классы records_wrapper, records_subtable, gamername, weight, location, bait_icon, data.
Полезные архитектурные идеи:
- отделить построение URL, получение HTML, разбор и сохранение;
- передавать регион и категорию вместе с сырой страницей;
- нормализовать вес и текст до записи в БД.
Что нельзя переносить без проверки:
- список категорий проекта ограничен
records,ultralight,telestickи уже не отражает всю текущую навигацию; - WebDriver избыточен для подтверждённой серверной HTML-страницы;
- парсер опирается на позиционный поиск
.rowsи не проверяет контракт колонок; - заявленные в README охват и расписание сами по себе не доказывают текущую работоспособность.
Фикстура и исследовательский код
tests/fixtures/records_ru_sample.html — сокращённая обезличенная фикстура, сохраняющая подтверждённую вложенность и классы. Реальные ники и реальные сочетания уловов в неё не переносились. rf4_research/records.py получает ровно одну переданную страницу, проверяет контракт колонок и выдаёт список типизированных OfficialRecord.
Unit-тест покрывает заголовочную и вложенную записи, килограммы/граммы, большой вес с разделителем тысяч и отказ при изменении колонок.
Что остаётся предположением
- Все перечисленные категории и регионы стабильно отдают таблицу при умеренной частоте запросов.
- Формат двухзначного года сохранится; сейчас он интерпретируется стандартным правилом Python как 2000-е для наблюдаемых значений.
- Сайт разрешит регулярный производственный опрос раз в час.
- DOM-классы останутся стабильнее локализованных заголовков.
- Отсутствие найденного JSON endpoint не доказывает, что внутреннего endpoint вообще нет; подтверждено лишь, что для публичного сценария он не нужен и на странице не объявлен.
Источники
- Официальная страница: https://rf4game.de/records/region/RU/
- Исследованный сторонний проект: https://github.com/hurfy/rf4-api
- Метаданные репозитория GitHub API: https://api.github.com/repos/hurfy/rf4-api