vk_api 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|