Telegram. Публикация в канал через API

На удивление оказалось, что публикация в канал telegram через API — это довольно простой процесс. Тут не надо проходить OAuth. Токен выдаётся боту, который состоит в списке администраторов канала. Через него происходят все публикации.

Последовательность действий для программного создания публикаций в канале telegram:

  • Создаём бота у @BotFather, сохраняем токен бота в функции get_token()
  • Создаём канал, сохраняем адрес канала (с @ перед названием) в функции get_channel_id()
  • Добавляем бота администратором в канал
  • Публикуем текст через функцию send_text(text), а фото через функцию send_photo(text, photo)

Описание API: core.telegram.org/bots/api

Код на Python:

import requests



def get_token():

    """Возвращает токен, который был получен при создании бота"""

    return '61140174:GjSbsn7mV.....MKuTxYL' # тут надо вставить свой токен



def get_channel_id():

    """Возвращает id канала, куда надо публиковать сообщения"""

    return '@название_канала' # тут надо вставить своё название канала



def send_text(text):

    """Отправляет текстовое сообщение в канал телеграма

    :param text: текст

    """

    try:

        return requests.post(

            url=f'https://api.telegram.org/bot{get_token()}/sendMessage',

            data={'chat_id': get_channel_id(), 

                  'text': text}

        ).json()

    except Exception as error:

        return error

    

def send_photo(text, photo):

    """Отправляет фото в канал телеграма

    :param photo: поный путь к файлу изображения в системе

                  Условия:

                  - не больше 5 мегабайт,

                  - отношение ширины/высоты (и наоборот) не больше 20

                  - высота менее 10000 пикселей

    :param text: текст, который будет подписью к фото

    """

    try:

        return requests.post(

            url=f'https://api.telegram.org/bot{get_token()}/sendPhoto',

            data={'chat_id': get_channel_id(), 

                  'caption': text},

            files={'photo': open(photo,'rb')}

        ).json()

    except Exception as error:

        return error



2023-03-05T05:00:49
Интернет