Telegram. Бот для автопостинга картинок.

Небольшой кейс по созданию канала с картинками, который будет наполняться без участия автора. При этом, все изображения для канала будут изначально под свободной лицензией, т. е. контент не будет нарушать ни чьих авторских прав. В процессе работы скрипта, не нужно будет скачивать и хранить где-либо изображения. Система всё сделает сама — сходит на сайт за картинкой, опубликует её в Telegram канале.

Для применения кейса необходимы базовые знания работы в терминале любой операционной системы Linux, понимание того как настраиваются периодические задания с помощью планировщика. Так же, для запуска скриптов понадобится либо сервер (самый простой, виртуальный), либо аккаунт на хостинге, в котором позволено будет по cron’у запустить скрипт.

Автор прекрасно понимает, что таких каналов в Telegram уже огромное количество, и что они не особо-то и нужны, однако автору было нечего делать, не спалось и хотелось чем-то себя развлечь.

Итак, для организации самонаполняемого канала, нам нужно три вещи:

  1. Скрипт, которым мы получим список тематических ссылок с сайта stocksnap.io.
  2. Telegram бот, полученный от @BotFather и добавленный в наш канал.
  3. Скрипт, который будет постить в канал картинку через бота.

Получаем список ссылок.

Материал для публикации мы будем получать с сайта stocksnap.io, все изображения на этом сайте распространяются под лицензией CC0, а значит проблем с авторскими правами у нас не случится. Список ссылок на изображения в нужной категории мы получим с помощью скрипта, который через API сайта заберёт нужную информацию. Результатом работы скрипта будет файл, в котором будет список прямых ссылок на изображения.

Сам скрипт можно посмотреть здесь.

Запускается он вот так, с параметрами:

# ./downloader food 1

./downloader — имя скрипта.
food — категория, из которой мы будем собирать изображения. Найти все доступные категории можно здесь https://stocksnap.io/popular
1 — страница, с которой скрипт начнёт собирать информацию. На сайте организован постраничный вывод изображений. Как только пользователь докручивает колесо мыши до нижней части страницы, ему подгружается новая порция картинок. Каждая порция картинок, во внутренностях сайта описана на отдельной странице. Что бы не заморачивать себя и получить все изображения из категории здесь можно всегда использовать единичку.

В процессе работы, скрипт с помощью wget будет по API скачивать служебную информацию, затем из всех страниц со служебной информацией, будет сформирован файл, содержащий список ссылок с именем food.url.list. Этот файл будет использоваться нашим ботом для постинга изображений в канал. Так же, этот файл, при необходимости, можно использовать для скачивания всех изображений себе (для работы бота это не обязательно).

Краткое резюме — мы запускаем скрипт и когда он отработает, получаем файл со списком ссылок на изображения нужной нам категории.

Регистрируем бота в Telegram.

Добавляем себе контакт @BotFather, начинаем работу с ним. Заводим себе нового бота командой /newbot, вводим его имя, его логин и получаем токен (далее в статье НАШТОКЕН), который нужен для работы с ботом из скрипта для постинга. При необходимости, добавляем боту аватар, дополнительно настраиваем его, но это уже по желанию.

Когда бот будет готов, добавляем его в наш канал администратором. После того как бот будет добавлен в канал, узнаем ID канала, который нам так же потребуется для работы скрипта. ID узнаём следующим образом:

  1. После того как бот добавлен администратором, отправляем в канал любое сообщение.
  2. В браузере переходим по ссылке https://api.telegram.org/botНАШТОКЕН/getUpdates и видим текст, в котором находим кусок вида:
