Парсинг показателей публикаций в тг канале

Есть ли методы в библиотеке Telethon, которые позволяют получить количество просмотров и количество реакций публикации в телеграмм-канале? Если нет, есть ли в принципе библиотека, которая помогает решить эту задачу.

Необходимые данные для парсинга постов в тг канале. Каждая строка - отдельная публикация:

  • дата
  • имя канала
  • url поста
  • кол-во подписчиков
  • кол-во реакций
  • кол-во просмотров публикации

Ответы (1 шт):

Автор решения: Shilgen

У телеграмм есть методы messages.getMessagesViews, channels.getMessages, и messages.getHistory, ниже скрипт с оберткой telethon функциями:

from telethon.tl.functions.channels import GetMessagesRequest
from telethon.tl.functions.messages import GetHistoryRequest, GetMessagesViewsRequest
from telethon.tl.types import InputPeerChannel

# Ваши данные
api_id = 'YOUR_API_ID'
api_hash = 'YOUR_API_HASH'
channel_username = 'YOUR_CHANNEL_USERNAME'  # Например, 'my_channel'

# Инициализация клиента
client = TelegramClient('session_name', api_id, api_hash)

async def main():
    # Подключение к клиенту
    await client.start()

    # Получение объекта канала
    channel = await client.get_entity(channel_username)
    input_channel = InputPeerChannel(channel.id, channel.access_hash)

    # 1. Получение истории сообщений
    history = await client(GetHistoryRequest(
        peer=input_channel,
        offset_id=0,       # С какого сообщения начать
        offset_date=None,  # Альтернатива: начать с даты
        add_offset=0,
        limit=10,          # Количество сообщений для выборки
        max_id=0,
        min_id=0,
        hash=0
    ))
    for message in history.messages:
        print(f"Message ID: {message.id}, Content: {message.message}")

    # 2. Получение реакций на сообщения
    message_ids = [msg.id for msg in history.messages]
    reactions = await client(GetMessagesRequest(
        channel=input_channel,
        id=message_ids
    ))
    for msg in reactions.messages:
        print(f"Message ID: {msg.id}, Reactions: {msg.reactions}")

    # 3. Получение просмотров сообщений
    views = await client(GetMessagesViewsRequest(
        peer=input_channel,
        id=message_ids,
        increment=False  # Увеличивать ли счётчик просмотров
    ))
    for idx, view in enumerate(views.views):
        print(f"Message ID: {message_ids[idx]}, Views: {view}")

# Запуск клиента
with client:
    client.loop.run_until_complete(main())
→ Ссылка