From 75c2025ba081b2bfd176ee3f7daa266f617ee2d6 Mon Sep 17 00:00:00 2001 From: lekss361 Date: Mon, 27 Apr 2026 18:40:44 +0300 Subject: [PATCH] redme --- README.md | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4539bb8d..34a354dc 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,14 @@ Acceptance criteria разбиты на 3 блока (функционально - Territory aliases для stat_series ↔ regions name mapping (`v_stat_series_resolved` view): 100% покрытие 809K observations через 101 alias. - Готовы 2 стратегических отчёта: `Sverdl_Quartirography_Report_Apr27` (общий по Свердл) + `PRINZIP_Strategy_Apr27` (что строить и куда смотреть). +**27.04 вечер — analytics dashboard + DOM.РФ scraper.** Поверх аналитического пласта собран интерактивный дашборд + регулярный парсер для пополнения данных: + +- **Веб-аналитика** (`Analytics_Dashboard_Apr27`) — 3 страницы на ECharts/React Query: `/analytics` (рынок Свердл — KPI + market-pulse + парадокс «строят vs покупают» + pipeline + treemap районов ЕКБ), `/analytics/prinzip` (drill-down PRINZIP с benchmark-velocity, gap-bar к рынку, инсайты из стратегии), `/analytics/developers` (топ-15 + scatter velocity). Backend: `/api/v1/analytics` 11 endpoints поверх `v_developer_full_metrics`. +- **DOM.РФ kn-API парсер** (`DomRf_Kn_Scraper_Apr27`) — Playwright in-context fetch (httpx бьётся об ServicePipe TLS-fingerprint, проверено), правильные endpoints `/сервисы/api/kn/object` (place=66, objStatus 0/1/2 = 442+2+1072 = **1516 ЖК Свердл, точно совпало с БД**) + `/portal-kn/api/sales/portal/table` (квартиры). Auth — `Basic MTpqd2U=` (`1:qwe`, не `jwe`!). Серверная фильтрация по `regions/developers` НЕ работает — фильтруем локально по `developer.companyGroup`. +- **Extras-эндпойнты** (per-ЖК, того же sweep): `/sale_graph?type=apartments|parking` (time-series продаж), `/sales_agg` (текущие агрегаты 3 типов), `/infrastructure` (POI), `/construction/progress/photo` (мета+опц. binary). PRINZIP probe: 28 ЖК → 36 sale_graph + 6 sales_agg + 5 409 POI + 5 150 фото-метаданных. +- **Расписание + ручной триггер** — Celery beat (cron из `SCRAPE_KN_CRON` env, jitter 0..30мин), `POST /api/v1/admin/scrape/kn` с `X-Admin-Token`, UI `/admin/scrape` (чекбоксы extras/photos + журнал ошибок с copy-URL для ручной проверки в браузере). +- **Stealth** — Playwright fingerprint снят с локальной машины в `data/playwright_state.json` (26 cookies, ServicePipe NSC + Keycloak), закоммичен в git для server-reuse без cold-bootstrap. + --- ## Аналитический пласт данных (data warehouse) — 27.04.2026 @@ -145,12 +153,18 @@ Acceptance criteria разбиты на 3 блока (функционально | `domrf_mortgage_dashboard` | 1 | агрегат рынка ипотеки РФ | | `domrf_mortgage_details` | 2 | RUB/OTH валюты | -**DOM.РФ /сервисы/api/kn/* (от Антона)** +**DOM.РФ /сервисы/api/kn/* (от Антона + наш scraper)** | Таблица | Рядов | Описание | |---|---:|---| -| `domrf_kn_flats` | **27 563** | поквартирный прайс РФ free/booked/sold с ценами | -| `domrf_kn_objects` | 1 516 | реестр ЖК Свердл (1285 ЕКБ + 28 PRINZIP) с GPS, классом, эскроу | +| `domrf_kn_flats` | 28 389+ | поквартирный прайс. Антоновский snapshot 2026-04-27 + наши новые snapshot'ы (UNIQUE по `(id, snapshot_date)`) | +| `domrf_kn_objects` | 1 516+ | реестр ЖК Свердл (1285 ЕКБ + 28 PRINZIP) с GPS, классом, эскроу. Наш scraper подтвердил 442+2+1072=1516 для региона 66 | | `domrf_dev_growth` | 139 | динамика 2024→2025 девелоперов | +| `domrf_kn_sale_graph` ⭐ | 36+ | time-series продаж per-ЖК (apartments/parking × месяц). PRINZIP Парк Победы продал 95 квартир в 2025 | +| `domrf_kn_sales_agg` ⭐ | 6+ | текущие агрегаты per-ЖК (apartments/nonliv/parking × total/realised/perc). Парк Победы 145/291=49% | +| `domrf_kn_infrastructure` ⭐ | 5 409 | нормализованная POI вокруг ЖК (Спорт, Продукты, Образование, Медицина, Развлечения) с lat/lon/dist_m | +| `domrf_kn_photos` ⭐ | 5 150 | метаданные фото прогресса стройки (URL + period_dt + size_bytes), binary в `data/raw/domrf_photos/` опционально | +| `kn_scrape_runs` | 3 | журнал прогонов парсера: regions, developers, objects_count, flats_count, requests_count, status | +| `kn_scrape_failures` | 78 | per-request ошибки с full_url для ручной проверки в браузере (404 для сданных ЖК = ожидаемо) | **ЦБ РФ ипотека (от Антона)** | Таблица | Рядов | Описание | @@ -253,8 +267,14 @@ domrf_kn_flats (поквартирно) ─── obj_name ──→ domrf_kn_ob 43_anton_import.sql 13 new tables for Anton's SQLite 44_import_anton_db.py sqlite3 → postgres migration 45_relations_v2.sql +4 FK (kn_obj→regions/developers, sv_dev_sales→developers, rent_deals→regions) + 4 analytical views (jk_with_developer, jk_sales_summary, developer_portfolio, developer_full_metrics) + +50_schema_kn_extensions.sql UNIQUE (id, snapshot_date) для kn_flats/kn_objects + индексы (region_cd, snapshot_date) + kn_scrape_runs (журнал прогонов) +50_scrape_kn_flats.py CLI scraper для /сервисы/api/kn/object + portal/table; флаги --regions/--developers/--no-extras/--download-photos/--probe URL/--save-state/--load-state +51_schema_kn_extras.sql 4 extras-таблицы: sale_graph (time-series продаж), sales_agg (агрегаты), infrastructure (POI норм.), photos (мета+local_path) + kn_scrape_failures ``` +Парсер живёт в `backend/app/services/scrapers/{stealth.py, domrf_kn.py}`, Celery-таск в `backend/app/workers/tasks/scrape_kn.py`, admin endpoint в `backend/app/api/v1/admin_scrape.py` (POST /kn + GET /runs + GET /failures с auth `X-Admin-Token`). UI ручного запуска: `frontend/src/app/admin/scrape/page.tsx`. + ### 🎯 Аналитика — что делать с этими данными **Готовые отчёты в графе памяти:** @@ -578,6 +598,8 @@ git push - `Anton_Imported_Apr27_2026` ⭐ — 13 таблиц от Антона + merge developers (8 629 итого) - `Sverdl_Quartirography_Report_Apr27` 📊 — полный отчёт по Свердл квартирографии - `PRINZIP_Strategy_Apr27` 📊 — стратегия PRINZIP: что строить и куда смотреть +- `Analytics_Dashboard_Apr27` ⭐ — 3 страницы /analytics с ECharts (Свердл рынок, PRINZIP drill-down, девелоперы) +- `DomRf_Kn_Scraper_Apr27` ⭐ — парсер DOM.РФ kn-API + 4 extras-эндпойнта (sale_graph, sales_agg, infrastructure, photos), Playwright in-context fetch, Celery beat cron + admin trigger UI Сущности 26.04.2026: