vk_api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+