При выполнении данной лабораторной работы следует использовать пакет VK (не VK_api).
При выполнении данной лабораторной работы будем использовать `vk_api` для выполнения запросов https://vk.com/dev/photos к социальной сети вконтакте.
Установим данный пакет с помощью следующей команды.
```bash
Код загрузки фотографий приведён ниже.
$ pip install vk
```
Необходимо создать приложение VK для того, чтобы получить доступ к данным. Для этого перейдем на страницу разработчиков VK и в разделе «Мои приложения» создадим новое приложение. Для дальнейшей работы нам потребуется ID приложения и Защищённый ключ.
Войдем в VK.
```python
from urllib.request import urlretrieve
import vk, os, time, math
# Авторизация
login = ''
password = ''
vk_id = 'ID_ВАШЕГО_ПРИЛОЖЕНИЯ'
session = vk.AuthSession(app_id=vk_id,
user_login=login, user_password=password)
vkapi = vk.API(session)
```
```
import os
import sys
import vk_api
import urllib
LOGIN = ''
PASSWORD = ''
target_ids = [123124, -1212412]
# идентификаторы сообщества имеют отрицательные значения.
def auth_handler():
""" При двухфакторной аутентификации вызывается эта функция.
"""
# Код двухфакторной аутентификации
key = input("Enter authentication code: ")
# Если: True - сохранить, False - не сохранять.
remember_device = True
return key, remember_device
def main():
# ======= Открываем сессию с VK =======
vk_session = vk_api.VkApi(LOGIN, PASSWORD,
auth_handler=auth_handler # функция для обработки двухфакторной аутентификации
)
try:
vk_session.auth()
except vk_api.AuthError as error_msg:
print(error_msg)
#return
Для удобства, входными данными можно указать ссылки на альбомы. Только целиком url не подойдёт, понадобится id хозяина альбома (группы или человека) и id самого альбома, которые и можно достать из ссылки. К примеру, в https://vk.com/album-54530371_212428070 id владельца (в данном случае сообщества) это -54530371, а id альбома – 212428070. Следует обратить внимание, если загружать из альбома сообщества, то «-» (дефис) перед id владельца обязателен.
vk = vk_session.get_api()
tools = vk_api.VkTools(vk_session)
Получаем на вход ссылку на альбом, затем разбираем её и раскладываем по переменным `album_id` и `owner_id` соответствующие `id`.
# ======= начинаем перебирать каждого пользователя =======
for target_id in target_ids:
Далее нужно получить количество фото, а также инициализировать переменные для статистики.
# создаем директорию с именем пользователя, если нет
newpath = os.path.join(sys.path[0], id_user)
if not os.path.exists(newpath):
os.makedirs(newpath)
```python
# посылаем запрос к VK API, count свой, но не более 200
Проблема при загрузке большого количества фотографий в том, что за один запрос нельзя забрать больше 1000 штук, в то время как в альбоме их может быть десяток тысяч.