Как парсить сообщения Телеграмма python

Здарова, чуваки. Сегодня я расскажу историю одного проекта, который я закончил буквально на днях. Суть его заключалась в следующем: было четыре сайта, с которых нужно было парсить информацию, формировать их в пост, и отправлять через бота в telegram канал. Пообщавшись с заказчиком, я изложил свое видение проекта: для управления постами решили использовать админку Django, парсер и бот, естественно, на Python. Для развертывания будем использовать хостинг Договорившись с заказчиком, мы пожали руки и я приступил к работе.

Часть первая. Модели Django

Я решил начать с разработки базы данных. Согласовав с заказчиком формат постов (одно сообщение с текстом — куча изображений) я набросал следующие модели:

В общем, тут ничего сложного:

MAGAZIN_CHOICES — это список источников, с которых парсится информация. Их тут пять, но парсить мы будем только четыре из них. (потому что пятый в контексте проекта нормально спарсить не получится, с заказчиком сошлись на том, что он будет его вручную постить)

Telethon прослушка чата на Python

date_string — это идентификационное поле. В нем будет содержаться эксклюзивная для поста информация, по которой можно будет определить — старый это пост, или новый

message — это текстовое сообщение, которое будет вкидываться на канал до изображений

base_url — ссылка на источник, с которого были собраны данные. Заказчик попросил для удобства

message_id, chat_id — поля, в которых хранится техническая информация о посте. Чуть позже расскажу, для чего.

datetime_post — время, когда нужно вкинуть пост на канал

magazine_type — ну тут понятно, поле показывающее к какому источнику относится пост

is_posted — поле, которое показывает, находится ли пост уже на канале, или еще нет

date_created — поле, показывающее время создания поста в базе данных, используется для сортировки

Модель Image хранит ссылку на пост и ссылку на изображение.

Часть вторая. Функционал бота

В общем, с форматом постов мы определились: это будет короткое сообщение с кучей изображений. Поэксперементировав в самой телеге с постами и погуглив API было решено использовать три функции:

  • sendMessage для отправки текстового сообщения
  • editMessageText для редактирования текстового сообщения
  • sendMediaGroup для отправки кучи изображений
Еще по теме:  Если удалить аккаунт в Телеграмме можно ли узнать владельца этого аккаунта

Заранее создав бота и получив секретный ключ для его использования я начал тестировать отправку постов через Python. Написав простые функции для отправки тестового сообщения и изображений я залил данные на уже заказанный клиентом хостинг и начал тестирование. Но… Ничего не работало. Заглянув в логи я увидел ошибку «истекло время ожидания» и тут меня пробил холодный пот: телеграм то заблокирован!

Обратившись в поддержку хостера в поисках каких нибудь штатных средств обхода блокировки мне ответили, что им принципиально пофиг на блокировку, но вот их провайдеру очень даже не пофиг, потому сказали, что ничем помочь не могут.

Telegram-бот + парсер на Python

В голове сразу начали крутиться варианты решения проблемы: сказать клиенту, что нужно заказать другой хостинг? Нет, деньги уже потрачены. Заюзать бесплатные прокси и постоянно их менять? Бред. Купить прокси? Не вариант.

Тогда мне в голову пришла следующая идея: можно написать небольшое django приложение, которое будет в роли ретранслятора. Т.е. принимать запросы от моего приложения, перенаправлять их к telegram api, принимать на него ответ и отправлять его моему приложению. Разместить его конечно нужно там, откуда есть доступ к telegram api.

Внимание! Это костыль, и за такое решение у нас в провинции бьют ногами в лицо, поэтому очень не рекомендую повторять это в своих проектах. У меня, благодаря моей врожденной глупости, не осталось выбора. Это был единственный вариант, который не раздувал бюджет. К тому же, посты через бота отправлялись четыре раза в неделю, поэтому этот костыль никак не сыграет на производительности.

В общем, получилось нечто такое:

Немного поясню. Я решил не заморачиваться и для общения с telegram api заюзал библиотеку telepot .

SendPostViews принимает запрос от моего приложения, в котором содержится текст, идентификационная строка и список изображений. Через функцию sendMessage мы отправляем текстовое сообщение на канал. После чего мы смотрим: если изображений больше 10, то делим этот список на части по 10 изображений, и отправляем по очереди. Если нет, то просто отправляем. Сделано это потому, что sendMediaGroup принимает от 2 до 10 изображений, и пост через эту функцию выглядит следующим образом:

Еще по теме:  Что такое т9 в переписке в Телеграмме

