Блок Описание, или Description, или «О себе» имеется у каждого профиля, но некоторые пользователи ее просто не заполняют.
В прошлых уроках для получения информации о пользователе мы использовали метод .get_participants(), который возвращает TotalList со всеми участниками группы. У этого метода есть один серьезный недостаток: он не работает в группах с числом участников больше 4 000. Поэтому нам необходим другой метод, а именно .iter_participants(channel), который принимает в аргументы ссылку на группу.
Метод .iter_participants(channel) итерирует по участникам группы, сразу отдавая результат, поэтому это то, что нам нужно. Также следует отметить, что метод .get_me(), который возвращает информацию о пользователе, не имеет поля about, в котором хранится информация «О себе». Чтобы получить доступ к этому полю, нам потребуется импортировать еще один модуль, который работает с пользовательским профилем и имеет больше полей для работы с ними.
Импортируем:
from telethon.tl.functions.users import GetFullUserRequest
Синтаксис использования: client(GetFullUserRequest(user)) , где user — это ссылка на профиль пользователя.
Код ниже выполняет итерацию по всем участникам группы, и собирает информацию хранящуюся в поле «О Себе», с помощью атрибута about класса TelegramClient.
from telethon import TelegramClient, events, sync, connection
from telethon.tl.functions.users import GetFullUserRequest
r_api = 1111
r_hash = ''
with TelegramClient('my', r_api, r_hash, system_version="4.10.5 beta x64") as client:
users = client.iter_participants('name_group')
for user in users:
user_full_about = client(GetFullUserRequest(user))
print(user_full_about.full_user.about)
Давайте посмотрим на все поля атрибутов возвращаемого объекта у класса GetFullUserRequest(). Обратите внимание, что возвращаемый объект похож на объект из первого урока, только там он назывался User(), а тут название UserFull(), это нам красноречиво намекает на то, что UserFull() обладает расширенным количеством полей. Чтоб не повторяться, я выделил лишь те, которые отличаются от объекта User(). Для парсинга нам почти всегда нужно всего одно поле, about, с остальными вы можете познакомиться самостоятельно.
UserFull(
user=User(
id=2********2,
is_self=True,
contact=True,
mutual_contact=True,
deleted=False,
bot=False,
bot_chat_history=False,
bot_nochats=False,
verified=False,
restricted=False,
min=False,
bot_inline_geo=False,
support=False,
scam=False,
apply_min_photo=True,
fake=False,
access_hash=32**************2,
first_name='Сергей',
last_name=Сергеев,
username='Name',
phone=+7**** ,
photo=UserProfilePhoto(
photo_id=9*************5,
dc_id=2,
has_video=False,
stripped_thumb=b'\****\x08\x0b\xedA!9\xcf~\xd4QE+\xb1(\xa7\xd0'),
status=UserStatusRecently(),
bot_info_version=None,
restriction_reason=[],
bot_inline_placeholder=None,
lang_code=None),
settings=PeerSettings(
report_spam=False,
add_contact=False,
block_contact=False,
share_contact=False,
need_contacts_exception=True,
report_geo=False,
autoarchived=False,
invite_members=False,
geo_distance=None),
notify_settings=PeerNotifySettings(
show_previews=None,
silent=None,
mute_until=None,
sound=None),
common_chats_count=3,
blocked=False,
phone_calls_available=True,
phone_calls_private=False,
can_pin_message=True,
has_scheduled=False,
video_calls_available=True,
about='Описание профиля',
profile_photo=Photo(
id=9**************5,
access_hash=5***********48,
file_reference=b'\x00b\xa4\xea\xf3w&ji\xd0|\xf4\x10\xdc+\xfe\\<`\x1d\xbe',