- rossvyaz.py: тип/оператор/регион/часовой пояс по реестру Россвязи (бесплатно, офлайн); детект «виртуальный (переадресация)» — городской на мобильном операторе/вирт.АТС. - wave3.py: зацепка, приоритет, личные почты и мессенджеры с сайта, лист «Памятка менеджеру». - phones_rossvyaz.py: разбор телефонов рекламодателей, «есть прямой канал». Файлы реестра Россвязи и локальный тест — вне git. Рунбук обновлён. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8.0 KiB
Рунбук: «Кто из фирм платит за рекламу» из выгрузки Спарка
Что это. Регулярная задача: заказчик даёт выгрузку из Спарка (юрлица с сайтами/телефонами) — робот по каждой фирме определяет, платит ли она за рекламу и где (Яндекс.Директ, коллтрекинг, соцпиксели), с вилкой бюджета и всеми реквизитами. Заказчик делает приёмку и работает с готовым файлом.
Робот: моя/ad-scan/run_spark.py. Код в git; данные, результаты и токен — вне git.
Как запускать (одна команда)
cd "c:/моя/проекты/портал crm/Документация/моя/ad-scan"
python -u run_spark.py "<путь к спарк.xlsx>" "<тег>"
# пример:
python -u run_spark.py "../СПАРК_клиники_МСК.xlsx" "клиники-мск"
<тег>— короткое имя для файлов результата.- Прогон длинный (сотни фирм = 15–40 мин): запускать в фоне, прогресс печатается каждые 50 фирм, файл сохраняется чекпоинтами каждые 200 (потерь нет).
Результат (в моя/результат/):
<тег>-реклама-ФИНАЛ.xlsx— таблица, рекламодатели сверху.<тег>-реклама-СВОДКА.txt— цифры для приёмки.
Что нужно на входе
- Спарк-выгрузка
.xlsxсо стандартными колонками (заголовки в строке 4): № · Наименование · Рег.номер(ОГРН) · Адрес · Руководство · Должность · Руководство-ИНН · Телефон · Email · Сайт · Совладельцы · Вид деятельности. Если структура другая — сначала поправить индексы вadscan/extract.py. - Токен 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)
Обогащает рекламодателей в готовом файле. Всё бесплатно (сайты + Россвязь).
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 Директ.