Граббер постов из чужих каналов Telegram в свой

DirectX

Интересующийся
Интересующийся
DirectX

DirectX

Интересующийся
Интересующийся
Сообщения
59
Реакции
129
В этой теме мы разберем:

  1. Установка библиотеки Telethon.
  2. Код скрипта.
  3. Получение / Регистрация API Telegram.
  4. Получение id каналов.
  5. Функция граббера.
  6. Запуск скрипта.
Здесь мы не будем создавать бота, а используем для этого обычный аккаунт telegram.
Желательно использовать купленный аккаунт, т.к не следуя советам приведенным в этой теме, ваш личный акк отлетит в бан

1. Установка библиотеки Telethon.

  • Нажать сочетание клавиш win+R
  • В появившемся окне прописываем: cmd жмем Enter
  • В следующем окне вводим pip install telethon
  • Дожидаемся завершения установки.
Создаем файл с любым удобным названием формата " .py " и редактируем любом текстовым редактором поддерживающем подсветку синтаксиса.

2. Код скрипта.
Копируем код ниже и редактируем следуя теме

from telethon import TelegramClient, events
import asyncio

api_id = 2281337
api_hash = '2d4zalupa737aa228e62a1f1337fd6a13'

my_channel_id = -1001345345836
channels = [-10012345353430, -100327473252340]

client = TelegramClient('myGrab', api_id, api_hash)
print("GRAB - Started")


@client.on(events.NewMessage(chats=channels))
async def my_event_handler(event):
if event.message:
await client.send_message(my_channel_id, event.message)

client.start()
client.run_until_disconnected()


Самое первое и важное в коде после импорта библиотек вы должны заметить api_id и api_hash, а так-же id каналовВ коде выше они вымышленны. заменить на своё!

Важно! api_id и api_hash это данные вашего аккаунта, они не должны попасть к третьим лицам, иначе вы потеряете аккаунт.

3.Получение / Регистрация API Telegram.
Где взять api_id и api_hash?: на оф.сайте >


На приложение придет код который вы должны ввести далее.




Напомню еще раз:
api_id и api_hash это данные вашего аккаунта, они не должны попасть к третьим лицам, иначе вы потеряете аккаунт.

Полученные api_id и hash заменяем в коде на свои.
Важно: api_hash в коде обязательно должен быть за кавычками, 'одинарными' или "двойными" - разницы нет.

Далее ID каналов.
id своего канала и id канала откуда будем брать посты:

my_channel_id = -1001345345836 #id нашего канала
channels = [-10012345353430, -100327473252340] #id каналов, откуда будем брать материал.
Если ваш канал публичный т.е имеется ссылка в виде @MoykAnal228, Вместо ID просто вставляем его туда за кавычки

my_channel_id = '@MoykAnal228'
тоже самое и с переменной "channels" но давайте рассмотрим ее поближе

channels = [-10012345353430, -100327473252340]
как видите здесь указано id двух каналов, т.е. посты будут браться одновременно с двух каналов

Если вы просто ленитесь и у одного из каналов есть @ссылка можно сделать так:

channels = ['@tut_user', -100327473252340]
Туда-же можно вставлять неограниченное число id каналов через запятую.
если каналы активные, добавляйте не более 8 каналов, т.к из-за флуда в свой канал телеграм выдаст ограничение на отправку сообщений на 480 ± секунд, дальше больше и бан.

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

my_channel_id = 'me'
в этом случае с нужного канала сообщения будут отправляться к вам в сохраненки.

4. Получение id каналов.
Открываем диалог с ботом в телеграм: @getIDs_bot
пересылаем любой пост с нужного канала боту, после чего он выдаст:

И следующее то, что нас больше всего интересует, что мы нашим кодом будем пересылать, и как пересылать.

5. Функция граббера.
За это отвечает часть кода:

if event.message:
await client.send_message(my_channel_id, event.message)
В этом случае копируется любой пост (фото, видео, аудио, текст) целиком, вместе с описанием и отправляется в ваш канал.
Не пересылается а именно отправляется в канал как полноценный новый пост.
Пример работы
d4d7fc35-7a8d-4d3b-81f1-1a1ad6ae58f9.png
Но что если нам нужно только фото, и мы хотим своё описание к фото?
заменяем эту часть кода на следующий:

