fix(tradein/cian): просмотры перестают теряться на int() по фразе (#2669) #2705
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2705
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2669-cian-views"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Cian отдаёт просмотры фразой, а не числом:
stats.totalViewsFormattedString="146 просмотров, 8 за сегодня"(дословно из сохранённого ответаtests/fixtures/cian_flat_330982715.html)._parse_viewsзвала на нейint()→ValueError→ свой жеexcept→None.Замер на проде (только чтение):
views_total_yandex)listings.views_totalпуст у всех 21 799 cian-строк. У других площадок той же потери нет — дефект ровно один.Что сделано
int(): число до слова «просмотр» →views_total, число перед «за сегодня» →views_today.views_todayберётся из хвоста ТОЙ ЖЕ фразы: отдельного ключаtodayViewsFormattedStringв ответе нет (в фикстуре его нет вовсе — прежний вызов по нему всегда возвращалNone). Колонкаlistings.views_todayсуществует с019_listings_alter_cian.sqlи уже пишется тем же UPDATE — новых полей не заводил."1 просмотр","0 просмотров","1 234 просмотра"с обычным пробелом и с NBSP, narrow-NBSP, голое"1 234", пусто/None/строка без цифр →(None, None). Плюс прогон настоящего сохранённого HTML через настоящийfetch_detail.Бэкфилл невозможен — доказательство
и то же самое по
listing_sources.raw_payload— 0 вхождений по всем пяти источникам. Исходной фразы в БД нет, восстанавливать не из чего. Миграция не заводится.Test plan
pytest tests/test_cian_views_parse.py— 13 passedtest_cian_bti_house_persist / test_snapshot_writer / test_cian_city_sweep / test_cian_history_backfill_listings_rollback / scrapers/test_domclick_detail / test_yandex_detail— 144 passedmax(detail_enriched_at)=2026-07-22, HTTP 403 — протухшие куки, #2700). Новых строк не появится, пока #2700 не разблокируют. Верификация здесь = маркер кода в живом контейнере + тест на сохранённом ответе, НЕ «ноль в колонке».Refs #2669
Cian отдаёт просмотры не числом, а фразой: "stats":{"totalViewsFormattedString":"146 просмотров, 8 за сегодня"} (дословно из tests/fixtures/cian_flat_330982715.html). `_parse_views` звала на ней int() → ValueError → свой же except → None. Прод: views_total пуст у ВСЕХ 21 799 cian-листингов, включая 1 571 detail-обогащённый. У соседей потери нет (avito 12 350/12 352, domklik 6 296/6 296, yandex 1 146/1 210) — дефект ровно один и только у Cian. Разбор теперь достаёт из фразы оба числа: «за сегодня» живёт в её хвосте, отдельного ключа todayViewsFormattedString в ответе нет (в фикстуре его нет вовсе — прежний вызов по нему всегда возвращал None). Колонка listings.views_today существует с 019_listings_alter_cian.sql и уже пишется тем же UPDATE — новых полей не заводим. Формы, покрытые тестами: фраза из фикстуры дословно, "1 просмотр", "0 просмотров", "1 234 просмотра" с обычным пробелом и с NBSP, narrow-NBSP, голое "1 234", пусто/None/строка без цифр → (None, None). Бэкфилл невозможен: исходной фразы в БД нет — 0 вхождений ViewsFormattedString в listings.raw_payload (21 799 строк, ключа stats нет ни у одной) и 0 в listing_sources.raw_payload по всем пяти источникам. Миграция не заводится. Эффект на проде появится только после возобновления cian-detail: парсер стоит с 22 июля (max(detail_enriched_at)=2026-07-22, HTTP 403 из-за протухших кук, #2700). До этого проверка правки — только на сохранённом ответе. Refs #2669errors=0иdone, все домовые поля Циана нулевые #2700