Работа с VK API на Python 3.x

в 13:02, , рубрики: api, python, python 3, Вконтакте API, Программирование

Здраствуйте, Хабровчане!

В последнее время мне часто приходится сталкиваться с API Вконтакте, благо для работы с ней есть замечательная библиотека, доступная для установки через PyPl с наименованием там vk. Но у неё есть один относительный недостаток: она не может получить за вас токен доступа к api (acess_token), без этого токена (набор символов, который Вконтакте выдает пользователю, если разрешает приложению доступ к его странице) работать с API нельзя. Проблемы, связанные с VK API, авторизацией и получением прав на python 3.x, а также небольшая инструкция и мини-FAQ по работе с VK API вы найдёте ниже.

Про токен

Получить токен можно разными путями, наиболее удобный и практичный описан в публикации «Пишем модуль для авторизации в VK API», но и он несовершенен, так как его можно использовать для Python 2.x, а мы люди прогрессивные и хотим 3.x, не так ли? Не буду томить, вот мой порт этого модуля под Python 3.x (никакие сторонние модули не нужны):

Итак, простой код для теста всё ли правильно установлено:

import vk,vk_auth_port_by_bulates1
vkapi = vk.API(app_id,login,password)
vkapi.access_token=vk_auth_port_by_bulates1.auth(login,password,app_id,'wall')
vkapi.wall.post(message="Test from python 3.4")

Здесь:

  1. Login — ваш логин вконтакте, строка, например, e-mail или телефон;
  2. Password — ваш пароль от вконтакте, строка, например, 'qwerty123';
  3. App_id — идентификатор вашего приложения, как получить — читаем дальше;
  4. «wall» — запрос на управления стенкой VK, дальше объясню более подробно.

Про идентификатор приложения (app_id)

Получается он очень просто, заходите сюда и создаёте собственное Standalone приложение, название значения не имеет. Далее жмёте редактировать приложение, заходите во вкладку настройки и видите строку ID приложения. То, что напротив неё, и есть app_id, посылаем его в виде строки.

Про права

Необходимые нам права указаны в официальной документации VK здесь. Выбираете нужный метод и там сверху написано жирным шрифтом, какие права нужно иметь, выписываем все необходимые нам права и посылаем их в виде строки с разделителем '+', например, 'wall+friends+groups'.

Про использование методов API

Теперь наконец-то приступим к написанию первого самостоятельного приложения.
Для начала предлагаю написать простенький скрипт для скачивания фото на компьютер с использованием API.

import vk,vk_auth_port_by_bulates1,urllib.request
vkapi = vk.API(app_id,login,password)
vkapi.access_token=vk_auth_port_by_bulates1.auth(login,password,app_id,'photos')
albums=[x['id'] for x in vkapi.photos.getAlbums(owner_id=yid)['items']]
for album in albums:
    photos=vkapi.photos.get(owner_id=yid,album_id=album)['items']
    for photo in photos:
        link=photo[sorted([x for x in photo.keys() if 'photo' in x],key=lambda x: int(x.split('_')[1]))[-1]]
        urllib.request.urlretrieve(link,link.split('/')[-1])

Строка:

  1. Импорт необходимых модулей, urllib — для скачивания файлов;
  2. Создаём экземпляр класса VK API;
  3. Получаем токен и добавляем его VK API
  4. Получаем список альбомов (функция getAlbums возвращает словарь, с которым уже можно работать без сторонних модулей) и достаём из них id;
  5. Начинаем цикл по id альбомов;
  6. Получаем список всех фотографий (вот в таком виде);
  7. Начинаем цикл по фотографиям;
  8. Получаем ссылку на фото в максимальном доступном разрешении (если кто знает способ получить её проще, отпишите пожалуйста, в комменты);
  9. Скачиваем фото.

В данном случае yid — идентификатор того, чьи альбомы скачиваем, например ваш, разумеется у вас должен быть доступ к этим фото

Короче чем тут, не так ли? Правда, здесь без выбора альбома, но это неважно, главное, что через API быстрее, короче и удобнее.

Мини FAQ

  • -Откуда брать список методов?
    — Из официальной документации, вызываются просто: vkapi.то что написано в документации, например vkapi.photos.Get();
  • — Какие аргументы для методов?
    — Всё там же в документации, передавать в виде имя=значение, например owner_id='124214';
  • — Как узнать какие нужны права?
    — В информации о методе в документации VK сверху есть строка, в которой жирным шрифтом выделено, какие права нужны; если надо несколько, то посылаем их строкой с разделителем '+', например, 'photos+wall'. Порядок значения не имеет;
  • — Все ли методы реализованы?
    — Да, все;
  • Если неправильный логин/пароль вернёт ли ошибку auth()?
    — Да, «Excpected sucess here»;
  • — Насчёт кодировки…
    — В основном возвращается строка utf-8.

P.S.

Надеюсь, вам понравилась данная статья.

Автор: python_coder

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js