Уведомления в Telegram из A-Parser

  • Автор темы Автор темы Support
  • Дата начала Дата начала

Support

Administrator
Команда форума
A-Parser Enterprise
В данной статье будет рассказано о том, как отправлять сообщения из А-Парсера себе в Телеграм, а также показано 2 примера использования данного способа на практике.

Подготовка
Сначала нужно создать Telegram бота. В интернете о том как это сделать есть очень много статей, поэтому я расскажу о данной процедуре вкратце.
f00ei_180314225452.png

  1. Ищем в Telegram "отца всех ботов" @BotFather
  2. Отправляем ему команду /newbot и следуем дальнейшим инструкциям: задаем отображаемое имя и юзернейм бота
  3. После создания бота BotFather пришлет его токен - сохраняем (записываем, запоминаем...) его вместе с юзернеймом, который мы задали на 2-м шаге
Бот готов.
Теперь создаем группу в Телеграме.
  1. Открываем Меню - Создать группу
  2. Приглашаем в группу ранее созданного бота, введя в строку поиска его юзернейм. Также обязательно добавляем специального бота, который в будущем выдаст нам ID группы: @myidbot
  3. Называем группу любым удобным именем
Теперь наша группа готова. Сюда будут приходить уведомления от созданного бота.

Для отправки сообщений в данный чат, нужен его ID. В его получении нам поможет IDBot, которого мы ранее добавили в группу. Отправляем ему команду /getgroupid и получаем нужный ID, который также сохраняем. После этого IDBot можно удалить из группы.

На этом работа с Telegram закончена.
Теперь перейдем к А-Парсеру.
7zmjt_180315100929.png

  1. Импортируем пресет из каталога: https://a-parser.com/resources/271/
  2. Вписываем полученные ранее токен (вместо {YOUR_TOKEN}) и ID (вместо {CHAT_ID})
  3. Тестируем: если все было сделано правильно, то после запуска пресета в ранее созданную группу должно прийти сообщение. Если же что-то пойдет не так, то в файл результата выведется сообщение об ошибке.
  4. Если тест успешен - сохраняем пресет
Теперь у нас есть готовая система для отправки сообщений из A-Parser в Telegram.

Примеры использования
Уведомление об окончании работы задания

А-Парсер может обрабатывать различные проекты, некоторые могут работать по несколько часов, а то и дней. Следить за тем, когда же завершится то или иное задание не очень удобно, поэтому настроим уведомление об окончании в Телеграм.
Для этого воспользуемся функционалом Цепочки заданий. В задании, завершение которого нужно отследить, укажем в пункте Запустить по завершению ранее сохраненный пресет.
06g5p_180314230356.png

Внимание, ставить галочку Использовать файл результатов для запросов не нужно! Т.к. при ее включении, в пресет, который отправляет уведомление, на вход пойдет весь спаршенный файл результатов. И вместо одного сообщения об окончании, вы начнете получать очень много сообщений из строчками из файла результатов, что скорее всего закончится баном бота.

Теперь можно запускать основное задание. По его окончанию запустится пресет, отправляющий уведомление и вы сразу узнаете о завершении работы основного задания, получив заранее сохраненное сообщение, например такое:
ai5di_180314231615.png


Периодическое получение данных
Аналогичным способом можно периодически получать необходимые данные прямо в Telegram. Для примера возьмем получение позиций сайта a-parser.com по нескольким ключевым словам.
  1. Создаем пресет, который будет парсить позиции:
    8tcfq_180314235527.png

    Обратите внимание, в формате результата вместо \n написано %0A. Так сделано специально, чтобы в файле результата была одна строка вместо отдельных строк для каждого запроса. Благодаря этому, в Телеграм прийдет 1 сообщение, вместо нескольких (по одному отдельному сообщению на каждую строку в файле результата). %0A - это HTML encode символа \n, и т.к. сообщение в Telegram отправляется POST запросом, то мы получим разделенное по строкам сообщение. Важно, чтобы в файле результата было немного строк, а лучше всего одна.
  2. В поле Запустить по завершению указываем пресет, который отправляет уведомления. Но теперь включаем опцию Использовать файл результатов для запросов:
    6kvn4_180315000212.png
  3. Запускаем созданный пресет. Если все сделано правильно, то в телеграм прийдет сообщение с результатом основного пресета:
    oz78y_180315000445.png
  4. Теперь воспользуемся Планировщиком и настроим периодическое выполнение созданного пресета. Например вот так (каждый день в 8:45):
    t1up3_180315000713.png
Теперь каждое утро к чашечке утреннего кофе и новостям нас будет ждать в Телеграме сводка по позициям сайта ;)
 
@Support
А можно такое же сделать для заданий, в которых может быть очень много результатов? Чтоб результаты разбивались пачками, скажем по 100 строк и отправлялись на Телеграм?
 
