Files
hockey_new/UPDATE_KHL_READING_RU.md
2026-09-27 01:04:09 +03:00

7.2 KiB
Raw Blame History

Исправление чтения KHL.ru — build 2026.09.27.3

Обновление включает предыдущие исправления v1–v6, в том числе сравнение игроков, подсказки и дни рождения.

Что обнаружено

Прежняя проверка HTML принимала страницу с заголовком 403 за обычную страницу КХЛ. После этого поиск карточек возвращал пустой список, и интерфейс сообщал о возможном изменении разметки. Дефект воспроизведён на ранее сохранённом ответе сайта: документ размером 245 364 символа с заголовком и первым заголовком страницы 403 проходил старую проверку.

Сообщение пользователя само по себе не доказывает, что его сервер получил именно эту страницу: без ответа с его сервера нельзя исключить другую разметку списка. Поэтому в обновление включена диагностика фактического ответа.

Исправления

  • Заголовки ошибок 401/403/429/500/503 и страницы проверки доступа распознаются даже при внешнем HTTP 200. Они не сохраняются в HTML-кэш.
  • При ограничении доступа запросы останавливаются. Другие адреса не используются для обхода ограничения. Старые карточки остаются доступны.
  • Убраны автоматические повторы HTTP 429; обновление не ждёт длительный Retry-After внутри HTTP-повтора.
  • HTML декодируется из исходных байтов с учётом его кодировки. Русские имена не зависят от неверного значения ISO-8859-1, которое requests может выбрать для text/html без указанного charset.
  • Поиск карточек поддерживает относительные ссылки, data-href, data-url и реальные адреса карточек во встроенном JSON/JSON-LD. Ссылки на чужие домены и произвольные числовые ID не используются.
  • Если получена обычная HTML-страница, но список не распознан, полное обновление может прочитать ранее известные карточки по сохранённым адресам/подтверждённым KHL ID. Результат явно помечается как частичный: новые участники из списка не добавлены. Для операции «текущие судьи» и восстановления имён только по списку этот резерв не применяется.
  • Ошибка разбора одного справочника не прерывает независимое обновление остальных. Настоящее ограничение доступа останавливает все сетевые запросы текущего запуска.
  • Дата данных сохраняется отдельно для каждой карточки. Необновлённые карьерные цифры не получают новую дату только из-за записи общего JSON.
  • Итог обновления сообщает результат по игрокам, тренерам и судьям отдельно.

Диагностика

В «Настройки → КХЛ сайт» добавлена кнопка «Диагностика КХЛ». После запуска обновления она скачивает khl-diagnostics.json с результатами справочников, последней проблемой, HTTP-статусом, заголовком HTML и определённой кодировкой. Cookies, заголовки авторизации и полный HTML в этот файл не записываются.

Если на сервере получается настоящий 403, исправление парсера не снимает ограничение сайта. Проверьте https://www.khl.ru/players/ в браузере на компьютере, где работает сервер проекта. Если сайт и там сообщает об ограничении доступа, вопрос доступа необходимо решить с поддержкой КХЛ. Если браузер открывает список, а программа не обновляет данные, файл диагностики позволит проверить ответ, полученный программой.

Установка

  1. Остановите сервер проекта.
  2. Распакуйте архив в существующую папку проекта с заменой файлов.
  3. Запустите сервер и обновите страницу.
  4. В «Настройки → КХЛ сайт» нажмите «Игроки» или «KHL.ru: обновить всё».
  5. Если обновление не выполнено, скачайте файл кнопкой «Диагностика КХЛ».

Пользовательские настройки, .env, базы данных, архив КХЛ и данные Agent в ZIP не включены.

Проверка

  • 35 целевых проверок прошли: 17 новых сценариев чтения/ошибок/диагностики и 18 прежних проверок КХЛ/карьеры.
  • Полный Python-набор: 462 успешных, 40 прежних неудачных. Набор неудачных тестов совпадает с v6, новых нет.
  • Настоящий сохранённый ответ КХЛ с заголовком 403 теперь отвергается проверкой.
  • В интерфейсе через jsdom проверены список, карточки, обновление, сообщение при отсутствии диагностики и скачивание отчёта; ошибок JavaScript не зарегистрировано.
  • Проверены Python-компиляция, CLI --help с установленными зависимостями и синтаксис JavaScript интерфейса.

Живая полная загрузка KHL.ru не подтверждена: сайт ответил 403 из среды проверки. Рабочая PostgreSQL пользователя и Windows/vMix в этой итерации не подключались. Проверки поведения выполнялись на локальных тестовых данных.