{"id":14255,"url":"\/distributions\/14255\/click?bit=1&hash=285b001e00cf7484224a6ff681b6d172d7d7337a0afbdd4342d725cf62cb249b","title":"\u0411\u044b\u043b\u0438 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u0445 \u043e\u0442\u0435\u043b\u0435\u0439, \u043d\u043e \u043d\u0438 \u043e\u0434\u0438\u043d \u043d\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0438\u043b?","buttonText":"\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c","imageUuid":"4c6db631-4d4c-530c-9750-cf992e251f9d"}

Как мы упростили жизнь маркетологу, автоматизировав сбор ссылок на сообщения из десятков сообществ

Меня зовут Марина, я больше 20 лет занимаюсь разработкой сайтов. А еще я психолог. И как у психолога в прошлом году у меня возникла проблема со сбором ссылок на посты в своих сообществах для дайджеста.

О проблеме

У меня есть любимый сайт Yagaya-baba⁠⁠, на котором я выкладываю свои статьи о психологии. Чудесный сайт, но очень большой, клиенты в нем тонут, пытаясь все прочитать. Я услышала жалобы, завела несколько (много) профилей и сообществ в разных соцсетях и стала постить туда тематические подборки информации с сайта. С доставкой в личные ленты подписчиков. Получилось здорово, люди подписываются, читают, комментируют. Почти сразу я нашла smm-планировщик, который значительно упростил мне постинг: закинул туда свои посты по графику, и спи-отдыхай.

Но потом пришел ко мне мой любимый клиент, который подписан на все мои паблики, и пожаловался, что боится упустить что-то важное, а ленту потом перерывать – так себе удовольствие. Собери, говорит, дайджест со ссылками, что ты постила в соцсети. Я раз в месяц гляну и все сразу прочитаю. Я прислушалась, села в конце месяца, выгрузила посты из планировщика и составила страницу для сайта «О чем мы говорили в этом месяце». Сверстав все аккуратно ручками. И в следующем месяце. И потом еще раз. А постов-то много, времени все занимает часы – чуть ли не дольше, чем сам постинг. Когда дайджест стал занимать 2 дня в месяц по 12 часов, я сдулась и все забросила.

Вводная

В следующем году я подумала, что традиция-то хорошая, и нашла программиста, который согласился мне помочь со скриптом, который будет собирать мне дайджест.

Посты расходятся через smm-планировщик и мы можем там выгрузить отчеты в xls, в которых собрана информация, что в какую соцсеть уходило, со ссылкой и датой постинга.

Нам нужен html-файл, в котором эти ссылки будет собраны с разбивкой по пабликам, с вменяемыми названиями (соответствующими статьям на сайте) и ссылками не на сайт, а на паблик в соцсети.

Проблемы:

  • не во все соцсети можно постить через планировщик, например, в жж нельзя (временное решение: я перенесла весь основной постинг в ВК и телеграм, а из некоторых соцсетей и с видеохостингов собираю ссылки вручную) ;
  • в планировщике нет отдельного поля для названия поста, все идет сплошным текстом с телом поста (и они отказались этот функционал добавлять, я просила) ;
  • все названия постов есть на сайте, но некоторые названия очень похожи, надо понимать, какой именно пост ушел в соцсеть (нужна какая-то система кодификации постов) ;
  • не все посты я посылаю в паблики через планировщик, иногда пишу сразу в паблик (тут мне просто пришлось переучиться: сначала писать на сайт, оттуда переносить в планировщик, чтобы пост потом попал в дайджест) ;
  • тексты на сайте очень разные и по оформлению и по структуре, некоторые уходят в соцсеть целиком, некоторые одним пунктом из множества других и так далее;
  • многие посты уходят рубриками, в каждый день недели один определенный тип поста, и мне бы хотелось в дайджесте это сохранить.

Этап творческих терзаний и обсуждения ТЗ опустим. Сложность для программиста была в том, что сразу внятного ТЗ сформулировать не получилось. А я, как ни старалась переводить все на его язык, не настолько хорошо программирую, чтобы он меня правильно понимал.

Что мы сделали

1. Я завела систему кодов: разбила все посты на сайте на серии под тем или иным названием, в каждый файл внесла код или коды, так как некоторые посты могут входить в разные серии. Выглядит это примерно так (файлы на YAML) :

2. Сделала сводную таблицу для графика публикаций, где в строках – названия пабликов, в столбцах – коды серий, которые уходили в паблик по дням недели. Если в один день недели шли постинги по разным сериям, то перечисляю коды через запятую. Плюс специальный код «Объявления», куда можно сваливать все, что не подходит ни под какие серии.

И еще сделала список кодов с названиями серий постов.

3. Описала логику анализа этой таблицы программисту, и он собрал скрипт, который обрабатывает массив постов.

4. Сначала мы столкнулись с безумным количеством моих ошибок: то я код забыла поставить в пост, то поставила неверно, то постила мимо планировщика, то постила через планировщик, но не выложила на сайт, то выложила на сайт немного другими словами. Наконец, за пару месяцев мы отловили все эти ошибки, и все посты стали попадать в дайджест. Как-нибудь.

5. Тут мы поняли, что друг друга не поняли.

Я предполагала, что логика анализа будет такой.

Смотрим в файл Данные.

Паблик.

Туда ушли посты из файлов с кодами а, б, в, г, д, е, ё, ж…

Смотрим в отчет планировщика на текст, ушедший в паблик.

Смотрим на тексты с кодами а, б, в, г, д, е, ё, ж… в базе текстов.

Сравниваем.

Да. Нашли текст из планировщика в текстах с кодом а.

Формируем:

Рубрика а

