feat(tradein): admin backfill endpoints — cian price-history (T8a) + yandex address (T10) + house IMV (T7) #856

Merged
bot-reviewer merged 1 commit from feat/tradein-scrapers-wave2-backfills into main 2026-05-31 06:37:11 +00:00
Collaborator

Волна 2 из inbox-ноты 2026-05-30-2050 (local→server). Логика перенесена из рабочих локальных скриптов scripts/, реализована как admin-triggerable POST endpoints (ручной/контролируемый запуск — НЕ авто-cron, т.к. bulk по cron ловит 429 с datacenter-IP). Без Playwright (curl_cffi). Не трогает scheduler.py.

T8a POST /admin/scrape/cian-price-history — curl_cffi fetch detail → extract_state(frontend-offer-card, defaultState)offerData.priceChangesoffer_price_history (была пустая). Reuse fetch_detail+save_detail_enrichment. Новый app/services/cian_price_history.py.

T10 POST /admin/scrape/yandex-address-backfill — curl_cffi fetch yandex /offer/<id>/, regex full-address из <title> → UPDATE listings.address + сброс geocode_tried_at. Пропускает если номер дома не извлёкся. app/services/yandex_address_backfill.py.

T7 POST /admin/scrape/house-imv-backfill — ядро из backfill-house-imv.py: median lot-params + house_type→IMV map + region-bbox prefix, resumable по imv_status, → house_imv_evaluations+house_placement_history+house_suggestions. app/services/house_imv_backfill.py.

pytest: 27 новых + 1413 total passed. ruff clean. (2 фейла cian_valuation/search-cache — локально-средовые, в CI проходят.)

⚠️ Риски: T7 IMV own-session без явного proxy (подхватит HTTP_PROXY env); T7 endpoint синхронный (~4.5мин/50 домов); T10 region_code=66 (EKB) хардкод. Детали в отчёте.

Волна 2 из inbox-ноты 2026-05-30-2050 (local→server). Логика перенесена из рабочих локальных скриптов `scripts/`, реализована как **admin-triggerable POST endpoints** (ручной/контролируемый запуск — НЕ авто-cron, т.к. bulk по cron ловит 429 с datacenter-IP). Без Playwright (curl_cffi). Не трогает scheduler.py. **T8a** `POST /admin/scrape/cian-price-history` — curl_cffi fetch detail → `extract_state(frontend-offer-card, defaultState)` → `offerData.priceChanges` → `offer_price_history` (была пустая). Reuse `fetch_detail`+`save_detail_enrichment`. Новый `app/services/cian_price_history.py`. **T10** `POST /admin/scrape/yandex-address-backfill` — curl_cffi fetch yandex `/offer/<id>/`, regex full-address из `<title>` → UPDATE `listings.address` + сброс geocode_tried_at. Пропускает если номер дома не извлёкся. `app/services/yandex_address_backfill.py`. **T7** `POST /admin/scrape/house-imv-backfill` — ядро из `backfill-house-imv.py`: median lot-params + house_type→IMV map + region-bbox prefix, resumable по imv_status, → `house_imv_evaluations`+`house_placement_history`+`house_suggestions`. `app/services/house_imv_backfill.py`. pytest: 27 новых + 1413 total passed. ruff clean. (2 фейла cian_valuation/search-cache — локально-средовые, в CI проходят.) ⚠️ Риски: T7 IMV own-session без явного proxy (подхватит HTTP_PROXY env); T7 endpoint синхронный (~4.5мин/50 домов); T10 region_code=66 (EKB) хардкод. Детали в отчёте.
bot-backend added 1 commit 2026-05-31 06:35:57 +00:00
T8a: POST /scrape/cian-price-history — fetches Cian detail pages (curl_cffi),
extracts priceChanges from _cianConfig defaultState, upserts offer_price_history.
Wraps existing cian_detail.fetch_detail + save_detail_enrichment.

T10: POST /scrape/yandex-address-backfill — enriches yandex listings.address
with house number from detail-page <title> regex; resets geocode_tried_at for
re-geocoding. Targets active EKB listings without a house number in address.

T7: POST /scrape/house-imv-backfill — bulk Avito IMV evaluation per house.
Picks median lot-params from linked listings, calls evaluate_via_imv, persists
house_imv_evaluations + house_placement_history + house_suggestions. Resumable
via imv_status markers. Runs in foreground (BackgroundTasks for long batches
can be added later if needed).

All three: NOT wired to scheduler (anti-rate-limit, intentional manual trigger).
All three: idempotent / graceful per-item error handling + counters response.
27 unit tests added in tests/test_backfill_wave2.py (all passing).
bot-reviewer merged commit 5373f5db63 into main 2026-05-31 06:37:11 +00:00
bot-reviewer deleted branch feat/tradein-scrapers-wave2-backfills 2026-05-31 06:37:11 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#856
No description provided.