Как скачать все картинки у списка пользователей Вконтакте через vk api?

Для этой задачи у меня готовы почти все функции, нужно только правильно их соединить (с этим и проблема).
import requests
#считывает id пользователей в список
def get_vkid():
    file = open('vk_id_list.txt', 'r')
    data_list = file.readlines()
    id_list = []
    for line in data_list:
        id_list.append(line.strip())
    return id_list

#Получаю все ссылки на фотографии пользователя, сохраняю ссылки в urllist
token = '......'
owner_id = ...
version = 5.101
offset = 20
count = 50
photo_sizes = 1
response = requests.get('https://api.vk.com/method/photos.getAll',
                    params={
                        'owner_id': owner_id,
                        'access_token': token,
                        'v': version,
                        'count': count
                        })
        
data = response.json()

ll =  data['response']['items']
urllist = []
for l in ll:
    urls = [ d['url'] for d in l['sizes'] if d['type'] == 'r' ]
    urllist.append(urls)


#скачиваю картинки по ссылкам, сохраняю.(эту функцию надо переделать. Нужно, чтоб для каждого id создавалась папка, и в ней хранились все фото этого id)
for url in urllist:
   url = url.strip()
   file_name = url[url.rfind('/')+1:]
   img = urllib.request.urlopen(url).read()
   out = open(file_name, "wb")
   out.write(img)
   out.close()

Нужно циклом пройтись по 'vk_id_list.txt, и для каждого пользователя сохранить все его фото в соответствующую папку. Помогите все это объединить в работающую программу
  • Вопрос задан
  • 3012 просмотров
Решения вопроса 1
Потратил 15 минут своей жизни для тебя )))
Пример приведен для python 2, с использованием библиотеки vk_api
Код, естественно, без обработок ошибок и, вообще, в лоб.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import vk_api
import urllib


LOGIN = 'ТВОЙ ЛОГИН'
PASSWORD = 'ТВОЙ ПАРОЛЬ'

def main():
    # ======= Открываем сессию  с VK =======
    vk_session = vk_api.VkApi(LOGIN, PASSWORD)
    try:
        vk_session.auth()
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return

    vk = vk_session.get_api()
    
    
    # ======= считываем список пользователей =======
    file_id = open(os.path.join(sys.path[0],'id_users.txt'), 'r')
    data_list = file_id.readlines()
    id_list = []
    for line in data_list:
        id_list.append(line.strip())
       
    # ======= начинаем перебирать каждого пользователя =======
    for id_user in id_list:
        
        # создаем директорию с именем пользователя, если нет
        newpath = os.path.join(sys.path[0], id_user)
        if not os.path.exists(newpath):
            os.makedirs(newpath)
        
        # посылаем запрос к VK API, count свой, но не более 200
        response = vk.photos.getAll(owner_id = int(id_user), count = 3)
        
        # работаем с каждой полученной фотографией
        for i in range(len(response["items"])):
            
            # берём ссылку на максимальный размер фотографии
            photo_url = str(response["items"][i]["sizes"][len(response["items"][i]["sizes"])-1]["url"])
            
            # скачиваем фото в папку с ID пользователя
            urllib.urlretrieve(photo_url, newpath + '/' + str(response["items"][i]['id']) + '.jpg')
        

if __name__ == "__main__":
    main()

Файл id_users.txt:
1
11
1111
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы