Поиск по хештегу. Или как отследить удаленный репост
Всем привет! Как же отследить, а не удалил ли пользователь репост?
Просто делаем команду на отслеживание поста. Через запрос к 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
=100
v
=5.131
access_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
запускаем нашу команду на проверку репоста.

Авторы статьи Андрей Горячих и Никита Кузнецов.
Задать вопрос, оставить замечание или пожелание (или просто лайкнуть инструкцию) можно в этом посте.
Вернуться на главную страницу инструкций