• XSS.stack #1 – первый литературный журнал от юзеров форума

[Telegram] Граббер постов из чужих каналов в свой (инструкция)

ZERO

RAID-массив
Пользователь
Регистрация
04.12.2018
Сообщения
62
Реакции
39
И так, сегодня мы рассмотрим тему как грабить посты, я такое заказывал до этого, на языке Python с постоянным мониторингом каналов и пересылки статей в мои.

В этой теме мы разберем:
  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? на оф.сайте > Authorization


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

5995d8a2-03df-411b-b371-67f088fbac83.png
c9b8a939-805a-40ea-8798-484c9586f5e7.png


65eb6b64-de6d-4ed3-b911-b08d8a52d21d.png


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

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

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

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


my_channel_id = '@Moykanal'

тоже самое и с переменной "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,
)

Должно получиться так:

PHP:
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

На этом всё, и хорошего вам настроения.
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх