a877785247
- rossvyaz.py: тип/оператор/регион/часовой пояс по реестру Россвязи (бесплатно, офлайн); детект «виртуальный (переадресация)» — городской на мобильном операторе/вирт.АТС. - wave3.py: зацепка, приоритет, личные почты и мессенджеры с сайта, лист «Памятка менеджеру». - phones_rossvyaz.py: разбор телефонов рекламодателей, «есть прямой канал». Файлы реестра Россвязи и локальный тест — вне git. Рунбук обновлён. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
111 lines
8.0 KiB
Markdown
111 lines
8.0 KiB
Markdown
# Рунбук: «Кто из фирм платит за рекламу» из выгрузки Спарка
|
||
|
||
**Что это.** Регулярная задача: заказчик даёт выгрузку из Спарка (юрлица с
|
||
сайтами/телефонами) — робот по каждой фирме определяет, **платит ли она за
|
||
рекламу и где** (Яндекс.Директ, коллтрекинг, соцпиксели), с **вилкой бюджета** и
|
||
всеми реквизитами. Заказчик делает приёмку и работает с готовым файлом.
|
||
|
||
**Робот:** `моя/ad-scan/run_spark.py`. Код в git; данные, результаты и токен — вне git.
|
||
|
||
---
|
||
|
||
## Как запускать (одна команда)
|
||
|
||
```bash
|
||
cd "c:/моя/проекты/портал crm/Документация/моя/ad-scan"
|
||
python -u run_spark.py "<путь к спарк.xlsx>" "<тег>"
|
||
# пример:
|
||
python -u run_spark.py "../СПАРК_клиники_МСК.xlsx" "клиники-мск"
|
||
```
|
||
|
||
- `<тег>` — короткое имя для файлов результата.
|
||
- Прогон длинный (сотни фирм = 15–40 мин): запускать **в фоне**, прогресс
|
||
печатается каждые 50 фирм, файл сохраняется чекпоинтами каждые 200 (потерь нет).
|
||
|
||
**Результат** (в `моя/результат/`):
|
||
- `<тег>-реклама-ФИНАЛ.xlsx` — таблица, рекламодатели сверху.
|
||
- `<тег>-реклама-СВОДКА.txt` — цифры для приёмки.
|
||
|
||
---
|
||
|
||
## Что нужно на входе
|
||
|
||
1. **Спарк-выгрузка** `.xlsx` со стандартными колонками (заголовки в строке 4):
|
||
№ · Наименование · Рег.номер(ОГРН) · Адрес · Руководство · Должность ·
|
||
Руководство-ИНН · Телефон · Email · Сайт · Совладельцы · Вид деятельности.
|
||
Если структура другая — сначала поправить индексы в `adscan/extract.py`.
|
||
2. **Токен Keys.so** в `моя/ad-scan/secrets/keyso_token.txt` (тариф с API —
|
||
«Профессиональный», ~9 300 ₽/мес). Токен НЕ коммитить (в `.gitignore`).
|
||
|
||
---
|
||
|
||
## Колонки результата
|
||
|
||
№ · Наименование · Домен · Телефон · **Рекламируется платно** · Коллтрекинг ·
|
||
Пиксели · **Директ** · Ключей Директ · База(город) · **Бюджет от** · **Бюджет до** ·
|
||
Доказательства · ОГРН · ФИО директора · ИНН директора · Адрес · Email · Совладельцы.
|
||
|
||
---
|
||
|
||
## Как это считается (чтобы принимать осознанно)
|
||
|
||
- **Рекламируется платно = да**, если нашли Директ **или** коллтрекинг
|
||
(Calltouch/Comagic/Callibri/Roistat/Mango) **или** рекламный пиксель
|
||
(VK-myTarget/Google Ads/Meta) на сайте.
|
||
- **Директ** берётся из Keys.so по **двум базам сразу — Москва и родной город**
|
||
фирмы (город из адреса), объединением: «да», если крутит хоть в одной.
|
||
- **Бюджет — вилка «от–до»**: от средней оценки Keys.so до максимума. Это
|
||
**оценка модели, не факт из кассы**; годится для ранжирования, не для рубля.
|
||
- **Дубли** по домену и **агрегаторы** (vk.com, yell.ru, prodoctorov, 2gis,
|
||
banki.ru и т.п.) — исключаются.
|
||
|
||
## Приёмка — на что смотреть
|
||
|
||
- `СВОДКА.txt`: доля «рекламируется», число Директ, вилка бюджета, **медиана**
|
||
(реальный масштаб) и **ТОП-4 выброса** (несколько крупных сетей раздувают сумму).
|
||
- «Не проверено» — у фирм, чей сайт не открылся; их реклама не оценена.
|
||
|
||
## Известные ограничения
|
||
|
||
- Keys.so нет базы «вся Россия» — города вне ~20 поддерживаемых уходят в `msk`
|
||
(список баз в `adscan/regions.py`). Такие фирмы могут быть недосчитаны.
|
||
- Первый запрос к региону Keys.so «прогревается» (HTTP 202) — отсюда время.
|
||
- «ИНН фирмы» в выгрузке Спарка нет — есть ОГРН (по нему при желании ИНН
|
||
тянется через DaData отдельным шагом).
|
||
- Коллтрекинг/пиксели, подгружаемые через диспетчер тегов, скан не видит —
|
||
число «рекламируется» это занижает (нижняя граница, не потолок).
|
||
|
||
## Волна 3 — «лист обзвона» для менеджера (после run_spark)
|
||
|
||
Обогащает **рекламодателей** в готовом файле. Всё бесплатно (сайты + Россвязь).
|
||
|
||
```bash
|
||
python wave3.py "../результат/<тег>-реклама-ФИНАЛ.xlsx" # почты+мессенджеры+зацепка+приоритет+лист «Памятка менеджеру»
|
||
python phones_rossvyaz.py "../результат/<тег>-реклама-ФИНАЛ.xlsx" # разбор телефонов
|
||
```
|
||
|
||
Добавляет колонки: Зацепка для звонка · Приоритет (A/B/C) · Личные почты (сайт) ·
|
||
Мессенджеры (сайт) · **Телефоны (разбор)** · **Есть прямой канал** · Часовой пояс.
|
||
Плюс лист **«Памятка менеджеру»** — что за сервисы использует клиент + ссылки.
|
||
|
||
**Телефоны — классификатор Россвязи** (`adscan/rossvyaz.py`, бесплатно, офлайн):
|
||
- по каждому номеру — тип, оператор, регион, часовой пояс;
|
||
- **«виртуальный (переадресация)»** — городской номер на мобильном операторе
|
||
(МТС/Билайн/МегаФон/Т2) или на виртуальной АТС (Манго/CoMagic/Задарма/МТТ):
|
||
это подменный номер, дозвон дойдёт до человека, а не до ресепшена;
|
||
- «Есть прямой канал» = есть мобильный ИЛИ виртуальный городской.
|
||
|
||
**Зависимость:** файлы реестра Россвязи в **корне репозитория** (Документация):
|
||
`DEF-9xx.csv`, `ABC-3xx.csv`, `ABC-4xx part1.csv`, `ABC-4xx part2.csv`, `ABC-8xx.csv`
|
||
(скачиваются с opendata Россвязи; ~40 МБ, в git НЕ хранятся — держать рядом).
|
||
Обновлять раз в несколько месяцев с сайта Россвязи.
|
||
|
||
**DaData для телефонов НЕ нужна** — Россвязь даёт то же (тип/оператор/регион/пояс)
|
||
бесплатно. DaData пригодилась бы только для MNP-точности (портированные номера) —
|
||
на классификацию моб/город и регион это почти не влияет.
|
||
|
||
## Уже прогнано (примеры)
|
||
|
||
- Стоматологии: 1 854 → 456 рекламируется, 238 Директ; волна 3: 268 с прямым каналом.
|
||
- Ломбарды/МФО: 638 → 124 рекламируется, 74 Директ.
|