diff --git a/tradein-mvp/backend/app/api/v1/admin.py b/tradein-mvp/backend/app/api/v1/admin.py index 6b8d251a..d4cb58cc 100644 --- a/tradein-mvp/backend/app/api/v1/admin.py +++ b/tradein-mvp/backend/app/api/v1/admin.py @@ -2197,9 +2197,9 @@ async def scrape_yandex_address_backfill( """T10: Backfill listings.address для Yandex-листингов без номера дома. Yandex SERP-карточки содержат только улицу («улица Горького»). Этот endpoint - фетчит detail-страницы через curl_cffi (kit-профиль `DEFAULT_IMPERSONATE`), извлекает полный адрес - из («Екатеринбург, улица Горького, 36 — id …»), обновляет - listings.address и сбрасывает geocode_tried_at для перегеокодирования. + фетчит detail-страницы через curl_cffi (kit-профиль `DEFAULT_IMPERSONATE`), + извлекает полный адрес из <title> («Екатеринбург, улица Горького, 36 — id …»), + обновляет listings.address и сбрасывает geocode_tried_at для перегеокодирования. limit: сколько листингов обработать за запуск (default 200). request_delay_sec: пауза между запросами (default 3.0s). diff --git a/tradein-mvp/backend/app/services/yandex_address_backfill.py b/tradein-mvp/backend/app/services/yandex_address_backfill.py index ac8bbf01..059d3dc2 100644 --- a/tradein-mvp/backend/app/services/yandex_address_backfill.py +++ b/tradein-mvp/backend/app/services/yandex_address_backfill.py @@ -5,8 +5,8 @@ The offer detail page <title> has the full address including house number: «Екатеринбург, улица Горького, 36 — id 12345». This service finds active yandex listings without a house number in `address`, -fetches each detail page via curl_cffi (kit-профиль `DEFAULT_IMPERSONATE`), extracts the full address -from the <title> regex, and UPDATE listings.address. +fetches each detail page via curl_cffi (kit-профиль `DEFAULT_IMPERSONATE`), +extracts the full address from the <title> regex, and UPDATE listings.address. Deliberately NOT wired into scheduler — manual trigger only. Triggered via POST /api/v1/admin/scrape/yandex-address-backfill. diff --git a/tradein-mvp/backend/app/tasks/yandex_address_backfill.py b/tradein-mvp/backend/app/tasks/yandex_address_backfill.py index b9d267fb..b4170792 100644 --- a/tradein-mvp/backend/app/tasks/yandex_address_backfill.py +++ b/tradein-mvp/backend/app/tasks/yandex_address_backfill.py @@ -7,9 +7,9 @@ page <title> contains the full address including house number: This task selects active listings that match the predicate (source='yandex', region_code=66, address IS NOT NULL, address has no house number, source_url IS NOT NULL), fetches each -detail page via curl_cffi (kit-профиль `DEFAULT_IMPERSONATE`), extracts the full address -from the <title>, and -UPDATE listings.address ONLY when the extracted value differs from the current one. +detail page via curl_cffi (kit-профиль `DEFAULT_IMPERSONATE`), extracts the full +address from the <title>, and UPDATE listings.address ONLY when the extracted +value differs from the current one. Wired into the in-app scheduler as source='yandex_address_backfill'. Triggered nightly via the scrape_schedules seed (migration 091). Manual trigger also available via POST diff --git a/tradein-mvp/backend/app/tasks/yandex_detail_backfill.py b/tradein-mvp/backend/app/tasks/yandex_detail_backfill.py index 4ed4e0df..4ea7305e 100644 --- a/tradein-mvp/backend/app/tasks/yandex_detail_backfill.py +++ b/tradein-mvp/backend/app/tasks/yandex_detail_backfill.py @@ -96,8 +96,9 @@ OFFER_URL_PATTERN = "/offer/[0-9]+" # него собирается — это инвариант #2235 (`_canonical_source_url` в # scraper_kit/providers/yandex/serp.py) и та же формула, которой миграция 164 # чинила легаси-строки. Живая проба 2026-08-12 прод-трактом (тот же прокси, -# curl_cffi с kit-профилем (на момент замера — Chrome 120), тот же parse): 6 из 6 — HTTP 200 и parse OK, включая -# строки, чей сохранённый source_url — рекламный редирект na100.pro/go.php. +# curl_cffi с kit-профилем (на момент замера — Chrome 120), тот же parse): 6 из 6 +# — HTTP 200 и parse OK, включая строки, чей сохранённый source_url — рекламный +# редирект na100.pro/go.php. # # Откуда взялся стухший адрес: source_url пишется ТОЛЬКО при вставке — его нет ни # в `ON CONFLICT DO UPDATE`, ни в reconcile-UPDATE у `save_listings`. Значит #2235