Полноценный Telegram канал на базе A-Parser

Инструкция по быстрому созданию Телеграм канала на базе А-Парсер

  1. Support
    Однажды, в очередной раз листая Google Play в поисках чего-то интересного, я заметил, что на распродажах можно найти очень интересные приложения по "вкусной" цене. Но в Google Play нет отдельного раздела со скидками, также, как и нельзя искать только акционные предложения. Так появилась идея постоянного мониторинга и получения уведомлений о новых акциях прямо на телефон. А т.к. это может быть интересно не только мне, то было решено для этой задачи использовать функционал Телеграм каналов. Ну и конечно, инструментом для реализации будет А-Парсер. Поэтому ниже описан метод создания реального Telegram канала на базе A-Parser.

    Создание канала и регистрация бота в Телеграм
    В первую очередь нужно создать канал, в который и будут приходить сообщения. Для этого необходимо выполнить несколько простых действий:
    1. В Телеграм открываем Меню - Создать канал
    2. Указываем название, аватарку и описание (необязательно)
    3. Выбираем тип Публичный и придумываем простую и запоминающуюся ссылку
    4. Приглашение участников пока что можно пропустить
    На этом создание канал окончено.
    Теперь нужно зарегистрировать бота, который будет в нем публиковать сообщения. Процедура регистрации бота ранее была описана в этой статье и по сути ничем не отличается. Следуем указанным там шагам, в итоге у нас будет токен и имя бота.

    Приглашаем созданного бота в наш канал и делаем его администратором (т.к. только администраторы могут постить в канал):
    1. В меню канала выбираем пункт Управление каналом.
    2. В появившемся окошке кликаем на пункт Администраторы, потом внизу кнопка Добавить администратора.
    3. В поиске находим по имени созданного бота и добавляем его: соглашаемся с вопросом и выставляем права. Для работы нужно только разрешение на публикацию сообщений, остальные можно все отключить.
    На этом настройка в Телеграме закончена, мы зарегистрировали нового бота и добавили его в созданный канал, назначив администратором.

    Сбор контента
    Т.к. на канале планируется публиковать ссылки и информацию о приложениях в Google Play со скидками, то становится открытым вопрос по их поиску. В Google Play нету отдельного раздела с акционными приложениями, поэтому задача усложняется.
    После небольшого анализа становится понятно, что решить ее можно с помощью встроенного поиска Google Play. В общих чертах алгоритм выглядит так:
    1. Ищем по ключевому слову приложения
    2. Указываем в фильтре показывать только платные
    3. Листаем страницу до конца и выбираем только те, которые со скидками
    4. Заходим в выбранные приложения и собираем необходимую информацию
    [​IMG]

    Но по одному ключевому слову может быть всего несколько приложений со скидками, а часто и вовсе ни одного. Можно перебрать различные цифро-буквенные комбинации, но как показывает практика - это не очень эффективно. Поэтому было решено сначала собрать базу ключевых слов, а уже потом по ним парсить приложения. И в этом отлично помогут поисковые подсказки Google Play.

    Теперь остается последний вопрос - где и как хранить собранные данные? Ведь необходимо иметь удобный доступ к собранным данным с возможность обновлять изменившиеся данные и удалять устаревшие... Поэтому отличным решением становится использование базы данных SQLite, с которыми А-Парсер умеет работать.

    Итак, план действий готов, приступаем к реализации:)
    Создаем задание для парсинга подсказок из Google Play. За основу можно взять этот пресет. Глубину ставим 1 (больше не нужно, т.к. скорее всего будет много мусора и пустых запросов). На вход с помощью макросов подстановок подаем цифровые и буквенные комбинации (3-х символов вполне будет достаточно). Имя файла указываем жестко и включаем перезапись результатов, чтобы в дальнейшем при автоматическом запуске следующий пресет знал откуда брать запросы. Также включаем уникализацию результатов по строке. Сохраняем пресет (он нам еще нужен будет в будущем) и запускаем в работу. После окончания парсинга получаем список (обычно это 50-100 тысяч) ключевых слов.
    [​IMG]

    Теперь, имея базу слов, переходим непосредственно к поиску приложений со скидками. В А-Парсере есть встроенный парсер GooglePlay::Apps GooglePlay::Apps, но он немного не подходит под описанный выше алгоритм. Поэтому нужно написать собственный JavaScript парсер. Это пожалуй наиболее сложная и трудоемкая часть работы. Полного описания всех особенностей и алгоритма данного пресета вполне достаточно для отдельной статьи, поэтому я пройдусь только по ключевых функциях.
    • На вход принимается ключевое слово.
    • JS парсер использует его для поиска в Google Play и, прокручивая страницу, собирает из предложенной выдачи большинство данных о приложениях со скидками (а также ссылки на более подробное описание), после чего переходит по собранным ссылкам и собирает данные, которых не было в поисковой выдаче (например, время действия скидки).
    • Собранные данные по каждому найденному приложению сохраняются в базу данных. При этом, если такие данные уже есть и они отличаются, то запись обновляется. За запись и проверку данных отвечает шаблон формата результата в пресете. Также все действия логгируются в отдельный файл.
    В результате на выходе получается база данных такого вида:
    [​IMG]

    Готовый пресет доступен в нашем каталоге. На этом сбор контента окончен и можно переходить к публикации.

    Отправка сообщений в канал
    Процедура отправки сообщений в канал похожа на описанную в этой статье. Но парсер должен брать данные из базы данных, обрабатывать их и записывать в БД информацию о том, какие приложение уже участвовали в рассылке (столбец send на скриншоте выше). Также желательно реализовать процедуру очистки от устаревших записей (срок действия которых уже истек, столбец expire на скриншоте выше). Поэтому опять воспользуемся функционалом JavaScript парсеров. Краткий алгоритм:
    • считываем из БД информацию о нескольких приложениях, которые ранее не были в рассылке
    • формируем сообщение и отправляем его
    • для облегчения обслуживания в дальнейшем также логгируем все действия
    Полный пресет также опубликован в каталоге.

    Автоматизация сбора контента и отправки сообщений
    После того, как мы реализовали все необходимые пункты, нам осталось только автоматизировать это. И для этих целей отлично подойдет встроенный в А-Парсер Планировщик. Добавляем 3 задачи (периодичность можно указать любую):
    1. сбор ключевых слов (первый пресет) с периодичностью 1 раз в неделю
    2. сбор приложений со скидками (второй пресет) с периодичностью каждые 3 дня
    3. отправка сообщений в канал (третий пресет) с периодичностью 1 раз в час
    [​IMG]
    Тем самым реализуется полностью автоматический сбор контента и отправка сообщений в канал с заданной периодичностью.
    На этом создание канала закончено. А посмотреть его в работе можно здесь: @GPsalesRU.
    Metroid, uomi и fri-lancer нравится это.