Можно. Формируйте в основном задании результат таким образом, чтобы в файле результата в каждой строке было по 100 подстрок. Подобный подход описан выше в примере "Периодическое получение данных".
Вот пример шаблона (по 100 ссылок в сообщении):
Код:
[% FOREACH item IN p1.serp;
    count = count + 1;
    separator = count mod 100 ? '%0A' : "\n";
    item.link _ separator;
END %]
Рекомендую запускать задание, которое отправляет сообщения, в 1 поток, чтобы не нарушать очередность. Примерно вот так:
rw1cn_180320105745.png


P.S. Хотя не совсем понятно, зачем отправлять себе в Телеграм весь результат, если его очень много...
 
Можно. Формируйте в основном задании результат таким образом, чтобы в файле результата в каждой строке было по 100 подстрок. Подобный подход описан выше в примере "Периодическое получение данных".
Вот пример шаблона (по 100 ссылок в сообщении):
Код:
[% FOREACH item IN p1.serp;
    count = count + 1;
    separator = count mod 100 ? '%0A' : "\n";
    item.link _ separator;
END %]
Рекомендую запускать задание, которое отправляет сообщения, в 1 поток, чтобы не нарушать очередность. Примерно вот так:
rw1cn_180320105745.png


P.S. Хотя не совсем понятно, зачем отправлять себе в Телеграм весь результат, если его очень много...

@Support
Не совсем то, чего хотелось бы. Вот если у нас есть задача которая может идти очень долго и она периодически пишет результат. И нужно этот результат отправлять в Телеграм не дожидаясь завершения всего задания так как важна оперативность получения. Как-то это можно сделать?
 
Как вариант - JS парсер, который будет парсить то что вам нужно и отправлять результаты по ходу выполнения в Телеграм
 
а можно каким то образом так отправить изображение или видео?
 
Можно, используя api методы телеграма sendPhoto или sendVideo (https://core.telegram.org/bots/api)
Но для реализации нужной логики наверное лучше использовать JS парсеры.
 
добрый день. я использую пресет парсинга Яндекс Новостей https://a-parser.com/threads/2777/ и попробовал настроить чтобы результат парсинага отправлялся в Телеграм. Все сделал по инструкции, но сообщения в чат не попадают. Подскажите, пожалуйста, возможно ли использование комбинации парсинга новостей с телеграм-ботом или я просто в чем-то ошибся и по этому не посылаются сообщения?
 
возможно ли использование комбинации парсинга новостей с телеграм-ботом
Конечно возможно, вы можете отправлять любые сообщения в группу. Скорее всего где-то допускаете ошибку. Попробуйте сначала протестировать пресет отправки сообщений. Если с ним все в порядке, тогда тестируйте с парсингом новостей. Обращайте внимание на сообщения в ответе от API телеграма, там как правило пишется в чем проблема.
 
А возможно ли отправлять в телеграм сообщение только при определенном результате парсинга?

Например, парсим наличие товара на сайте. Если "нет в наличии", то не отправляем по завершении. Если "в наличии", то отправляем.
 
Можно.
Если следовать описанной в статье логике, то формируйте итоговый файл 1-го пресета так, чтобы в результате были сообщения только о товарах, которые "в наличии" (т.е. фильтруйте по наличию).
 
Подскажите, как отправлять одно сообщение, если контент берем из текстового файла построчно? 1 строка= 1 сообщение
 
Подскажите, как отправлять одно сообщение, если контент берем из текстового файла построчно? 1 строка= 1 сообщение
После обсуждения в чате выяснились подробности задачи:
У меня список постов построчно, 100 строк.
По моей логике при запуске А-Парсера должно взять одну строку и отправить. А сейчас берет все строки и отправляет каждую строку отдельным сообщеним, все 100 строк сразу. Получаю 100 сообщений за несколько секунд.
Мне надо по расписанию отправлять одну строку из файла за один запуск А-Парсером задания.

Возможное решение:
Самый простой наверное вариант - поставить в задании нужную задержку (например 60 сек) и запустить в 1 поток. Тогда последовательно отправятся все сообщения, по одному в минуту.
 
В поле Запустить по завершению указываем пресет, который отправляет уведомления. Но теперь включаем опцию Использовать файл результатов для запросов:

скажите, а как реализовать отправику уведомлений только для тех запросов, позиции которых изменились? И чтобы он показывал на сколько и стркелочку "вврх-вниз"?

например:
купить a-parser: 30 ⬆️ - 10

ну или просто позиция ключа "купить a-parser" повысилась с 30 до 10.
 
скажите, а как реализовать отправику уведомлений только для тех запросов, позиции которых изменились? И чтобы он показывал на сколько и стркелочку "вврх-вниз"?
Это реализуется с помощью JS парсера и написания соответствующей логики с хранением предыдущих результатов в БД.
 
Добрый день,
а можно в сообщение выводить название задачи, которая готова?
 
Назад
Верх