Работать с API ВКонтакте доводилось многим из нас, и каждый может сказать: работать с ним напрямую неудобно. Разумеется, было написано множество библиотек, предоставляющих удобный интерфейс работы с ним. Их можно и даже нужно использовать для облегчения работы и ускорения разработки. Сегодня tproger представляет подборку библиотек, набравших на GitHub больше всего звездочек и форков, для почти всех самых популярных ныне языков.

Недавно Вконтакте выпустили официальный SDK для работы с API средствами Java. Страница проекта на GitHub содержит множество примеров, вот один из них, для публикации фотографии на странице пользователя:

InTouch — кроссплатформенная библиотека для С#, которая весьма активно развивается. На момент публикации заявлена полная совместимость с версией 5.57 VK API. Вот пример работы с библиотекой:

Или даже короче:

Node.js

Node-vkapi — современная библиотека для JavaScript, основанная на промисах. Она доступна так же в npm:

Вот пример кода, который публикует текст на стену пользователя с помощью node-vkapi:

VK API Lib — небольшая библиотека для работы API, написанная на чистом C++. Из зависимостей требуется только Curl. Библиотека предоставляет базовый класс VK::Client с методами авторизации и выполнения запросов к API.

На основе его вы можете создавать свои классы для работы с разделами. В примере приведен класс VK::Messages . Базовый пример использования:

Python

Python-библиотека, обеспечивающая очень простую работу с API ВКонтакте. Судите сами:

В настоящее время библиотека достаточно активно развивается, однако до этого в её разработке был перерыв примерно на год. Всегда хочется использовать актуальные инструменты, поэтому стоит упомянуть и другую библиотеку для Python. Вот как выглядит загрузка фотографии на сервер с её помощью (комментарии сохранены):

Библиотека на PHP, использующая, по словам автора, «сахалинские технологии», чтобы облегчить труд разработчика. Написана в ООП-стиле. Одна из самых крутых ее фич — генерация на основе запроса на PHP готового кода для специального метода ВК execute.

Пример просмотра последних 200 сообщений:

vkontakte_api — ruby-адаптер для ВКонтакте API. Он позволяет вызывать методы API, загружать файлы на сервера ВКонтакте, а также поддерживает все 3 доступных способа авторизации (при этом позволяя использовать стороннее решение).

Работать с ним можно, например, так:

Простенькая, полностью асинхронная библиотека AnyEvent::VK, выполняющая все запросы по https. По сути является клиентом. Автор рекомендует использовать Async::Chain для комбинирования вложенных колбеков.

Для мобильной разработки

Android (Java)

Еще одна официальная библиотека, на этот раз — для Android. Написана на Java и позволяет сильно упростить работу с API ВКонтакте из этого языка.

Пример отправки запроса:

