56 lines
3.3 KiB
PL/PgSQL
56 lines
3.3 KiB
PL/PgSQL
-- 122_enable_domclick_city_sweep.sql
|
||
-- Seed row для DomClick периодического citywide SERP-sweep.
|
||
--
|
||
-- !!! DORMANT BY DESIGN !!! enabled = false.
|
||
-- DomClickScraper.fetch_city бьёт DomClick SERP с prod-IP через camoufox headless
|
||
-- BrowserFetcher (DataDome пропускает headless Playwright; curl_cffi → 401).
|
||
-- Capability полностью wired (run_domclick_city_sweep + trigger_domclick_city_sweep_run
|
||
-- + dispatch в scheduler.py), но schedule засеян ВЫКЛЮЧЕННЫМ — live-поведение
|
||
-- намеренно НЕ verified до ручного prod-smoke. ВКЛЮЧАТЬ ВРУЧНУЮ оператором:
|
||
-- UPDATE scrape_schedules SET enabled = true WHERE source = 'domclick_city_sweep';
|
||
-- Зеркалит cian_city_sweep (107) и yandex_city_sweep (078, тоже enabled=false, dormant).
|
||
--
|
||
-- DomClick SERP — CITYWIDE (city_id), не geo-radius: anchor-loop отсутствует.
|
||
-- fetch_city перебирает rooms × pages внутри scraper'а и дедуплицирует по source_id.
|
||
-- SERP координаты не отдаёт (lat=lon=None) → house-match только по address-fingerprint.
|
||
-- SERP-only: нет detail/houses-фаз (в отличие от cian sweep), поэтому default_params
|
||
-- несут только city_id / rooms / pages_per_anchor / request_delay_sec.
|
||
--
|
||
-- ЗАВИСИМОСТИ: 052_scrape_schedules.sql (таблица + UNIQUE(source)).
|
||
-- Idempotent: ON CONFLICT (source) DO NOTHING — безопасно запускать повторно.
|
||
--
|
||
-- domclick_city_sweep — окно 03:00-06:00 UTC (06:00-09:00 МСК), после avito/cian/yandex
|
||
-- sweeps (02:00-05:00 UTC) чтобы не конкурировать за egress в одно окно.
|
||
-- default_params (консервативно, под DataDome):
|
||
-- city_id — числовой ID города DomClick (4 = Екатеринбург).
|
||
-- rooms — список комнатностей (0=студия, 1, 2, 3, 4).
|
||
-- pages_per_anchor — максимум страниц SERP на один room-проход (break on empty).
|
||
-- request_delay_sec — пауза между страницами SERP (anti-DataDome).
|
||
|
||
BEGIN;
|
||
|
||
-- next_run_at = следующее наступление night-window (tomorrow + window_start_hour).
|
||
-- При enabled=false get_due_schedules() всё равно не подхватит строку, но заполняем
|
||
-- по образцу 107: когда оператор включит schedule, next_run_at уже валиден и
|
||
-- запуск не выстрелит мгновенно (вне окна). AT TIME ZONE 'UTC' фиксирует wall-clock
|
||
-- час в UTC независимо от session TimeZone GUC.
|
||
INSERT INTO scrape_schedules (
|
||
source,
|
||
enabled,
|
||
window_start_hour,
|
||
window_end_hour,
|
||
next_run_at,
|
||
default_params
|
||
)
|
||
VALUES
|
||
(
|
||
'domclick_city_sweep',
|
||
false, -- DORMANT — enable manually after prod-smoke
|
||
3,
|
||
6,
|
||
((CURRENT_DATE + INTERVAL '1 day') + make_interval(hours => 3)) AT TIME ZONE 'UTC',
|
||
'{"city_id": 4, "rooms": [0, 1, 2, 3, 4], "pages_per_anchor": 5, "request_delay_sec": 6}'::jsonb
|
||
)
|
||
ON CONFLICT (source) DO NOTHING;
|
||
|
||
COMMIT;
|