В Контакте вместе с Ruby izinenko вс 11 сен 2011 20:07:00 №10080778911

На сегодняшний день скорость развития рынка Web-приложений крайне велика. Относительно новым и пока не до конца сформировавшимся рынком является рынок приложений в социальных сетях. Аудитория социальных сетей растёт. Количество денег, которые тратят пользователи, увеличивается. Интерес к получению дохода путём создания приложений, очевиден. Самой популярной и динамично развивающейся социальной сетью в России является В Контакте. Само собой, она предоставляет богатый API, функциональность которого расширяется практически каждый месяц.

Сегодня в Интернете полно библиотек, которые позволяют как-то работать со вконтактом. Часть из них парсит страницы, другая работает напрямую с API. Первые сразу отпадают, если вы хотите заработать на своём приложении, а вторые часто забрасываются авторами или не справляются с темпами развития социальной сети.

Примеры:

  1. userapi-ruby — заброшено;
  2. vk-ruby-api — является надстройкой над данными пользователя, код странный;
  3. vkontakte_api — плагин для Rails (не реализован в виде engine), заброшен;
  4. bublik/vkontakte — заброшен;
  5. mamantoha/vkontakte — живой проект, является библиотекой исключительно для клиентских приложений. Увы, для авторизации парсит страницы, что запрещено правилами использования в Контакте.

Поскольку так сложилось, что на данный момент не существует функциональной и корректной API-обёртки В Контакте для Ruby, я представляю собственное решение — vk-ruby.

Я постарался предусмотреть и избежать многих узких мест, поэтому vk-ruby:

  1. прост в расширении: список всех возможных методов API находятся в YAML-файлах, которые легко модифицировать, форкнув проект на GitHub;
  2. включает в себя все три типа приложений В Контакте:
    • serverside — «подключенный» сайт;
    • standalone — мобильное или desktop-приложение;
    • secure — защищенный сервер вашего приложения.

Что нужно, чтобы начать работать с API В Контакте?

  1. первым делом, зарегистрировать собственное приложение и получить необходимые ключи;
  2. ознакомиться со способами авторизации приложения В Контакте;
  3. установить 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, которая авторизуется в системе, выполняя парсинг страниц.

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

blog comments powered by Disqus