Skip to content

Simple gem that can help you to work with VK without additional problems.

License

Notifications You must be signed in to change notification settings

rottingcorpse/vkontakte

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Что это?

Перед вами исходный код гема, который может помочь вашему приложению на Ruby-On-Rails легко и просто интегрироваться с API всем известной социальной сети ВКонтакте. Думаю, на просторах Github можно найти не один десяток таких гемов. Вряд ли этот чем-то принципиально лучше остальных. Предполагаю, что он может даже и хуже оказаться, ведь я не искал аналоги, не анализировал доступные варианты, вообще ничего не изучал. Просто однажды мне понадобилось работать с VK API и, попутно решив разобраться с процессом создания своих гемов, я начал писать вот этот самый код.

Какие планы?

Светлое и безоблачное будущее. Я использую этот код для своего проекта #shopinvk и не собираюсь отказываться от созданного своими руками гема в пользу какого-либо другого. Так что проект будет постепенно, упрямо и очень скурпулезно развиваться по мере роста потребностей #shopinvk.

Из того, что гем накапливает функциональность строго исходя из нужд #shopinvk, следует простой факт: сейчас реализованы далеко не все вызовы API, а только те, которые мне тем или иным образом успели пригодиться: работа с фотографиями, альбомами, пользователями.

Как этим пользоваться?

Подключение гема

Добавляем в Gemfile эту строчку:

gem 'vkontakte', :git => 'git://github.com/kimrgrey/vkontakte.git'

Выполняем вот эту команду:

bundle install

И добавляем в папку config/initializers файлик vkontakte.rb с каким-то таким содержимым:

Vkontakte.configure do |config|
  config.client_id = '' # тут идентификатор вашего приложения
  config.client_secret = '' # тут секретный токен вашего приложения
end

Оба параметра берутся из настроек приложения в VK.

Получение токена

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

class AccountsController < ApplicationController
  def show
    @account = Account.find(params[:id])
    respond_to do |format|
      format.html
    end
  end

  def authorize
    @account = Account.find(params[:id])
    redirect_to Vkontakte::Application.authorize_url([:photos, :offline], callback_account_url(@account))
  end

  def callback
    @account = Account.find(params[:id])
    if params[:code]
      Vkontakte::Application.request_access_token(params[:code], callback_account_url(@account)) do |token, uid|
        @account.update_attributes(:token => token, :uid => uid)
      end
    end
    redirect_to account_url(@account) 
  end
end

Предполагается какой-то такой сценарий:

  1. У вас есть страничка, отображающая статус аккаунта;
  2. На этой страничке размещается ссылка на действие authorize;
  3. При выполнении authorize приложение перенаправляет бразуер на страницу авторизации VK;
  4. В данном случае мы получаем доступ к фотографиям и действиям с аккаунтом в оффлайне;
  5. После успешной авторизации VK возвращает параметр code на указанный для обратной связи URL;
  6. Далее code используется для получения токена при выполнении второго запроса к API;
  7. Полученный токен запоминается для дальнейших операций.

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

Вызов методов

Подробное описание всех доступных методов вы можете найти на официальном сайте VK API. При работе с гемом нужно просто заменить именование при помощи camelCase на именование через нижние подчеркивания. То есть, например, если в документации описан метод photos.getAlbums, то у гема будет метод photos_get_albums. Поскольку в некоторых случаях имена получаются довольно стремными, я создавал алиасы. Скажем, можно смело писать photo_albums вместо photos_get_albums.

Учитывайте при разработке, что если вдруг что-то пойдет не так, то вы скорее всего получите исключение класса Vkontakte::MethodCallError.

Если продолжать приведенный выше пример, то примерно так будет выглядеть большая часть обращений к API:

class Account  
  def reload_avatar
    fields = [:fist_name, :last_name, :photo_big].join(",")
    result = vkontakte.users(:fields => fields).
    update_attributes(:avatar_url => result.first["photo_big"])
  end

  def create_photo(title, description, url)
    result = vkontakte.create_photo_album(:title => title, :description => description, :url => url)
    result.first["pid"]
  end

  def vkontakte
    @vk ||= Vkontakte::Application.new(uid, token)
  end
end

Как добавить свой метод?

============================

В большинстве случаев все довольно просто:

  1. Форкаете проект на Github;
  2. В своей копии добавляете к классу Vkontakte::Application еще один вызов api_method по аналогии с уже существующими;
  3. Проверяете, что все работает;
  4. Profit.

About

Simple gem that can help you to work with VK without additional problems.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published