Основные методы



Важно отметить, что использование API Telegram для парсинга чатов и групп может нарушать политику конфиденциальности и условия использования Telegram. Убедитесь, что вы соблюдаете все правила и рекомендации Telegram при использовании API.

В этом разделе вы познакомитесь с основными методами Pyrogram для парсинга. Почти все эти методы вам понадобятся для успешного решения задач, но на некоторых методах мы ещё остановимся подробнее.

Почти все перечисленные ​​​​​​функции возвращают «генератор(yield)», он выдает сообщения по одному каждый раз, когда вы их запрашиваете, это экономит память и может быть эффективнее, если сообщений много.

<generator object async_to_sync.<locals>.async_to_sync_gen at 0x0000017A21A85940>
# Предположим, что у вас уже есть 'app', который является вашим клиентом Pyrogram.
for message in app.get_chat_history(chat_id):
    print(message.text)   # Это выведет текст каждого сообщения в чате.

app.get_chat(chat_id): Получает информацию о чате по его идентификатору или имени пользователя.

chat_id — Уникальный идентификатор (int) или имя пользователя (str) целевого чата.

# 1. Получить информацию о чате

def main():
    with app:
        group_url = "group_name"
        chat = app.get_chat(group_url)
        print("Chat Info:", chat)
main()

app.get_chat_members(chat_id, query, limit, filter): Получает список участников чата или группы.

