Пост граббер телеграм на python
Итак, начать надо с регистрации приложения телеграм. Как это сделать вы можете узнать прочитав данную статью : Клик
Итак, начнём как обычно с импортов. Нам понадобиться лишь одна библиотека:
Telethon==1.4.1
Сами импорты:
from telethon import functions, types from telethon.sync import TelegramClient from telethon import TelegramClient, events, sync
затем мы указываем наш api_id, api_hash.
api_id = 111111 api_hash = "xxxxx123xxxxx123xxxxx123xxxxx123"
Затем создаем клиент:
client = TelegramClient("test", api_id, api_hash) client.start() print("STARTED")
Далее нам необходимо подписаться на каналы с которых будет происходить граббинг постов и указать их. Мы будем получать обновления с каждого канала который запишем.
@client.on(events.NewMessage(chats=["Chanel1", "Chanel2", " Chanel3", "Chanel4", "chanel5"]))
Далее мы создаем хендлер который будет реагировать на сообщения с каналов.:
async def normal_handler(event): if isinstance(event.chat, types.Channel):
isinstance мы проверяем что бы это был объект чата, типа канал.
Теперь же для своего удобства я вынесу юзернейм канала с которого был пост в отдельную переменную
username = event.chat.username rdy = "@" + str(username)
Теперь займемся самой публикацией поста.
await client.send_message("https://t.me/joinchat/AAAAAxxxxxxxxx1", rdy) await client.send_message("https://t.me/joinchat/AAAAAxxxxxxxxx1", event.message)
Для себя я сделал что бы перед каждым постов сначала публиковался канал откуда был взят пост а затем сам контент.
Закрываем это всё с помощью :
client.run_until_disconnected()
Мой код не идеален, вы всегда можете его модернизировать и вообще сделать в разы лучше.
Полный листинг программы:
from telethon import functions, types from telethon.sync import TelegramClient from telethon import TelegramClient, events, sync api_id = 11111 api_hash = "xxx111xxx1111xxx111xxx111" client = TelegramClient("test", api_id, api_hash) client.start() print("STARTED") @client.on(events.NewMessage(chats=["Chanel1", "Chanel2", "Chanel3", "Chanel4", "chanel5"])) async def normal_handler(event): if isinstance(event.chat, types.Channel): username = event.chat.username rdy = "@" + str(username) await client.send_message("https://t.me/joinchat/AAAAAxxxxxxxxx1", rdy) await client.send_message("https://t.me/joinchat/AAAAAxxxxxxxxx1", event.message) client.run_until_disconnected()
На предпоследней строчке кода табуляция отказывается вставать правильно, надеюсь вы поправите этот нюанс.