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.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in vk_api.gemspec
4
+ gemspec
@@ -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)
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,4 @@
1
+ # encoding: utf-8
2
+ module VkApi
3
+ autoload :Session, 'vk_api/session'
4
+ end
@@ -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
@@ -0,0 +1,4 @@
1
+ # encoding: utf-8
2
+ module VkApi
3
+ VERSION = "0.1.0"
4
+ end
@@ -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
+