chat_id(int | str) — Идентификатор или имя пользователя чата. Это может быть:

  • Целое число для идентификатора чата.
  • Строка с именем пользователя или ссылкой на чат (например, «@username» или «https://t.me/joinchat/…»).

query(str, по умолчанию «») — строка поиска для фильтрации участников чата. Если строка не пустая, будут возвращены только участники, чьи имена или имена пользователей соответствуют запросу.

limit(int, по умолчанию 0) — максимальное количество участников для возврата. Если значение равно 0, будут возвращены все участники.

filter(enums.ChatMembersFilter.SEARCH): — фильтр для применения при поиске участников. Это значение из перечисления ChatMembersFilter, которое может включать в себя различные типы участников, такие как администраторы, участники и так далее. По умолчанию используется ChatMembersFilter.SEARCH, что означает поиск участников на основе строки запроса.

Список фильтров и их описание

Получить информацию об участниках чата:

def main():
    group_url = "name_group"
    with app:
        members = app.get_chat_members(group_url, limit=10)
        for member in members:
            print(member.user.first_name, member.user.id)
main()


#Псевдокод для наглядного использование всех параметров

from pyrogram import Client, enums
app = Client("my_account")
def main():
    group_url = ""  # Имя пользователя или идентификатор чата
    query = "BigData"           # Строка поиска для фильтрации участников по имени
    limit = 10               # Максимальное количество участников для возврата
    filter1 = enums.ChatMembersFilter.SEARCH  # Фильтр для поиска по имени
    filter2 = enums.ChatMembersFilter.ADMINISTRATORS  # Фильтр для поиска администраторов чата
    with app:
        # Поиск по имени
        members = app.get_chat_members(group_url, query=query, limit=limit, filter=filter1)
        for member in members:
            print(f"Найден {member.user.first_name}, ID: {member.user.id}")
        
        # Поиск администраторов
        members = app.get_chat_members(group_url, limit=limit, filter=filter2)
        for member in members:
            print(f"Имя администратора: {member.user.first_name}")

if __name__ == "__main__":

    main()

app.get_chat_member(chat_id, user_id) — получает информацию об определенном участнике чата или группы.

chat_id(int | str) — уникальный идентификатор (int) или имя пользователя (str) целевого чата.

user_id(int | str) — уникальный идентификатор (int) или имя пользователя (str) целевого пользователя. Что касается вас самих, вы можете просто использовать me или self.

Возвращает:
ChatMember – в случае успеха возвращается участник чата.

Получить информацию об участнике чата

def main():
    with app:                                   
        group_url = ""     # Указываем имя группы или канала
        members = app.get_chat_member(            # Получаем информацию об участнике чата
            chat_id=group_url,                    # ID чата или его имя
            user_id='@user'               # ID пользователя или его имя пользователя
        )
        print(members)                            # Выводим информацию об участнике чата
main()

app.get_messages(chat_id, message_ids, reply_to_message_ids, replies) — используется для получения одного или нескольких сообщений из чата. Если message_ids не является списком, возвращается одно сообщение.

Если message_ids является списком, возвращается список сообщений.

chat_id(int | str) — это номер или имя чата, из которого вы хотите получить сообщения. Если вы хотите получить сообщения из своих сохраненных сообщений, используйте слово «me» или «self». Для контакта, который существует в вашей адресной книге Telegram, можно использовать его номер телефона (str).

message_ids(int | Iterable of int, необязательный) — передайте идентификатор одного сообщения (int) или итерацию идентификаторов сообщений (например, список int), чтобы получить содержимое этих сообщений (далее разберём подробно).

reply_to_message_ids(int | Iterable of int, необязательный) — передайте идентификатор одного сообщения или список идентификаторов сообщений, чтобы получить содержимое предыдущих сообщений, на которые вы ответили этим сообщением. Если установлен параметр message_ids, этот аргумент будет проигнорирован.

replies(int, необязательный) — укажите количество последующих ответов для каждого сообщения:

0 — не получать ответы.
-1 — получить все доступные ответы (без ограничений).

По умолчанию: 1.

Получить сообщения из чата

def main():
    with app:
        # Получение одного сообщения по его id:
        message = app.get_messages(chat_id=group_url, message_ids=123)

        # Получение сообщения со всеми связанными ответами:
        message = app.get_messages(chat_id=group_url, message_ids=123, replies=-1)

        # Получение сообщения на которое указанное сообщение стало ответом
        #(без учета цепочки остальных ответов):
        message = app.get_messages(chat_id=group_url, reply_to_message_ids=123, replies=0)

        # Для получения нескольких конкретных сообщений:
        messages = app.get_messages(chat_id=group_url, message_ids=[123, 456, 789])

app.search_messages(chat_id, query, offset, filter, limit, from_user) — ищет сообщения в чате или группе по определенным критериям.

chat_id(int | str) — это номер или имя пользователя чата, в котором вы хотите искать сообщения. Если вы хотите искать в своих сохраненных сообщениях, используйте «me» или «self».,

query(str, необязательный) — это слово или фраза, которую вы хотите найти в сообщениях. Если вы ищете фотографии или видео, этот параметр поможет найти те, у которых есть подписи с этим текстом.

offset(int, необязательный) — это стартовая точка поиска. Если вы поставите 0, поиск начнется с самого первого сообщения. Если вы поставите 10, поиск начнется с 11-го сообщения.

filter(enums.MessagesFilter, необязательный) — это специальный фильтр, который позволяет вам искать определенные типы сообщений, например, только фотографии или только видео.

limit(int, необязательный) — это максимальное количество сообщений, которые вы хотите получить. Если вы не укажете этот параметр, поиск вернет все подходящие сообщения.

from_user(int | str, необязательный) — это номер или имя пользователя человека, чьи сообщения вы хотите найти. Если вы хотите найти сообщения, которые вы отправили, используйте me или self.

#Псевдокод для демонстрации функции с параметрами

from pyrogram import Client, enums
app = Client("my_account")

def search_messages_example():
    chat_id = ""  # ID или username чата
    query = "hello"                      # Строка для поиска в тексте сообщений
    offset = 0                           # Начинаем с первого сообщения
    filter = enums.MessagesFilter.PHOTO   # Фильтруем по сообщениям с фотографиями
    limit = 100                          # Ограничиваем количество найденных сообщений
    from_user = "some_user"              # Ищем только сообщения от пользователя "some_user"
    with app:
        for message in app.search_messages(
            chat_id=chat_id,
            query=query,
            offset=offset,
            filter=filter,
            limit=limit,
            from_user=from_user
        ):
            print(message.text)  # Вывод текста найденного сообщения

if __name__ == "__main__":
    search_messages_example()

app.get_chat_history(chat_id, limit, offset, offset_id, offset_date) — получает историю сообщений из чата или группы.

chat_id(int | str) — это номер или имя пользователя чата(диалога), из которого вы хотите получить сообщения. Если вы хотите получить сообщения из своего личного «облака» (Saved Messages), используйте me или self.

limit(int, необязательный) — это число, которое говорит, сколько сообщений вы хотите получить. Если вы не укажете этот параметр, то по умолчанию будут возвращены все доступные сообщения.

offset(int, необязательный) — это число, которое определяет, с какого сообщения начать подсчет. Это может быть полезно, если вы хотите пропустить определенное количество сообщений в начале списка.

offset_id(int, необязательный) — Это идентификатор сообщения, с которого вы хотите начать получение сообщений. Это полезно, если вы знаете конкретный ID сообщения, с которого хотите начать.

offset_date(datetime, необязательный) — это дата, и если вы укажете ее, то будут возвращены сообщения, которые были отправлены до этой даты. Это полезно, если вы хотите получить старые сообщения до определенного момента времени.

#Псевдокод для демонстрации функции с параметрами

def get_history():
    with app:
        chat_id = ""  # Используйте ID или имя пользователя чата
        limit = 100                          # Количество сообщений для получения
        offset = 0                           # Смещение относительно первого сообщения в истории
        offset_id = 0                        # ID сообщения, с которого начнется получение истории
        offset_date = datetime(2021, 1, 1)   # Получить сообщения, отправленные до 1 января 2021 года
        # Получаем историю чата
        for message in app.get_chat_history(chat_id, limit=limit, offset=offset, offset_id=offset_id, offset_date=offset_date):
            print(message.text)
get_history()

app.get_chat_photos(chat_id, limit) — получает фотографии профиля чата или группы.

chat_id — это номер или имя чата, из которого вы хотите получить фотографии. Если вы хотите свои фотографии, напишите me или self. Если хотите фотографии друга, напишите его номер телефона или имя пользователя.

limit — это количество фотографий, которое вы хотите получить. Если вы не скажете, сколько хотите, программа попытается дать вам все фотографии.

#Псевдокод для демонстрации функции с параметрами

def main():
    with app:
        chat_id = "username"  # Замените на имя пользователя или ID чата
        chat_photos = app.get_chat_photos(chat_id)
        for photo in chat_photos:
            # Скачиваем каждую фотографию профиля
            app.download_media(photo.file_id, file_name=f"{photo.file_id}.jpg")
main()

app.download_media(photo.file_id, file_name=f»{photo.file_id}.jpg») — это метод, который скачивает фотографию по её file_id и сохраняет её локально с указанным именем файла, об этом методе еще будет рассказано подробнее.



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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: