Ответы пользователя по тегу Pyrogram
  • Как получить каналы, на которые нужно подписаться в розыгрыше премиума?

    Laiwers
    @Laiwers
    Python, Telegram, Parsing
    Интересная задача. Сразу скажу что через Pyrogram сделать не получиться из-за отсутствия обновлений. Ну а вот через Telethon легко.
    Рассмотрим на примере. Возмём Телеграм канал сборник розыгрышей (канал) и оттуда возмём любой розыгрыш.
    Нам нужно получить информацию об этом сообщении и это делается с помощью get_messages и параметра ids. Далее извлекаем всю информацию о розыгрыше по ключу media:
    MessageMediaGiveaway(
        channels=[2037207714, 1218160262, 1404903079, 1849389623],
        quantity=1,
        months=3,
        until_date=datetime.datetime(2024, 3, 3, 17, 30, 9, tzinfo=datetime.timezone.utc),
        only_new_subscribers=False,
        winners_are_visible=True,
        countries_iso2=[],
        prize_description=None
    )

    Уже видно что нужные каналы лежат в channels. Остаётся в цикле пройти по списку и подписаться на каждый канал.
    Весь код:
    from telethon import TelegramClient
    from telethon.tl.functions.channels import JoinChannelRequest
    
    api_id = 12345678
    api_hash = "0123456789abcdef0123456789abcdef"
    
    client = TelegramClient('account', api_id=api_id, api_hash=api_hash, device_model="iPhone 55 Pro",
                            system_version="4.16.30-vxCUSTOM", app_version="1.10.8")
    
    async def main():
        messages = await client.get_messages("premiumlob", ids=979)
        for channel in messages.media.channels:
            await client(JoinChannelRequest(channel))
    
    with client:
        client.loop.run_until_complete(main())
    Ответ написан
    Комментировать
  • Какой должна быть скорость парсера pyrogram?

    Laiwers
    @Laiwers
    Python, Telegram, Parsing
    В офицальной документации есть упоминание об увеличении скорости (ссылка). Там говорится про uvloop и он увеличивает работу asyncio в 2-4 раза, а значит и работу Pyrogram. Я пробовал его использовать, но столкнулся с проблемой: uvloop не работает на Windows. Так что если у вас парсер работает на Windows - ничего не выйдет.
    Асинхронность самый быстрый вариант.
    Ответ написан
    Комментировать
  • Pyrogram join chat?

    Laiwers
    @Laiwers
    Python, Telegram, Parsing
    Почитайте офицальную документацию Pyrogram: https://docs.pyrogram.org/intro/quickstart
    В вашем случае код будет выглядить так:
    from pyrogram import Client
    
    # Поменяйте id и hash на свои
    api_id = 12345
    api_hash = "0123456789abcdef0123456789abcdef"
    
    app = Client("Igor", api_id, api_hash)
    
    async def main():
        async with app:
            # У открытого канала/группы принимается не ссылка, а username
            # Документация: https://docs.pyrogram.org/api/methods/join_chat
            links = ["@piarlg"]
            for chat in links:
                await app.join_chat(chat)
    
    app.run(main())
    Ответ написан
    Комментировать
  • Не удается вступить в канал телеграм, почему?

    Laiwers
    @Laiwers
    Python, Telegram, Parsing
    Покопавшись в документации и коде Pyrogram, стало понятно, что это тот случай, когда ошибка возникает не потому что что-то случилось, а потому что всё хорошо. Даже если перевести то, что написано в ошибке становится понятно, что "Запрос на присоединение к этому чату или каналу был успешно отправлен".
    Единственное решение - использовать try except. В Pyrogram кроме исключения InviteRequestSent, ещё есть исключение InviteHashExpired, которое вызывается, когда ссылка уже не действительна.
    Пример кода:
    from pyrogram.errors.exceptions.bad_request_400 import InviteRequestSent, InviteHashExpired
    
    ...
    
    try: 
        await app.join_chat("https://t.me/+xxxxxxxxxxxxx")
    except InviteRequestSent:
        print("Запрос отправлен!")
    except InviteHashExpired:
        print("Ссылка не действительна!")
    Ответ написан
    Комментировать
  • Есть ли в pyrogram функции, которых нет в telethon?

    Laiwers
    @Laiwers
    Python, Telegram, Parsing
    Все библиотеки, которые работают с юзерботами, обращаются к Telegram API. То есть все они имеют одинаковые методы для работы с Телеграмом, но отличаються синтаксисом и т.п.
    Проблема заключается в том, что какие-то библиотеки последний раз обновлялись давно. Вот например последнее обновление Pyrogram было аж 10 месяцев назад (Github), а вот Telethon обновляется постоянно (Github).
    Для ответа на вопрос что лучше, я потестил Telethon и понял, что в нём очень сложно разобраться. Сначала я думал, что в документации ничего не сказано про методы, но потом нашёл Telethon API с примерами кода и разобраться было чуть легче.
    Но проблем было гораздо больше с установкой. Чтобы установить Telethon нужно сначало установить wheel. Потом после ввода номера телефона и создания файла сессии, у меня отсоединился аккаунт от других устройств (решение).
    И последнее замечание - к сессиям. Во-первых сессия, созданная Pyrogram, не может использоваться в Telethon и наоборот. Во-вторых Pyrogram создаст файл один раз, и потом можно будет обращаться только по имени этого файла, а Telethon всегда нужны будут api_id, api_hash, device_model, system_version и app_version.
    Перед нами выбор: простой синтаксис и документация, но не обновлённый - Pyrogram или пройти через несколько проблем с началом работы, но содержащий новые методы - Telethon. Ответ простой. Всегда используй Pyrogram, но если будут нужны новые методы, которых нет в Pyrogram, то используй Telethon.
    Ответ написан
    Комментировать