Как считать сообщение из чата телеграмм python
Перейти к содержимому

Как считать сообщение из чата телеграмм python

  • автор:

Парсим данные в Telegram на Python. Часть 2. Читаем и анализируем сообщения из чатов

Пишем парсер для Telegram: собираем сообщения из каналов и чатов.

Иллюстрация: Катя Павловская для Skillbox Media

Антон Яценко

Антон Яценко
Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.

Сегодня мы научимся парсить чаты из Telegram: разберёмся в том, какие модули нам пригодятся, и настроим сбор сообщений. Всё это с помощью библиотеки Telethon для Python.

Это второй урок по парсингу в Telegram. В первом мы создали парсер списка участников каналов и чатов и научились работать с инструментами разработчика API мессенджера. Если вы ещё не читали первую часть, то обязательно начните с неё.

Что у нас сейчас есть?

В первой части урока мы:

  • настроили инструменты разработчика API Telegram и научились использовать их для подключения к клиенту мессенджера;
  • установили и импортировали библиотеку Telethon, позволяющую работать с API Telegram, выбрав нужные нам классы, функции и типы;
  • научились парсить список групп и чатов из мессенджера;
  • написали код для парсинга списка пользователей в чате или мессенджере, сохраняющий их в удобном для чтения и последующего анализа виде.

У нас остаётся одна задача — спарсить сообщения из чатов. Мы сохраним только содержание чатов без дополнительной информации о времени их отправки и самом отправителе. В дальнейшем эти данные можно будет использовать для анализа переписки: например, узнать о самых часто встречающихся словах и предположить самые популярные темы для обсуждения.

Добавляем новые импорты

Откроем в IDE код из первой части урока. Мы продолжим работать с ним, а не будем писать всё с нуля. Чтобы спарсить сообщения из чатов, необходимо импортировать новый метод и функцию в начало кода:

Всё получилось. Откроем нашу директорию. Теперь в ней два файла в формате CSV: members.csv и chats.csv. Откроем последний:

Мы видим, что сохранились не только сами сообщения, но и техническая информация про их id, id запроса и так далее. Такой результат нам не подходит. Вернёмся к циклу while и добавим к методу message параметр message. Он позволяет сохранять только само сообщение.

Теперь всё работает как надо. Сохранились только сообщения без служебной информации о запросах.

Код парсера для Telegram на Python полностью

В двух частях урока по парсингу информации из Telegram мы написали много кода. Посмотрим на него полностью:

from xmlrpc.client import DateTime from telethon.sync import TelegramClient from telethon.tl.functions.messages import GetDialogsRequest from telethon.tl.types import InputPeerEmpty from telethon.tl.functions.messages import GetHistoryRequest from telethon.tl.types import PeerChannel import csv api_id = 18377495 api_hash = "a0c785ad0fd3e92e7c131f0a70987987" phone = "+79991669331" client = TelegramClient(phone, api_id, api_hash) client.start() chats = [] last_date = None chunk_size = 200 groups=[] result = client(GetDialogsRequest( offset_date=last_date, offset_id=0, offset_peer=InputPeerEmpty(), limit=chunk_size, hash = 0 )) chats.extend(result.chats) for chat in chats: try: if chat.megagroup== True: groups.append(chat) except: continue print("Выберите группу для парсинга сообщений и членов группы:") i=0 for g in groups: print(str(i) + "- " + g.title) i+=1 g_index = input("Введите нужную цифру: ") target_group=groups[int(g_index)] print("Узнаём пользователей. ") all_participants = [] all_participants = client.get_participants(target_group) print("Сохраняем данные в файл. ") with open("members.csv", "w", encoding="UTF-8") as f: writer = csv.writer(f,delimiter=",",lineterminator="\n") writer.writerow(["username", "name","group"]) for user in all_participants: if user.username: username= user.username else: username= "" if user.first_name: first_name= user.first_name else: first_name= "" if user.last_name: last_name= user.last_name else: last_name= "" name= (first_name + ' ' + last_name).strip() writer.writerow([username,name,target_group.title]) print("Парсинг участников группы успешно выполнен.") offset_id = 0 limit = 100 all_messages = [] total_messages = 0 total_count_limit = 0 while True: history = client(GetHistoryRequest( peer=target_group, offset_id=offset_id, offset_date=None, add_offset=0, limit=limit, max_id=0, min_id=0, hash=0 )) if not history.messages: break messages = history.messages for message in messages: all_messages.append(message.message) offset_id = messages[len(messages) - 1].id if total_count_limit != 0 and total_messages >= total_count_limit: break print("Сохраняем данные в файл. ") with open("chats.csv", "w", encoding="UTF-8") as f: writer = csv.writer(f, delimiter=",", lineterminator="\n") for message in all_messages: writer.writerow([message]) print('Парсинг сообщений группы успешно выполнен.')

Что дальше?

Библиотека Telethon используется не только для парсинга информации о пользователях и сообщений в каналах и чатах, но и для автоматизации работы с Telegram. Например, администраторы каналов могут создать бота, позволяющего писать сообщения, отправлять стикеры и управлять списком участников. Эти примеры разобраны в документации библиотеки.

Читайте также:

  • Парсим данные в Telegram на Python. Часть 1. Выбираем библиотеку и изучаем подписчиков
  • Тест: угадайте, где эзотерические языки программирования, а где нет
  • Python для новичков: сферы применения и возможности

Как считать сообщения чатов, каналов телеграма по ключевым словам узнавать username отправившего сообщение?

Написал код на python telethon, который выдает сообщения чата, но не понимаю, как отобрать сообщения по ключевым словам и занести в список, который можно будет вывести на экран, а также необходимо username отправившего сообщение. можно ли это реализовать? на данный момент мой код:

from telethon.sync import TelegramClient #настройка подключения api_id = '' api_hash = '' session = 'anon' client = TelegramClient(session, api_id, api_hash) client.start() username = input('Введите username чата: ') chat = client.get_entity(username) data_message = [] part_mes = client.get_messages(chat) print(part_mes) client.run_until_disconnected() 

пробовал также через GetHistoryRequest, не получается, не понимаю, как правильно раскидать то, что выводит part_mes и как отобрать сообщения по ключевым словам

Отслеживать

задан 25 апр 2023 в 20:01

dimonrzhev dimonrzhev

53 4 4 бронзовых знака

0

Сортировка: Сброс на вариант по умолчанию

Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.

  • python
  • telegram
  • telethon

Скрипт для получения сообщений из Telegram (Python, Telethon)

Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Необходимо реализовать скрипт на Python (желательно с использованием Telethon) который будет:

1. Получать на вход список каналов и групп

2. Далее будет слушать переданные группы и чаты и при появлении новых сообщений в них печатать в консоль строку:

Наименование канала/группы, Дата и время добавления сообщения,Имя пользователя, Логин пользователя, Ссылка на аватар пользователя, Текст сообщения;

Все настройки (номер телефона под которым логиниться в Telethon и список каналов/чатов) должен быть вынесен в отдельный файл конфигурации.

Просьба написать стоимость реализации и сроки выполнения

Как получить и проверить сообщение из чата в телеграм на python?

617d327ac4d3e177819717.png

например бот добавлен в чат и админ ответил на сообщение пользователя !go 60
как мне получить найди того пользователя на которого ответили и самого чата
и понять что за число после !go 60

нужно узнать айди чата и айди автора сообщения(get my id)

  • Вопрос задан более двух лет назад
  • 173 просмотра

2 комментария

Простой 2 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *