Поиск по хештегу. Или как отследить удаленный репост
Всем привет! Как же отследить, а не удалил ли пользователь репост?
Просто делаем команду на отслеживание поста. Через запрос к API VK.
В данном случае будем отслеживать пост с тегом #автопилот на стене пользователя с ID 542391276.
Теория. Запрос к произвольному методу VK — wall.search
Если вы пришли за готовыми настройками, можете смело пропускать этот раздел и читать следующие.
Запрос имеет вид:
https://api.vk.com/method/wall.search
?owner_id=ID_пользователя
&query=#Автопилот
&count=100
&v=5.131
&access_token=Ваш_сервисный ключ_доступа
Важно! Метод wall.get имеет свои ограничения — 5000 вызовов в сутки. Будьте внимательны.
Важно! Метод wall.search имеет свои ограничения — 1000 вызовов в сутки. Будьте внимательны.Также имейте в виду, что иногда эти методы могут вести себя некорректно, и, например, не сразу увидеть удаленный репост. В видео показан данный метод.
где:
owner_id— ID пользователя. (в текущем примере 542391276).count— количество проверяемых записей (макс.100)query— принимает в себе текст для поиска. Например,#Автопилотv— используемая версия VK API
access_token— ваш сервисный ключ доступа
Получение сервисного ключа доступа
Сразу к делу! Идем по адресу https://vk.com/apps?act=manage
и нажимаем «Создать приложение».
Выбираем «Standalone-приложение», жмем «Подключить»
Далее, переходим в настройки слева.
Нам нужен сервисный ключ доступа.
Права доступа особо ни на что не влияют (для этой настройки). Можете ставить можете не ставить.
Копируем и сохраняем себе сервисный ключ, например:
8fdeca958fdeca958fdeca95c68fb48fb188fde8fdeca95d31b2dcaf00ec763eba9015d
Сохраняем изменения.
Тестовая команда
Чтобы проверить, что вы получили верный сервисный токен, сначала создадим тестовую команду, а затем её модифицируем для автоматической проверки.
Идем в Автопилот и делаем команду: когда админ пишет в сообщество сообщение есть репост @son_of_sky, то выполняется проверка для того участника, который указан в сообщении.
События:
1) Написал сообщение с текстом содержащим фразу есть репост
2) Добавляем условие «есть упоминание» (на скринах «есть ли подписчик»). Есть три эквивалентных варианта, можно использовать любой из них:
— Числовая переменная %mention% больше 0.
— Числовая переменная {mention}%content%{/mention} больше 0.
— Переменная %content% подходит под регулярное выражение
\[id\d+\|.+\]|vk\.com\/.+
Раньше для проверки использовались регулярные выражения, их можно увидеть в старых инструкциях. В курсе «Лётная школа» Олександр рекомендует использовать первый или второй варианты. Потому что они простые в использовании и уменьшают количество ошибок. А также поддерживают как классическое упоминание игрока, так и ссылку на его профиль ВКонтакте.
Узнать подробнее о переменной «Упоминание» можно в этом разделе.
В «реакции на невыполнение» условия стоит вставить текст — ругачку:
Вы забыли упомянуть подписчика. Пример: есть репост http:/vk.com/usatnyan
Этот текст придёт админу, если он напишет ключевик, но не укажет человека.
Если такое условие уже есть, находим его через кнопочку «Найти в каталоге»
3) Добавляем условие: «Сотрудник аккаунта», чтобы команду мог запустить только тот сотрудник сообщества, которому мы разрешаем проверять репосты, и не мог запустить случайный человек (если угадает ключевик).
4) Через кнопку «Добавить секцию» добавляем событие: «Добавлен в список игроков» для запуска периодической проверки при репосте. Пока достаточно сделать событие и записать его номер. В примере: 1342035
Важно! Разгрузите ваш Автопилот
Если какой-то блок у вас уже есть, то просто находим нужный блок, нажав на кнопку «Найти в каталоге», либо копируем номер из нужной команды и вставляем в поле ввода.
Действия:
1) В условной переменной проверяем, что количество строк введенных пользователем больше 1 (на второй строке вы можете ввести искомый хештег), иначе ищем хештег по умолчанию #Автопилот. Временной переменной
%text% =
{array}%content%|2|val|col{/array}если числ. переменная{array}%content%|0|count|col{/array}больше1- ИЛИ:
#Автопилот
2) Действия команды должны совершаться для другого человека, которого админ указал в виде упоминания или ссылки:
есть репост @son_of_sky
есть репост *son_of_sky
есть репост vk.com/son_of_sky
Чтобы команда выполнялась для указанного человека, добавляем действие «Сменить исполнителя». В поле указываем переменную %mention% или {mention}%content%{/mention} — любой из этих вариантов вытащит ID указанного игрока.
3) Отправляем GET/POST запрос на адрес https://api.vk.com/method/wall.search
рассмотрим параметры запроса:
owner_id=%vk_id%query=%text%count=100v=5.131access_token=Ваш_сервисный_ключ_доступа
Если у пользователя будет найден репост с ключевиком %text%, то мы получим примерно такой ответ:
{"response":{"count":111,"items":[{"id":1970,"from_id":408053834,"owner_id":408053834,"date":1643406060,"post_type":"post","text":"#Автопилот и далее текстЭто JSON-объект с постами, в примере, их 111 штук с данным хештегом. Как работать с JSON можно посмотреть здесь.
4) Оставим для вашего удобства пример добавим переменную %count% со значением:
%response.response.count%
Если переменная %count%больше 0, то репост на месте, иначе его удалили.
Важно! Как написано выше иногда методы могут не срабатывать, и не видеть удаленные посты, имейте это ввиду.
5) Действием: «Сменить исполнителя» меняем исполнителя на %orig_subs_id% на того кто запустил команду, для корректности.
6) Посылаем текст сотрудникам действием: «Отправить сообщение»:
#проверка_репоста
Клиент: %vk_link%
{if}%count%|Пост с %text% в наличии. Количество: %count%|Пост с %text% вероятно удален.{/if}
Собственно, все! Тестируем.
Как выглядит репост:
Проверяем работоспособность команды:
Удаляем репост и проверяем еще раз.
Команда с проверкой репоста через определённое время
Можно проверять, что репост висит через какое-то время после публикации.
Для этого нужно использовать действие: «Запустить таймер»
Пример задачи. Человек делает репост, запускаем таймер на определенное время и через действие: «Выполнить событие» запускаем команду для проверки.
Событие:
Важно! Событие работает только с открытыми профилями ВК. Если профиль закрыт, то ВК не получает данных о стене пользователя. Будьте внимательны.
1) Событие: «Сделал репост» с ID нужного поста. Если нужно реагировать на любой репост, то оставляем там 0
Действия:
1) Если у вас какой-то конкретный пост, то рекомендуется при репосте отменять таймер одноименным действием. Это сделано специально, чтобы если пользователь сделал несколько репостов, проверка запустилась 1 раз, иначе без отмены таймера у пользователя будет несколько проверок.
2) Далее действием: «Запустить таймер» с названием: репост запускаем таймер на определенное время. В примере: 1 час.
3) Действием: «Выполнить событие» № 1342035запускаем нашу команду на проверку репоста.
Авторы статьи Андрей Горячих и Никита Кузнецов.
Задать вопрос, оставить замечание или пожелание (или просто лайкнуть инструкцию) можно в этом посте.
Вернуться на главную страницу инструкций