March 25, 2019

Пост граббер телеграм на 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()
На предпоследней строчке кода табуляция отказывается вставать правильно, надеюсь вы поправите этот нюанс.