Windows Phone (C#)

Последняя в этом списке официальная разработка: написанная на C# базовая библиотека для разработки на WP, похожая по функциональности на свои аналоги под Android и iOS.

Отправка запроса на список друзей:

iOS (Objective C)

Официальная библиотека от ВКонтакте, предназначенная для написания приложений под iOS. Написана на Objective-C.

Пример кода с отправкой запроса:

Для хипстеров

На Github есть библиотека и для этого языка — vkrs. Она не слишком активно развивается, но это уже хоть что-то. Вот так она выглядит в деле:

Golang

Как ни странно, была написана обёртка для VK API и на языке Go. Так же, как и остальные, она доступна на Github. Hello World на ней выглядит так:

Если для какого-либо языка вы знаете более актуальную или функциональную библиотеку — пишите в комментарии, мы обязательно обновим статью.

Всем привет! Сегодня я расскажу вам немного о Пайтоновском API для соц. сети ВКонтакте.

Пост предназначен в первую очередь для школьников начинающих разработчиков, которые хотят сделать простейшее приложение.

Поскольку я сама не особо сильна в Пайтоне, о различных аспектах этого прекраснейшего языка (ООП, функциональное программирование и т.д.) я умолчу.

Пайтоновскую виртуальную машину под винду вместе с небогатой средой разработки IDLE можно скачать здесь.

Не советую качать версию 3.5, ибо под ней некоторые модули (ещё не обновившиеся) могут не работать.

И если вы только начинаете знакомиться с этим языком, не советую также качать версии ниже третьей.

Если вы юзаете UNIX то должны сами знать где гуглить. Под Убунтой просто обновитесь (типа sudo apt-get update).

Также рекомендую поставить pip под вашу версию языка.

В командной строке или терминале введите pip install vk (pip3 install vk)

Или можете воспользоваться этой ссылкой.

Также присутствует документация с примерами.

Что надо сделать ВКонтакте?

Тыкаем там на кнопку "Создать приложение"

Вводим имя и нажимаем "Подключить приложение". Тип оставляем Standalone.

После создания приложения заходим в его настройки и копируем (запоминаем) его идентификатор, он нам позже пригодится. На скриншоте ID закрашен другим цветом.

Дополнительно можно также загрузить свою иконку, поменять имя и т.д.

Теперь самое интересное. Нужно получить токен авторизации.

В принципе, модуль vk вполне работает и без него. Некоторые методы могут быть вызваны вообще без авторизации на сайте. Кроме того, вы можете в самом приложении авторизоваться через свой логин и пароль (как показано в этом примере).

В принципе, говоря по-хорошему, оба способа небезопасны. Так или иначе разработчик модуля может получить доступ к вашим данным — токену или паре логин-пароль.

Прикол в том, что токен авторизации выдаётся конкретному приложению с конкретными правами доступа и конкретным ID. Т.е. в принципе, разрабу модуля он бесполезен.

А вот ваши данные авторизации могут быть вполне полезны. Потому я считаю что лучше юзать токен. По крайней мере, если у вас возникнут какие-то подозрения, не придётся менять пароль и засвеченную почту (номер телефона).

Ещё одним плюсом токена для параноиков является то, что он может быть выдан на определённый срок. В общем, юзайте лучше токены. Это немного сложнее, но безопаснее.

Как получить токен авторизации для Standalone-приложения описано здесь. Вам (или пользователю приложения) нужно перейти по ссылке определённого вида, авторизоваться ВКонтакте (если вы это ещё не сделали), в открывшемся фрейме внимательно прочесть какие разрешения запрашивает приложение, выдать приложению доступ, и из перенаправленной ссылки вытащить токен авторизации.

Вот пример ссылки:

Это запрос к сайту на выдачу токена авторизации для нашего Standalone-приложения. Разберём подробнее.

redirect_uri=https://oauth.vk.com/blank.html — в случае Standalone-приложений ВКонтакте обязывает использовать именно такой адрес перенаправления.

scope=friends,photos ,audio,video,docs,notes,pages,status,wall,groups,messages,notifications,offline — самое интересное. Это список запрашиваемых разрешений. Полный список возможных разрешений можно найти здесь.

Будьте крайне внимательны при составлении этого списка. Фактически, он определяет все возможности, доступные обладателю токена. Особо обратите внимание на последний параметр offline — при его использовании будет выдан бессрочный токен авторизации.

После того, как юзер даст приложению доступ со страницы ВК, его перебросит на пустую страницу с URL вида

С некоторыми дополнительными параметрами. Для авторизации приложению необходим токен, стоящий в параметре access_token. Вам необходимо его вытащить.

После этого необходимо авторизоваться в самой программе. На сайте разработчика модуля приводится такой простой пример:

После этого у объекта api вы можете вызывать все методы, перечисленные на этой странице.

К примеру, написание первого поста:

api.wall.post(message = ‘Hello, World!’)

Приведёт к появлению на вашей стене текстового поста.

Лирическое отступление относительно токенов и добросовестности

Как видите, процедура получения токена довольно проста, а его наличие даёт практически неограниченный контроль над страницей пользователя (практически такой же, как и с веб-интерфейса).

Естественно, это накладывает определённые требования к добросовестности пользователей. Любой из вас может обмануть доверчивого друга или соседа, прислав ему ссылку и попросив скопировать ответ (хотя на странице-редиректе и стоит напоминание о том, что ссылку с токеном нельзя никому присылать) либо получив на короткое время доступ к незапароленному компьютеру.

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

Я искренне надеюсь что вы не станете так делать.

Написание простейшей программы с использованием API

Давайте напишем какую-нибудь полезную программу, использующую API ВКонтакте.

Вот пример такой программы, предназначенной для своевременного получения обновлений сообщений (к сожалению, после сохранения поста всё форматирование пропадает, потому вместо символов табуляции я буду использовать escape-последовательность ):

def searchForUser(user_list, ID):

for user in user_list:

if type(user) is int:

return user[‘first_name’] + ‘ ‘ + user[‘last_name’] + ‘

for message in message_list:

if type(message) is int:

if ‘chat_id’ not in message:

user_list = api.users.get(user_ .join(IDS))

for message in message_list:

if type(message) is int:

if message[‘read_state’] == 0:

if ‘chat_id’ not in message:

text = text + searchForUser(user_list, message[‘uid’]) + message[‘body’] + ‘

text = text + ‘Сообщение из чата
‘ + message[‘body’] + ‘

message = api.messages.get(time_offset = 0)

if len(message) != 1 and message[1][‘read_state’] == 0:

print(‘No new messages!’)

SendEmail.sendEMail(‘No new messages!’)

Разберём построчно что делает этот код.

В первых трёх строчках мы импортируем необходимые нам модули. Модуль time используется для того, чтобы отправлять процесс в сон. Модуль SendEmail — это пользовательский модуль, предназначенный для отправки сообщений на определённый ящик.

Функция searchForUser(user_list, ID) ищет пользователя по его ID в списке user_list объектов user. Когда она его находит, то возвращает строку с именем и фамилией юзера. Проверка на тип сделана т.к. API ВКонтакте частенько возвращает первым элементом списка объектов длину этого списка.

Фунция checkMessages(message_list) просматривает список сообщений (опять же, пропуская элемент списка, содержащий число сообщений в списке) и формирует список из ID тех юзеров, сообщения которых ещё не прочитаны. Далее по этому списку ID у API запрашивается список юзеров. И наконец потом формируется единая строка, в которой через строчку указан отправитель (полученный функцией searchForUser(user_list, ID)) и текст его сообщения.

Если сообщение был отправлено из чата, то это дополнительно указывается.

И наконец основная часть программы. Сначала мы авторизуемся (токен можно записать прямо в Пайтоновский файл либо читать из текстового файла), затем в бесконечном цикле делаем следующее:

1) Проверяем, есть ли сообщения и прочтено ли последнее сообщение

