• Можно ли скрапить телеграмм?

    Код
    from pyrogram import Client
    from pyrogram.errors import FloodWait
    import asyncio
    
    
    async def get_post_stats(client: Client, channel_id: int, message_id: int):
        """
        Получает статистику поста: просмотры, реакции и количество комментариев.
    
        Args:
            client: Экземпляр клиента Pyrogram
            channel_id: ID канала
            message_id: ID сообщения
    
        Returns:
            dict: Словарь со статистикой
        """
        try:
            # Получаем сообщение
            message = await client.get_messages(channel_id, message_id, replies=-1)
    
            # Получаем статистику просмотров
            views = message.views if message.views else 0
    
            # Получаем реакции
            reactions = {}
            if message.reactions:
                for reaction in message.reactions.reactions:
                    reaction_id = reaction.custom_emoji_id if reaction.custom_emoji_id else reaction.emoji
                    reactions[reaction_id] = reaction.count
    
            comments_count = await client.get_discussion_replies_count(channel_id, message_id)
            stats = {
                "views": views,
                "reactions": reactions,
                "forwards": message.forwards or 0,
                "comments": comments_count
            }
    
            return stats
    
        except FloodWait as e:
            print(f"Превышен лимит запросов, ждем {e.value} секунд")
            await asyncio.sleep(e.value)
            return await get_post_stats(client, channel_id, message_id)
        except Exception as e:
            print(f"Произошла ошибка: {e}")
            return None
    
    
    # Пример использования
    async def main():
        # Замените на свои данные
        api_id = "0"
        api_hash = "0"
        channel_id = -1 # ID канала
        message_id = 1 # ID сообщения
    
        async with Client("my_account", api_id=api_id, api_hash=api_hash) as app:
            stats = await get_post_stats(app, channel_id, message_id)
            if stats:
                print(f"Просмотры: {stats['views']}")
                print(f"Переслали: {stats['forwards']}")
                print(f"Реакции: {stats['reactions']}")
                print(f"Комментарии: {stats['comments']}")
    
    
    if __name__ == "__main__":
        asyncio.run(main())


    Вывод:
    Просмотры: 1
    Реакции: {'': 1, '❤': 1}
    Комментарии: 1
    Ответ написан
    2 комментария