Когда у пользователя больше чем одно фото в профиле и нам нужны они все, а метод .download_profile_photo() возвращает только первое найденное фото, мы применяем метод .iter_profile_photos().
Метод .iter_profile_photos(‘@username’, limit=3) получает один обязательный параметр, это имя пользователя, у которого нужно получить все фото, и второй необязательный параметр limit=, который ограничивает количество скачиваемых фото. Еще один необязательный параметр метода — это offset=2, который указывает, сколько фотографий необходимо пропустить, прежде чем скачать первое фото профиля.
.iter_profile_photos(‘@username’, offset=2) — пропустит первые две фото и начнет качать сразу с третьей.
Пример кода ниже, он скачает все фото из профиля и сохранит их в папке с проектом.
from telethon import TelegramClient, events, sync, connection
r_api = 1111
r_hash = ''
with TelegramClient('my', r_api, r_hash, system_version="4.10.5 beta x64") as client:
for x in client.iter_profile_photos('@name_user'):
client.download_media(x)
Давайте теперь немного усложним нашу задачу и скачаем все фотки из профиля. Мы будем качать абсолютно все фотки с профиля, у кого-то может быть одна аватарка, а у кого то их десять. Telegram сохраняет все ваши прошлые аватарки, надеюсь, вы знакомы с этой его особенностью.
Сразу хочу предупредить, что следующий код для новичка может быть сложным в понимании, я постараюсь объяснить максимально просто.
Так же мы используем в этом коде метод .download_media(), который принимает один обязательный аргумент, это объект для скачивания. Второй не обязательный аргумент file=’img/’ , в этом аргументе мы можем передать путь к папке, куда мы хотим сохранять наши файлы, так же можем указать расширение для сохраняемого файла.
from telethon import TelegramClient, events, sync, connection
r_api = 1*******8
r_hash = 'b4******************b'
with TelegramClient('my', r_api, r_hash) as client:
all_user_group = client.get_participants('t.me/name_group')
for user in all_user_group:
for iter_photo in client.iter_profile_photos(user):
client.download_media(iter_photo, file='img/')
Давайте разбираться, что же тут написано.
В переменную all_user_group заносятся все участники группы;
В цикле for/in итерируемся по списку участников группы;
Во вложенном цикле for/in мы итерируемся по всем фото указанного пользователя в методе .iter_profile_photos(user), где user — это итератор внешнего цикла;
На каждой итерации вложенного цикла мы передаём каждую найденную фотографию в метод .download_media(), который загружает переданный ему объект, в нашем случае фотографию.