2) Если есть, то вытаскиваем функцией checkMessages(message_list) строку вида

Сообщение от юзера 1

Сообщение от юзера 2

Другой Юзер Юзеров

Сообщение от юзера 1

И отправляем её себе на Email функцией SendEmail.sendEMail(text). Вместо отправки на почту можно выводить сообщение в консоль или записывать в файл.

2а) Если сообщений не было, то отправляем уведомление об этом (его цель, в основном, дать вам понять что программа не вылетела из-за какого-нибудь эксепшена).

3) Вызовом time.sleep(600) ждём ещё 10 минут.

Естественно, эта простенькая программа не является верхом совершенства. Изредка вызов API может приводить к поднятию эксепшена, что в данном случае попросту валит всю программу. Кроме того, приложение никак не запоминает что оно уже отправило вам уведомление о неких сообщениях, т.е. если вы не прочтёте новые сообщения, оно вас снова уведомит. И снова. И так до тех пор, пока в очередном вызове не вылетит эксепшен.

Если вы планируете писать своё приложение, обращайте также внимание на ограничения по частоте запросов к API (в конце страницы).


Привет, Хабр! Данная статья предназначена для тех, кто хочет разобраться с основами VK API на Python, так как статей по этому поводу нет (на Хабре есть одна статья, но она уже не совсем актуальна, так как некоторые методы не работают), а на других ресурсах мне удалось найти только вопросы пользователей, но никаких гайдов и прочего.

Для работы с VK API в Python есть две популярные библиотеки: vk и vk_api. Какая из библиотек лучше я судить не возьмусь, но скажу одно: у vk документация слишком мала (поэтому разбирался практически методом тыка) и на английском языке, а у vk_api документация более развернута (поэтому писать о данной библиотеке смысла не вижу) и на русском. Для меня не главное на каком языке документация, но для некоторых пользователей это играет большое значение при выборе.

Как вы уже поняли, в данной статье рассматривается работа с библиотекой vk.

Устанавливается данная библиотека следующей стандартной командой:

После того, как модуль будет установлен, нам необходимо создать приложение на сайте соц.сети. Я думаю, что большинство пользователей умеет это делать, поэтому информацию по этому шагу пропускаю. Если кто не умеет, то гуглим, не стесняемся.

После регистрации приложения нам нужен будет только его ID.

Начнем с авторизации. В принципе, некоторую информацию можно получить и без ввода личных данных, что конечно же хорошо, например:

Таким образом мы получим фамилию, имя и >

Т.е. в данном случае мы получим не только информацию об имени и фамилии пользователя с >
Действия без авторизации не предоставляют нам возможность использования VK API на полную мощь, поэтому рассмотрим авторизацию с вводом личных данных. Есть два способа: ввод логина и пароля, ввод токена. Чтобы авторизоваться с помощью токена нужно немного дополнить первый пример, а именно вот эту строку:

Дальше все остается так же, как и было раньше, без каких-либо изменений.

Следующий способ авторизации – ввод логина и пароля. В данном случае тоже все довольно просто и понятно:

Как видите, ничего сложного и все настолько просто и понятно, что даже не нуждается в дополнительных комментариях.

При такой авторизации нужно указывать не только логин, пароль и ID приложения, но то, к чему мы хотим получить доступ.

Например, у нас сейчас не указан доступ к стене пользователя, поэтому при попытке добавить запись на стену мы получим ошибку:

Для того чтобы данный код сработал корректно, при авторизации нужно указать дополнительно аргумент с названием scope и перечислить через запятую те методы, доступ к которым мы хотим получить.

В данном примере я запрашиваю доступ к стене и сообщениям. Выполнение программы завершается корректно, а на стене появляется запись с текстом ‘hello’. Названия методов, к которым возможно получить доступ можно посмотреть на этой странице документации.

Вот и все. Вызов методов происходит по одному шаблону:

Таким образом мы отправляем сообщение hello пользователю с >
Для более наглядной работы библиотеки я реализовал небольшую программку, которая следит когда пользователь зашел в ВК, а когда из него вышел (слабо верится, но может будет кому интересна). Код программы ниже и на GitHub.

Данная статья предназначалась лишь для понимания основ работы с VK API на Python с использованием библиотеки VK.