class Vkontakte::API

Make Vkontakte API requests

vk.com/dev/api_requests

Attributes

access_token[R]
api_version[R]
lang[RW]
proxy[R]
timeout[R]

Public Class Methods

new( access_token = nil, proxy: nil, api_version: Vkontakte::API_VERSION, lang: 'ru', timeout: 60 ) click to toggle source
# File lib/vkontakte/api.rb, line 12
def initialize(
  access_token = nil,
  proxy: nil,
  api_version: Vkontakte::API_VERSION,
  lang: 'ru',
  timeout: 60
)
  @access_token = access_token
  @proxy = proxy
  @api_version = api_version
  @lang = lang
  @timeout = timeout
end

Public Instance Methods

method_missing(method, *params) click to toggle source
# File lib/vkontakte/api.rb, line 26
def method_missing(method, *params)
  method_name = method.to_s.split('_').join('.')
  response = execute(method_name, *params)
  if response['error']
    error_code = response['error']['error_code']
    error_msg  = response['error']['error_msg']
    raise Vkontakte::API::Error.new(method_name, error_code, error_msg, params)
  end

  response['response']
end

Private Instance Methods

execute(method_name, params = {}) click to toggle source
# File lib/vkontakte/api.rb, line 40
def execute(method_name, params = {})
  params.merge!(access_token: @access_token, lang: @lang, v: @api_version, https: '1')

  url = "https://api.vk.com/method/#{method_name}"

  response = make_request(url, params)

  JSON.parse(response.body)
end
make_request(url, params) click to toggle source
# File lib/vkontakte/api.rb, line 50
def make_request(url, params)
  uri = URI(url)
  use_ssl = uri.scheme == 'https'

  request = Net::HTTP::Post.new(uri)
  request.form_data = params

  if @proxy
    if @proxy.http?
      Net::HTTP.start(
        uri.hostname,
        uri.port,
        @proxy.addr,
        @proxy.port,
        use_ssl: use_ssl,
        read_timeout: timeout,
        open_timeout: timeout
      ) do |http|
        http.request(request)
      end
    elsif @proxy.socks?
      Net::HTTP.SOCKSProxy(@proxy.addr, @proxy.port).start(uri.hostname, uri.port, use_ssl: use_ssl) do |http|
        http.request(request)
      end
    end
  else
    Net::HTTP.start(
      uri.hostname,
      uri.port,
      use_ssl: use_ssl,
      read_timeout: timeout,
      open_timeout: timeout
    ) do |http|
      http.request(request)
    end
  end
end