На сегодняшний день скорость развития рынка Web-приложений крайне велика. Относительно новым и пока не до конца сформировавшимся рынком является рынок приложений в социальных сетях. Аудитория социальных сетей растёт. Количество денег, которые тратят пользователи, увеличивается. Интерес к получению дохода путём создания приложений, очевиден. Самой популярной и динамично развивающейся социальной сетью в России является В Контакте. Само собой, она предоставляет богатый API, функциональность которого расширяется практически каждый месяц.
Сегодня в Интернете полно библиотек, которые позволяют как-то работать со вконтактом. Часть из них парсит страницы, другая работает напрямую с API. Первые сразу отпадают, если вы хотите заработать на своём приложении, а вторые часто забрасываются авторами или не справляются с темпами развития социальной сети.
Примеры:
- userapi-ruby — заброшено;
- vk-ruby-api — является надстройкой над данными пользователя, код странный;
- vkontakte_api — плагин для Rails (не реализован в виде engine), заброшен;
- bublik/vkontakte — заброшен;
- mamantoha/vkontakte — живой проект, является библиотекой исключительно для клиентских приложений. Увы, для авторизации парсит страницы, что запрещено правилами использования в Контакте.
Поскольку так сложилось, что на данный момент не существует функциональной и корректной API-обёртки В Контакте для Ruby, я представляю собственное решение — vk-ruby.
Я постарался предусмотреть и избежать многих узких мест, поэтому vk-ruby:
- прост в расширении: список всех возможных методов API находятся в YAML-файлах, которые легко модифицировать, форкнув проект на GitHub;
- включает в себя все три типа приложений В Контакте:
- serverside — «подключенный» сайт;
- standalone — мобильное или desktop-приложение;
- secure — защищенный сервер вашего приложения.
Что нужно, чтобы начать работать с API В Контакте?
- первым делом, зарегистрировать собственное приложение и получить необходимые ключи;
- ознакомиться со способами авторизации приложения В Контакте;
- установить gem vk-ruby.
Начало работы
Cоздадим приложение необходимого типа:
serverside = VK::Serverside.new :app_id => APP_ID, :app_secret => APP_SECRET
# или
standalone = VK::Standalone.new :app_id => APP_ID
# или
secure = VK::Secure.new :app_id => APP_ID, :app_secret => APP_SECRET
Здесь и далее, константы APP_ID и APP_SECRET — ключи, которые вы получите при регистрации приложения. Далее необходимо авторизоваться.
serverside.authorize(CODE)
# или
standalone.authorize(CODE)
# или
secure.authorize
Информация о параметре CODE приведена в документации о способах авторизации. Кстати, теперь мы можем «дёргать» необходимые методы.
Например, посмотрим, установил ли пользователь наше приложение:
serverside.isAppUser # => 1
Установил. Попробуем выполнить поиск по аудиозаписям:
tracks = serverside.audio.search(:q => 'Rammstein')
unread.shift # => количество треков
tracks.map do |track|
track['title']
end # => [ 'Mutter', 'Bang Bang', 'Du Hast', ... ]
Standalone-приложениям предлагается поддержка расширенных методов. Например, доступ к личным сообщениям пользователя:
unread = standalone.messages.get :filters => '1'
puts unread.shift # => количество сообщений
unread.map { |msg| msg['title'] } # => [ 'заголовок1', 'заголовок2', ... ]
Secure-приложения получают доступ как к обычным и расширенным методам API, так и к административным методам. Например, возможность отправлять пользователям уведомления.
secure.secure.sendNotification(
:message => 'Привет!',
:timestamp => Time.now.to_i,
:random => rand(1000)
)
Легко заметить, код получается довольно простым и аккуратным. Всё что нужно для работы — это ознакомится со списком методов API.
Конечно, vk-ruby легко интегрировать в любое приложение. Ruby on Rails, Sinatra, Padrino — не имеет значения, хоть в другой gem. В качестве небольшого примера я написал простое Web-приложение на микрофреймворке Sinatra.
Огромным камнем в огороде вконтакта является способ авторизации клиентских приложений, который предполагает встраивание браузера и «ручное» заполнение формы авторизации. Это действительно большая проблема, которая не решилась даже с переходом В Контакте на OAuth 2.0. В качестве частичного решения, я написал утилиту vk-console, которая авторизуется в системе, выполняя парсинг страниц.
Я старался сделать данный инструмент простым и удобным, но как и любому проекту поддержка будет не лишней! Если знаете как его улучшить, нашли баг или ещё что то, то пишите, форкайте — буду очень рад.