vk_api 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +4 -0
- data/README.rdoc +18 -0
- data/Rakefile +2 -0
- data/lib/vk_api.rb +4 -0
- data/lib/vk_api/session.rb +103 -0
- data/lib/vk_api/version.rb +4 -0
- data/vk_api.gemspec +21 -0
- metadata +65 -0
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
= Vkontakte Api
|
2
|
+
|
3
|
+
== Описание
|
4
|
+
|
5
|
+
Библиотека VkApi имеет один значимый класс - <tt>VK:Session</tt>. После создания экземпляра сессии
|
6
|
+
вы можете вызывать методы ВКонтакте как будто это методы сессии, например:
|
7
|
+
session = ::VkApi::Session.new app_id, api_secret
|
8
|
+
session.friends.get :uid => 12
|
9
|
+
Такой вызов вернёт вам массив хэшей в виде:
|
10
|
+
=> [{'uid' => '123'}, {:uid => '321'}]
|
11
|
+
|
12
|
+
== Установка
|
13
|
+
gem install vk_api
|
14
|
+
|
15
|
+
== Лицензия
|
16
|
+
|
17
|
+
Copyright (c) 2011 Nikolay Karev
|
18
|
+
MIT License (http://www.opensource.org/licenses/mit-license.php)
|
data/Rakefile
ADDED
data/lib/vk_api.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# VK - это небольшая библиотечка на Ruby, позволяющая прозрачно обращаться к API ВКонтакте
|
3
|
+
# из Ruby.
|
4
|
+
#
|
5
|
+
# Author:: Nikolay Karev
|
6
|
+
# Copyright:: Copyright (c) 2011- Nikolay Karev
|
7
|
+
# License:: MIT License (http://www.opensource.org/licenses/mit-license.php)
|
8
|
+
#
|
9
|
+
# Библиотека VkApi имеет один класс - +::VK:Session+. После создания экземпляра сессии
|
10
|
+
# вы можете вызывать методы ВКонтакте как будто это методы сессии, например:
|
11
|
+
# session = ::VkApi::Session.new app_id, api_secret
|
12
|
+
# session.friends.get :uid => 12
|
13
|
+
# Такой вызов вернёт вам массив хэшей в виде:
|
14
|
+
# # => [{'uid' => '123'}, {:uid => '321'}]
|
15
|
+
|
16
|
+
require 'net/http'
|
17
|
+
require 'uri'
|
18
|
+
require 'digest/md5'
|
19
|
+
require 'json'
|
20
|
+
|
21
|
+
module VkApi
|
22
|
+
# Единственный класс библиотеки, работает как "соединение" с сервером ВКонтакте.
|
23
|
+
# Постоянное соединение с сервером не устанавливается, поэтому необходимости в явном
|
24
|
+
# отключении от сервера нет.
|
25
|
+
# Экземпляр +Session+ может обрабатывать все методы, поддерживаемые API ВКонтакте
|
26
|
+
# путём делегирования запросов.
|
27
|
+
class Session
|
28
|
+
VK_API_URL = 'http://api.vk.com/api.php'
|
29
|
+
VK_OBJECTS = %w(friends photos wall audio video places secure language notes pages offers
|
30
|
+
questions messages newsfeed status polls subscriptions)
|
31
|
+
attr_accessor :app_id, :api_secret
|
32
|
+
|
33
|
+
# Конструктор. Получает следующие аргументы:
|
34
|
+
# * app_id: ID приложения ВКонтакте.
|
35
|
+
# * api_secret: Ключ приложения со страницы настроек
|
36
|
+
def initialize app_id, api_secret, method_prefix = nil
|
37
|
+
@app_id, @api_secret, @prefix = app_id, api_secret, method_prefix
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
# Выполняет вызов API ВКонтакте
|
42
|
+
# * method: Имя метода ВКонтакте, например friends.get
|
43
|
+
# * params: Хэш с именованными аргументами метода ВКонтакте
|
44
|
+
# Возвращаемое значение: хэш с результатами вызова.
|
45
|
+
# Генерируемые исключения: +ServerError+ если сервер ВКонтакте вернул ошибку.
|
46
|
+
def call(method, params = {})
|
47
|
+
params[:method] = @prefix ? "#{@prefix}.#{method}" : method
|
48
|
+
params[:api_id] = app_id
|
49
|
+
params[:format] = 'json'
|
50
|
+
params[:sig] = sig(params.tap do |s|
|
51
|
+
# stringify keys
|
52
|
+
s.keys.each {|k| s[k.to_s] = s.delete k }
|
53
|
+
end)
|
54
|
+
response = JSON.parse(Net::HTTP.post_form(URI.parse(VK_API_URL), params).body)
|
55
|
+
raise ServerError.new self, method, params, response['error'] if response['error']
|
56
|
+
response['response']
|
57
|
+
end
|
58
|
+
|
59
|
+
# Генерирует подпись запроса
|
60
|
+
# * params: параметры запроса
|
61
|
+
def sig(params)
|
62
|
+
Digest::MD5::hexdigest(
|
63
|
+
params.keys.sort.map{|key| "#{key}=#{params[key]}"}.join +
|
64
|
+
api_secret)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Генерирует методы, необходимые для делегирования методов ВКонтакте, так friends,
|
68
|
+
# images
|
69
|
+
def self.add_method method
|
70
|
+
::VkApi::Session.class_eval do
|
71
|
+
define_method method do
|
72
|
+
if (! var = instance_variable_get("@#{method}"))
|
73
|
+
instance_variable_set("@#{method}", var = ::VkApi::Session.new(app_id, api_secret, method))
|
74
|
+
end
|
75
|
+
var
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
for method in VK_OBJECTS
|
81
|
+
add_method method
|
82
|
+
end
|
83
|
+
|
84
|
+
# Перехват неизвестных методов для делегирования серверу ВКонтакте
|
85
|
+
def method_missing(name, *args)
|
86
|
+
call name, *args
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
# Базовый класс ошибок
|
92
|
+
class Error < ::StandardError; end
|
93
|
+
|
94
|
+
# Ошибка на серверной стороне
|
95
|
+
class ServerError < Error
|
96
|
+
attr_accessor :session, :method, :params, :error
|
97
|
+
def initialize(session, method, params, error)
|
98
|
+
super "Server side error calling VK method: #{error}"
|
99
|
+
@session, @method, @params, @error = session, method, params, error
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
data/vk_api.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "vk_api/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "vk_api"
|
7
|
+
s.version = VkApi::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Nikolay Karev", "Nick Recobra"]
|
10
|
+
s.email = ["oruenu@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/oruen/vk_api"
|
12
|
+
s.summary = %q{Гем для общения с Open API сайта ВКонтакте}
|
13
|
+
s.description = %q{Гем для общения с Open API сайта ВКонтакте без использования пользовательских сессий.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "vk_api"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vk_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Nikolay Karev
|
9
|
+
- Nick Recobra
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
|
14
|
+
date: 2011-03-04 00:00:00 +03:00
|
15
|
+
default_executable:
|
16
|
+
dependencies: []
|
17
|
+
|
18
|
+
description: "\xD0\x93\xD0\xB5\xD0\xBC \xD0\xB4\xD0\xBB\xD1\x8F \xD0\xBE\xD0\xB1\xD1\x89\xD0\xB5\xD0\xBD\xD0\xB8\xD1\x8F \xD1\x81 Open API \xD1\x81\xD0\xB0\xD0\xB9\xD1\x82\xD0\xB0 \xD0\x92\xD0\x9A\xD0\xBE\xD0\xBD\xD1\x82\xD0\xB0\xD0\xBA\xD1\x82\xD0\xB5 \xD0\xB1\xD0\xB5\xD0\xB7 \xD0\xB8\xD1\x81\xD0\xBF\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xB7\xD0\xBE\xD0\xB2\xD0\xB0\xD0\xBD\xD0\xB8\xD1\x8F \xD0\xBF\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xB7\xD0\xBE\xD0\xB2\xD0\xB0\xD1\x82\xD0\xB5\xD0\xBB\xD1\x8C\xD1\x81\xD0\xBA\xD0\xB8\xD1\x85 \xD1\x81\xD0\xB5\xD1\x81\xD1\x81\xD0\xB8\xD0\xB9."
|
19
|
+
email:
|
20
|
+
- oruenu@gmail.com
|
21
|
+
executables: []
|
22
|
+
|
23
|
+
extensions: []
|
24
|
+
|
25
|
+
extra_rdoc_files: []
|
26
|
+
|
27
|
+
files:
|
28
|
+
- .gitignore
|
29
|
+
- Gemfile
|
30
|
+
- README.rdoc
|
31
|
+
- Rakefile
|
32
|
+
- lib/vk_api.rb
|
33
|
+
- lib/vk_api/session.rb
|
34
|
+
- lib/vk_api/version.rb
|
35
|
+
- vk_api.gemspec
|
36
|
+
has_rdoc: true
|
37
|
+
homepage: https://github.com/oruen/vk_api
|
38
|
+
licenses: []
|
39
|
+
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: "0"
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "0"
|
57
|
+
requirements: []
|
58
|
+
|
59
|
+
rubyforge_project: vk_api
|
60
|
+
rubygems_version: 1.5.2
|
61
|
+
signing_key:
|
62
|
+
specification_version: 3
|
63
|
+
summary: "\xD0\x93\xD0\xB5\xD0\xBC \xD0\xB4\xD0\xBB\xD1\x8F \xD0\xBE\xD0\xB1\xD1\x89\xD0\xB5\xD0\xBD\xD0\xB8\xD1\x8F \xD1\x81 Open API \xD1\x81\xD0\xB0\xD0\xB9\xD1\x82\xD0\xB0 \xD0\x92\xD0\x9A\xD0\xBE\xD0\xBD\xD1\x82\xD0\xB0\xD0\xBA\xD1\x82\xD0\xB5"
|
64
|
+
test_files: []
|
65
|
+
|