"chat":{"id":-1013332055484,

В данном случае, нужным нам ID канала будет -1013332055484 (именно так, со знаком минус).

Краткое резюме второго этапа — мы создали бота, получили его токен (НАШТОКЕН), добавили бота к себе в канал, узнали ID канала.

Постим изображения в канал с помощью бота.

Для постинга изображений мы будем использовать telegram bot api. Через бота, мы будем оформлять пост-картинку и отправлять его в канал с отключенным уведомлением. Такие запросы можно делать из браузера, но для скрипта мы используем wget (да, да, можно и curl, но я люблю wget) Вручную это выглядит примерно так (токен тут не существующий если что):

# wget "https://api.telegram.org/bot414612848:AAGs2pMUNCDIQIrHrABU8xYXGxXVzPcRSrI/sendPhoto?chat_id=-1013332055484&photo=https://d2lm6fxwu08ot6.cloudfront.net/img-thumbs/960w/6AE3CDF29F.jpg&caption=@superchannel&disable_notification=1"

Разберём что бы было понятно:

sendPhoto — отправляем изображение.
chat_id=-1001132088554 — в наш канал.
photo= — изображение берём по ссылке.
caption= — добавляем текст к изображению.
disable_notification= — отключаем уведомление для этого сообщения.

Если всё сделано верно, то наш бот, которого мы добавили в канал администратором, запостил изображение, с названием нашего канала в подписи к картинке. Теперь нам остаётся этот процесс автоматизировать.

Для этого мы будем использовать следующий скрипт. Разберём его самые важные моменты ниже.

У меня на сервере, создана следующая структура для работы этого скрипта:

/opt/telegram/ — директория в которой происходит работа
/opt/telegram/superchannel/ — директория в которой лежит скрипт постинга и файл со ссылками
/opt/telegram/superchannel/food.url.list — файл со ссылками
/opt/telegram/superchannel/postbot — скрипт для постинга

В самом скрипте, используются следующие переменные:

botToken — полученный нами НАШТОКЕН.
channelId — ID нашего канала.
channelName — имя нашего канала.
postImage — получение случайной ссылки из файла /opt/telegram/superchannel/food.url.list

Эти параметры вам нужно будет настроить в соответствии с вашим окружением и расположением файлов на сервере.

При запуске, скрипт выбирает случайный адрес изображения из файла food.url.list и отправляет в канал пост с ним. Из общего списка этот адрес удаляется, дабы избежать дублей в дальнейшем.

Скрипт не забываем сделать исполняемым:

# chmod +x /opt/telegram/superchannel/postbot

Резюмирую третью часть — у нас есть сервер, на котором в нужной нам директории лежит скрипт постинга и файл со ссылками. В скрипте верно прописаны токен, ID канала, название канала и путь до файла. При ручном вызове скрипта, бот в канале постит одну картинку:

# /opt/telegram/superchannel/postbot

Автоматизируем постинг в нужное нам время.

Для автоматизации постинга достаточно просто добавить соответствующее задание в cron. Для редактирования заданий прямо из консоли выполняем команду:

# crontab -e

В открывшемся редакторе (какой будет редактор зависит от настроек админа сервера) мы вводим, например такое задание:

00 08,13,18 * * * /opt/telegram/superchannel/postbot

Сохраняем изменения и выходим из редактора.

Текущее правило будет запускать наш скрипт каждый день в 08, 13 и 18 часов по серверному времени. В это время на канале будет публиковаться один пост-картинка.

Подходя к завершению и резюмируя всё.

Мы идём на сайт фотостока и выбираем там нужную категорию. С помощью скрипта-загрузчика мы получаем список адресов картинок нужной нам категории сайта stocksnap.io. Затем, скрипт-бот выбирает случайную ссылку на изображение и постит её в наш канал, в заданное планировщиком время. Всё происходит без нашего участия. Нам остаётся только заниматься раскруткой канала (если такие каналы сегодня имеет смысл раскручивать конечно).

Примеры созданных и работающих таким образом каналов:

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

Вот такой вот кейс. Пользуйтесь, если он покажется вам полезным.

@SysadminNotes | https://sysadmin.pm

6 thoughts on “Telegram. Бот для автопостинга картинок.

  1. Спасибо за статью. Можно посмотреть как выглядит конечный скрипт? и возможен ли повтор при выборе ссылки?или каждый раз будет выбрана другая?

    1. Ссылка на скрипт постинга есть в этой заметке. Один из скриптов для парсинга картинок имеется здесь же. Ещё один скрипт можно посмотреть тут: https://sysadmin.pm/pexels-stock-downloader/

      Повторов быть не должно, так как при публикации ссылка из файла-базы удаляется.

      1. ссылки то есть, только не понятно в каком формате сохранять скрипт, как он должен в конечном виде выглядеть и тд. Например вы пишете «Скрипт не забываем сделать исполняемым # chmod +x /opt/telegram/superchannel/postbot», а куда и перед чем это вставлять?Просто я ничего в этом не понимаю =) Прошу вашей помощи!

  2. Автор спасибо за труды, не можете ли вы объяснить как сделать бота который присылает случайное изображение из уже подготовленных. Спасибо

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *