VK API на Python: часть 1, выгружаем все фото из альбома

3
30004
Добавить в избранное

Этой статьей мы открываем небольшую серию материалов по VK API. Все что вам понадобится для работы – базовые знания Python.

Настройка

Для работы мы будем использовать Python третьей версии и модуль VK для работы c api вконтакте. Установить модуль можно через pip:

На *nix системах могут возникнуть проблемы с установкой через pip, поэтому вот еще один способ установки. Скачайте исходники, положите их в удобный каталог и исполните в терминале:

Чтобы не нагружать код сторонними библиотеками, для загрузки фото будем использовать базовую urllib.

Для начала залогинимся.

Учтите, что для работы с VK API одного только модуля для питона недостаточно, нужно создать еще и приложение на самом сайте.

Код

Для удобства, входными данными будут ссылки на альбомы. Только целиком url не подойдет, нам понадобится id хозяина альбома (группы или человека) и id самого альбома, которые и можно достать из ссылки. К примеру, в https://vk.com/album-54530371_212428070 id владельца (в данном случае сообщества) это -54530371, а id альбома – 212428070. Обратите внимание, если загружать из альбома сообщества, то «-» (дефис) перед id владельца обязателен.

Как вы поняли, мы получаем на вход ссылку на альбом, затем разбираем ее и раскладываем по переменным album_id и owner_id соответствующие id.

Теперь нужно получить количество фото, а также инициализировать переменные для статитстики.

Проблема при загрузке большого количества фото в том, что за один запрос нельзя забрать больше 1000 фото, в то время как в альбоме их может быть десяток тысяч.

Процесс загрузки:

И немного статитстики:

На этом все! В следующем туториале напишем небольшой скрипт для слежки за пользователем.

Интересуетесь программированием на Python?

Подпишитесь на нашу рассылку, чтобы получать больше интересных материалов:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Комментариев: 3

  1. Василий Леонов

    увы, код уже не актуальный. требуется
    vkapi = vk.API(session, v=’5.85′)
    далее ошибки KeyError с ответами АПИ , разбираться не стал

  2. Как правильно сказал ShtihlFD, должна быть следующая строка:
    session = vk.AuthSession(app_id=vk_id, user_login=login, user_password=password, scope=’photos’)

    Дальше ошибки возникают из-за обращения [‘items’], которого теперь нет. Видимо, оно было в прошлых версиях библиотеки.
    Необходимые правки:
    «photos_count = vkapi.photos.getAlbums(owner_id=owner_id, album_ids=album_id)[‘items’][0][‘size’]»
    на
    «photos_count = vkapi.photos.getAlbums(owner_id=owner_id, album_ids=album_id)[0][‘size’]»

    «for photo in photos[‘items’]:» на «for photo in photos:»
    «url = photo[‘photo_604’]» на «url = photo[‘src_big’]»

    Если применить эти правки, ошибка «TypeError: list indices must be integers or slices, not str» пропадёт и все заработает =)

  3. Споткнулся на таком моменте:
    photos_count = vkapi.photos.getAlbums(owner_id=owner_id, album_ids=album_id)[‘items’][0][‘size’]
    приводит к ошибке TypeError: list indices must be integers or slices, not str
    Так же, пока не добавил scope=’photos’ в строку session = vk.AuthSession(app_id=vk_id, user_login=login, user_password=password) после user_password — не мог авторизовать скрипт

Добавить комментарий