Далее мы отвечаем ответом, который мы получили на запрос sendMessage , благодаря чему мы получили message_id и chat_id — идентификационные данные поста, с помощью которых мы можешь его редактировать.

EditPostView выглядит очень просто. Мы получаем из запроса message_id и chat_id , и используем их для редактирования текста в посте. Ответ пересылаем обратно.

Все это дело я по быстрому залил на heroku и протестировал. Работает идеально:

Допиливаем основное приложение

Пришло время реализовать основной функционал в нашем приложении

В наш Topic добавим три функции: is_post , posted и save

is_post скажет нам, готов ли пост по времени к отправке на канал

posted запостит его на канал

save — это переопределение метода сохранения модели. Переопределяем мы его для того, чтобы в случае, если пост уже на канале — отредактировать его не только в модели но и в телеграмме, отправив соответствующий запрос:

Источник: dzen.ru

Пишем парсер Телеграм Чатов на Python

Всем привет, в этой статье мы напишем парсер телеграм чатов. То есть соберем всех юзеров из чата в список/файл. Использовать я буду 2 библиотеки:

Pyrogram

pip3 install pyrogram

Для начала создадим файл конфигурации (config.ini), в который поместим api_id и api_hash. Получить их можно на сайте my.telegram.org.

config.ini

api_id = ваш api_id

api_hash = ваш api_hash

main.py

import pyrogram

Создаем сессию и запускаем клиент (вместо session вы можете вставить любое другое название, для удобства советую называть сессии номером телефона):

app = Client(‘session’)

Далее нам надо определиться с задачей. Можно парсить людей в txt файл, в список, для примера я буду делать и то и то.

Пробегаемся по пользователям чата и добавляем их в список:

for member in app.iter_chat_members(‘aogiri_chat’):

if member.user.username:

id_list.append(member.user.username)

Тут мы пробегаемся по пользователям чата Aogiri, проверяем на существование имя пользователя и добавляем его в список.

Давайте выведем для уверенности список в консоль:

print(id_list)

Вывод будет не очень структурированный, но пока нам такой и не нужен:

Еще по теме:  Входим в чужой аккаунт Телеграм без кода

Теперь давайте соберем всех юзеров из чата в txt файл (users.txt):

f = open(‘users.txt’,’w’)

for user in id_list:

Вот примерное содержимое файла users.txt:

Telethon

Здесь мы сделаем все немного интересней. Мы будем парсить тот чат, в котором написали ‘привет’. И да, тут мы будем делать все в одном файле.

Установим telethon и asyncio (асинхронность):

pip3 install telethon

pip3 install asyncio

import telethon

from telethon import TelegramClient, events

import time

import asyncio

Далее создаем переменные api_id и api_hash:

api_id = ваш api_id

api_hash = ‘ ваш api_hash ‘

app = TelegramClient(‘session’,api_id,api_hash)

app.parse_mode=None

Сразу создадим список users и файл:

f = open(‘users.txt’,’w’)

Создаем функцию, используя async, и включаем ‘прослушивание’ чатов клиентом. Ждем, пока от нашего ID придет сообщение в чат с текстом ‘привет’ и парсим чат в список, записываем в файл:

async def mainest(event):

if event.raw_text.lower()==’привет’ and event.from_id == ваш айди:

async for user in app.iter_participants(int(event.chat_id)):

if user.username:

for u in users:

f.write(str(u) + ‘n’)

app.run_until_disconnected()

Далее заходим в любой чат и пишем привет, в файле users.txt будут все ники пользователей:

Вот мы и написали парсер чатов, используя 2 библиотеки. Документации на них:

Источник: telegra.ph

[Скрипт] Парсер всех юзернеймов с чата на Pyrogram с открытым исходным кодом на Python

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно.
Необходимо обновить браузер или попробовать использовать другой.

Sam Gold

Administrator

Команда форума
09.02.2020 44 7 14 lead.bz

Эта версия бесплатного парсера всех юзернеймов с чата Telegram протестирована и работает на 25.07.2021
В случае каких либо неполадок в будущем, обновлений не ждите, но исходный код полностью открыт и можете доработать сами как вам нужно, есть задел на готовый функционал по инвайту и рассылке в 1 поток
===============
Установка:

Для запуска скачайте и установите python 3.7+

Откройте командную строку (можно набрать в поиске cmd) и введите поочередно команды:

pip install pyrogram
pip install colorama
pip3 install -U tgcrypto
pip install time
pip install os

Далее нужно перейти в директорию через cd
Например
cd C:Userspyrogrambylead.bz

И запустите скрипт командой
python main.py

Источник: lead.bz

Рейтинг
( Пока оценок нет )
Загрузка ...