R
R
Ruslan2019-09-12 11:44:14
Python
Ruslan, 2019-09-12 11:44:14

How to download all pictures from the list of Vkontakte users via vk api?

For this task, I have almost all the functions ready, I just need to connect them correctly (this is the problem).

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()

You need to loop through 'vk_id_list.txt' and for each user save all his photos to the appropriate folder. Help to combine all this into a working program

Answer the question

In order to leave comments, you need to log in

1 answer(s)
I
Ivan Mikhailov, 2019-09-13
@Reiza

I spent 15 minutes of my life for you)))
The example is given for python 2, using the vk_api library.
The code, of course, without error handling and, in general, in the forehead.

#!/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()

File id_users.txt:
1
11
1111

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question