Парсинг показателей публикаций в тг канале
Есть ли методы в библиотеке 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())