if event.message.photo: await client.send_file(my_channel_id, file=event.message, caption="тут ваш текст")
Скрин работы
3df1b8e5-a0fc-496b-afac-f23af0a2ab10.png
Здесь всё просто рассмотрим аргумент event.message

event.message #-берет все посты
event.message.media #-только медиа контент исключая текст
event.message.photo #-только фото
event.message.video #-только видео
event.message.audio #-только музыка
заменяем на нужный нам вариант
Если вам нужен только текст, для отправки самого 'сообщения 'используйте

await client.send_message(my_channel_id, event.message)
Если медиа контент:

await client.send_file(my_channel_id, file=event.message, caption="свой текст")
Если же вам нужно и то и другое просто вставьте еще одну проверку ниже

if event.message.text:
await client.send_message(my_channel_id, event.message)
if event.message.video:
await client.send_file(my_channel_id, file=event.message)
======
Отправка Альбомов (сгруппированных фото)
И так, разобравшись со всем что написано до этого момента, и протестировав скрипт вы наверняка обнаружите что
сгруппированные сообщения разбиваются и отправляются по одному, тут же всё элементарно просто
добавим следующий кусок кода к тому что выше

@client.on(events.Album(chats=channels))
async def handler(event):
await client.send_message(
chat,
file=event.messages,
message=event.original_update.message.message,
)
Должно получиться так:

from telethon import TelegramClient, events

api_id = 2281337
api_hash = '2d4zalupa737aa228e62a1f1337fd6a13'

my_channel_id = -1001345345836
channels = [-10012345353430, -100327473252340]

client = TelegramClient('myGrab', api_id, api_hash)
print("GRAB - Started")


@client.on(events.NewMessage(chats=channels))
async def my_event_handler(event):
if event.message:
await client.send_message(my_channel_id, event.message)

@client.on(events.Album(chats=channels))
async def handler(event):
await client.send_message(
my_channel_id,
file=event.messages,
message=event.original_update.message.message,
)

client.start()
client.run_until_disconnected()
Если хотите поменять текст у альбома

message=event.original_update.message.message
редактируем следующим образом

message='Ваш текст для альбома'
Можно сказать на этом всё!
Сохраняем скрипт и запускаем, наслаждаемся.

6.Запуск скрипта.Важно!
Если вы впервые регаете api телеграма, запустите скрипт
у вас спросит номер телефона от аккаунта, введите его и затем код отправленный вам в приложение, эта процедура делается всего один раз.

Здесь же создается еще один файл в данном случае myGrab.session
название файла берется из

client = TelegramClient('myGrab', api_id, api_hash)
этот файл всегда должен находится в одной директории со скриптом

и как только появится "GRAB - Started" - Закройте скрипт и запустите его только через пару часов.
иначе ваш аккаунт может отлететь в бан.
После этого запускайте и держите скрипт рабочим хоть 24/7
 

Вложения

Последнее редактирование модератором:
  • Like
Реакции: ZerO

mick541

Заглянувший
Заглянувший
M

mick541

Заглянувший
Заглянувший
Сообщения
7
Реакции
0
Так а где сам граббер
 

DirectX

Интересующийся
Интересующийся
DirectX

DirectX

Интересующийся
Интересующийся
Сообщения
59
Реакции
129
Так а где сам граббер
Пишите, всё в статье расписано, весь код. Статья находится в разделе уроки и обучение, чтобы вы сами сделали, а не за вас кто то делал)
 

kozyakai

Заглянувший
Заглянувший
K

kozyakai

Заглянувший
Заглянувший
Сообщения
2
Реакции
0

Bug

Through thorns to stars
Администратор
Bug

Bug

Through thorns to stars
Администратор
Сообщения
1,464
Реакции
2,876
DirectX, Для чего хайд на всю статью?
Есть bb-code для красивого оформления кода, а не просто копипаста
 

DirectX

Интересующийся
Интересующийся
DirectX

DirectX

Интересующийся
Интересующийся
Сообщения
59
Реакции
129
DirectX, Для чего хайд на всю статью?
Есть bb-code для красивого оформления кода, а не просто копипаста
Ну я к сожалению не смогу уже отредактировать
 

Сверху Снизу