Ссылка на публикацию из файла планировщика. Название ссылки взяли со страницы из тайтла или, в редких исключениях, из текста поста.

Не нашли текст в этих кодах – орем, что у нас тут неопознанное что-то, чтобы я убедилась, что на сайте оно есть и помечено нужным кодом.

Вместо этого, похоже, логика другая.

Нашли пост в планировщике.

Нашли по совпадению текста текст в базе данных. Во всей базе.

Выдрали из него код для формирования рубрики. Внесли в рубрику.

Теперь вместо 7 (по дням недели) – 8 (плюс рубрика объявлений) рубрик в паблике у нас очень много (тут стояло в переписке более точное слово) этих рубрик. Потому что текст мог найтись вовсе не в той рубрике, которая уходила в паблик, а в другой какой-нибудь. И теперь все это надо разгребать.

6. Программист меня понял, перестроил и описал алгоритм сборки дайджеста. Теперь он выглядит так:

Считываем все файлы постов

Чистим текст: Удаляем все теги, кроме тегов h1, h2, li, a, iframe.

Индексируем по коду рубрики, чтоб искать не по всем постам.

Считываем данные о порядке вывода ссылок дайджеста из Данные. xlsx

Читаем все файлы posts (*) .xlsx

1. Собираем всё в один массив.

Если в колонке E несколько ссылок в ячейке — то будем генерировать дайджест для каждой из них.

2. Сортируем по дате.

3. Создаем объекты строк планировщика.

Генерируем фрагменты для поиска

Создаём 3 фрагмента для поиска в постах.

Фрагмент с исключёнными ключевыми фразами пропускается.

Исключённые фразы:

  • «комментарий психолога»,
  • «сборники сказок»,
  • «арт терапия скоро сказка сказывается»,

Фрагмент, содержащий низкоинформативный текст тоже пропускается.

Низкоинформативный текст:

  • «вопрос»,
  • «ответ»,

Всё строки нормализуются (приводятся в нижний регистр, удаляются символы) .

Для строки содержащей youtube. com/embed делается спец обработка для дальнейшего поиска.

«по ссылке можно пройти тест» вырезается, чтоб можно было найти пост с тестом.

Ищем нужные поля для каждой строки отчёта планировщика:

1. Код рубрики

Ищем пост

Проходимся по каждому фрагменту для поиска

Фрагмент может быть найденным в нескольких файлах постов.

Поэтому мы ищем все фрагменты во всех постах и смотрим какой файл набрал наибольшее количество «вхождений».

Файл с наибольшим количеством вхождений побеждает.

И title будет искаться в последнем из фрагментов, т. к. предполагается, что вначале могут быть менее информативные фрагменты.

  • Если все файлы набрали одинаковое количество вхождений — то берётся файл для последнего фрагмента.
  • Если пост не находится — это потом покажется в итоговой таблице ненайденных постов.
  • Ищем пересечение рубрик у СоцСети и Поста, чтоб выводить посты в нужных блоках соц сетей в нужных рубриках.

2. Анкор для ссылки дайджеста.

Берём фрагмент по которому нашёлся пост.

Сначала ищем в title поста и если нашли — то берём title в качестве анкора.

Если нет — ищем дальше по посту и по ходу поста находим временные анкоры (из h1 или h2)

Если находим в li, то берём весь контент li как анкор.

Если находим * * *, то берём весь контент абзаца как анкор.

Для рубрики s_144 всегда берём title.

Рендерим дайджест.

Фрагмент текста по которому искался анкор выделяется оранжевым фоном.

7. Еще довольно долго мы доучивали скрипт верно брать названия для некоторых сложных постов. Чтобы названия у ссылок были правильными. В итоге все получилось.

Вжух! И готово

Теперь мне надо запустить на выбор три файла:

  • для дайджеста с подробностями, который выводит служебную информацию. Тут я могу отловить все свои ошибки формата «забыла поставить код или выложить пост на сайт» и их поправить;
  • для чистой версии дайджеста, где будут только ссылки. Тут я еще раз перепроверяю результат и убеждаюсь, что для всех ссылок мы подхватили с сайта корректное название. 1% приходится руками исправлять;
  • для текстовой версии дайджеста, где ссылки будут текстом, без тегов. Потому что для публикации дайджеста в соцсетях мне нужен такой формат. Этот вариант мы собираем уже по готовому дайджесту.

Даже с учетом того, что первые версии дайджеста я собирала, пока мы не все косяки исправили, его вычитка заняла 3 часа вместо 24. Перед написанием этого поста проверила, как формируется дайджест по февральскому постингу – ошибок нет, все названия корректные. То есть на проверку и вычитку уйдет максимум 1 час времени. Объем постинга только расширяется, так что в перспективе экономия времени будет еще более заметной. И ошибок верстки нет, все теги проставлены корректно, мне не надо проверять результат еще и на такие ошибки.

Отличный получился инструмент для маркетологов, которые ведут более, чем одну соцсеть клиента.

Ссылка на последний дайджест, собранный скриптом: 435 ссылок, сверстанных не моими руками (какое же счастье-то!) О чем мы говорили в январе 2023 г. ⁠⁠

0
3 комментария
Андрей Кузнецов

Довольно интересная статья, очень нравится идея автоматизации(я сам любитель все максимально оптимизировать, с целью экономии времени), но все же, что мешало формировать дайджест по мере публикации материала?

Ответить
Развернуть ветку
Марина Гладышева
Автор

В планировщике посты лежат с отложенными датами выпуска. На момент создания задания я не знаю имени ссылки, по которой выйдет пост.

Ответить
Развернуть ветку
Андрей Кузнецов

Тогда вопрос отпадает. Отличная реализация)

Ответить
Развернуть ветку
0 комментариев
Раскрывать всегда