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

48 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Исправление чтения 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 в этой итерации не подключались. Проверки поведения выполнялись на локальных тестовых данных.