vkontakte 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -8,6 +8,9 @@ gem "i18n"
8
8
  gem "rspec", "~> 2.6.0", :require => "spec"
9
9
  gem "fakeweb"
10
10
 
11
+ gem "rake"
12
+ gem "rdoc"
13
+
11
14
  # To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
12
15
  # gem 'ruby-debug'
13
16
  # gem 'ruby-debug19'
@@ -1,16 +1,16 @@
1
1
  = Vkontakte
2
2
 
3
- The easiest way to access Vkontakte API and some other utils.
3
+ The easiest way to access Vkontakte API and some other utils.
4
4
  More info about API:
5
5
 
6
- 1. http://vkontakte.ru/developers.php?oid=-1&p=%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F
6
+ 1. http://vk.com/developers.php?oid=-1&p=%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F
7
7
 
8
- 2. http://vkontakte.ru/developers.php?oid=-1&p=%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2_%D0%BA_API
8
+ 2. http://vk.com/developers.php?oid=-1&p=%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2_%D0%BA_API
9
9
 
10
10
  3. http://vk.com/developers.php?oid=-1&p=%D0%9F%D1%80%D0%B0%D0%B2%D0%B0_%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9
11
11
 
12
12
  == Install
13
-
13
+
14
14
  gem 'vkontakte'
15
15
 
16
16
  == Configure
@@ -22,7 +22,7 @@ More info about API:
22
22
  config.debug = false
23
23
  config.logger = File.open(Rails.root.join('log', 'vkontakte.log'), "a")
24
24
  end
25
-
25
+
26
26
  == Usage
27
27
 
28
28
  === User API by access_token
@@ -31,27 +31,29 @@ More info about API:
31
31
  user.fetch # {"response"=>[{"uid"=>2592709, ...
32
32
 
33
33
  Profile
34
-
35
- user.profile.isAppUser() # {"response"=>"1"}
36
- user.profile.getUserBalance()
37
- user.profile.getUserSettings()
34
+
35
+ user.profile.isAppUser # {"response"=>"1"}
36
+ user.profile.getUserBalance
37
+ user.profile.getUserSettings
38
38
  user.profile.likesGetList(:type => 'post')
39
39
 
40
40
  Photos
41
41
 
42
- user.photos.getAlbums()
43
- user.photos.getAlbumsCount()
42
+ user.photos.getAlbums
43
+ user.photos.getAlbumsCount
44
44
  user.photos.get(:aid => 'album_id')
45
45
 
46
46
  Groups
47
47
 
48
- user.groups.get()
48
+ user.groups.get
49
49
  user.groups.isMember(:gid => 'group_id')
50
+ user.groups.join(:gid => 1)
51
+ user.groups.leave(:gid => 1)
50
52
 
51
53
  Friends
52
-
53
- user.friends.get()
54
- user.friends.getOnline()
54
+
55
+ user.friends.get
56
+ user.friends.getOnline
55
57
 
56
58
  === Secure API
57
59
 
@@ -66,7 +68,7 @@ Check if auth_key is valid:
66
68
  def index
67
69
  @app = Vkontakte::App::Iframe.new
68
70
  @app.params = params
69
-
71
+
70
72
  if @app.valid_auth_key?
71
73
  session[:viewer_id] = params[:viewer_id]
72
74
  else
@@ -5,26 +5,27 @@ require 'active_support/core_ext/string'
5
5
  module Vkontakte
6
6
  autoload :Config, 'vkontakte/config'
7
7
  autoload :Utils, 'vkontakte/utils'
8
-
8
+
9
9
  module App
10
10
  autoload :Base, 'vkontakte/app/base'
11
11
  autoload :Iframe, 'vkontakte/app/iframe'
12
12
  autoload :Secure, 'vkontakte/app/secure'
13
13
  autoload :User, 'vkontakte/app/user'
14
14
  end
15
-
15
+
16
16
  module Api
17
17
  autoload :Base, 'vkontakte/api/base'
18
- autoload :Photos, 'vkontakte/api/photos'
19
18
  autoload :Friends, 'vkontakte/api/friends'
20
19
  autoload :Groups, 'vkontakte/api/groups'
21
- autoload :Secure, 'vkontakte/api/secure'
20
+ autoload :Likes, 'vkontakte/api/likes'
21
+ autoload :Photos, 'vkontakte/api/photos'
22
22
  autoload :Profile, 'vkontakte/api/profile'
23
+ autoload :Secure, 'vkontakte/api/secure'
23
24
  end
24
-
25
+
25
26
  mattr_accessor :config
26
27
  @@config = Config.new
27
-
28
+
28
29
  def self.setup(&block)
29
30
  yield config
30
31
  end
@@ -2,20 +2,20 @@ module Vkontakte
2
2
  module Api
3
3
  class Base
4
4
  attr_accessor :app, :default_params
5
-
5
+
6
6
  delegate :call, :to => :app
7
-
7
+
8
8
  def initialize(base)
9
9
  @app = base
10
10
  end
11
-
11
+
12
12
  def default_params
13
13
  @default_params ||= {}
14
14
  end
15
-
15
+
16
16
  def call(method_name, params = {})
17
17
  params = default_params.merge(params)
18
- @app.call(method_name, params)
18
+ @app.call(method_name, params)['response']
19
19
  end
20
20
  end
21
21
  end
@@ -1,7 +1,7 @@
1
1
  module Vkontakte
2
2
  module Api
3
3
  module Friends
4
-
4
+
5
5
  def self.included(base)
6
6
  base.class_eval do
7
7
  define_method :friends do
@@ -9,29 +9,29 @@ module Vkontakte
9
9
  end
10
10
  end
11
11
  end
12
-
12
+
13
13
  class Standart < Api::Base
14
- # Возвращает список идентификаторов друзей пользователя или
15
- # расширенную информацию о друзьях пользователя (при использовании параметра fields).
16
- # http://vkontakte.ru/developers.php?oid=-1&p=friends.get
14
+ # Возвращает список идентификаторов друзей пользователя или
15
+ # расширенную информацию о друзьях пользователя (при использовании параметра fields).
16
+ # http://vk.com/developers.php?oid=-1&p=friends.get
17
17
  #
18
18
  def get(options = {})
19
19
  call('friends.get', options)
20
20
  end
21
-
22
- # Возвращает список идентификаторов друзей текущего пользователя, которые установили данное приложение.
21
+
22
+ # Возвращает список идентификаторов друзей текущего пользователя, которые установили данное приложение.
23
23
  #
24
24
  def getAppUsers(options = {})
25
25
  call('friends.getAppUsers', options)
26
26
  end
27
-
28
- # Возвращает список идентификаторов, находящихся на сайте друзей, текущего пользователя.
27
+
28
+ # Возвращает список идентификаторов, находящихся на сайте друзей, текущего пользователя.
29
29
  #
30
30
  def getOnline(options = {})
31
31
  call('friends.getOnline', options)
32
32
  end
33
-
34
- # Возвращает список идентификаторов общих друзей между парой пользователей.
33
+
34
+ # Возвращает список идентификаторов общих друзей между парой пользователей.
35
35
  #
36
36
  def getMutual(options = {})
37
37
  call('friends.getMutual', options)
@@ -1,7 +1,7 @@
1
1
  module Vkontakte
2
2
  module Api
3
3
  module Groups
4
-
4
+
5
5
  def self.included(base)
6
6
  base.class_eval do
7
7
  define_method :groups do
@@ -9,32 +9,46 @@ module Vkontakte
9
9
  end
10
10
  end
11
11
  end
12
-
12
+
13
13
  class Standart < Api::Base
14
14
  # Возвращает список групп указанного пользователя.
15
- # http://vkontakte.ru/developers.php?oid=-1&p=groups.get
15
+ # http://vk.com/developers.php?oid=-1&p=groups.get
16
16
  #
17
17
  def get(options = {})
18
18
  call('groups.get', options)
19
19
  end
20
-
21
- # Возвращает информацию о заданной группе или о нескольких группах.
20
+
21
+ # Возвращает информацию о заданной группе или о нескольких группах.
22
22
  #
23
23
  def getById(options = {})
24
24
  call('groups.getById', options)
25
25
  end
26
-
27
- # Возвращает информацию о том является ли пользователь участником заданной группы.
26
+
27
+ # Возвращает информацию о том является ли пользователь участником заданной группы.
28
28
  #
29
29
  def isMember(options = {})
30
30
  call('groups.isMember', options)
31
31
  end
32
-
33
- # Возвращает список участников группы.
32
+
33
+ # Возвращает список участников группы.
34
34
  #
35
35
  def getMembers(options = {})
36
36
  call('groups.getMembers', options)
37
37
  end
38
+
39
+ # Добавляет как участника группы
40
+ # http://vk.com/developers.php?o=-1&p=groups.join
41
+ #
42
+ def join(options = {})
43
+ call('groups.join', options)
44
+ end
45
+
46
+ # Добавляет как участника группы
47
+ # http://vk.com/developers.php?o=-1&p=groups.leave
48
+ #
49
+ def leave(options = {})
50
+ call('groups.leave', options)
51
+ end
38
52
  end
39
53
  end
40
54
  end
@@ -0,0 +1,28 @@
1
+ module Vkontakte
2
+ module Api
3
+ module Likes
4
+
5
+ def self.included(base)
6
+ base.class_eval do
7
+ define_method :likes do
8
+ @likes ||= Standart.new(self)
9
+ end
10
+ end
11
+ end
12
+
13
+ class Standart < Api::Base
14
+ # http://vk.com/developers.php?oid=-1&p=likes.getList
15
+ #
16
+ def getList(options = {})
17
+ call('likes.getList', options)
18
+ end
19
+
20
+ # http://vk.com/developers.php?o=-1&p=likes.isLiked
21
+ #
22
+ def isLiked(options = {})
23
+ call('likes.isLiked', options)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,7 +1,7 @@
1
1
  module Vkontakte
2
2
  module Api
3
3
  module Secure
4
-
4
+
5
5
  def self.included(base)
6
6
  base.class_eval do
7
7
  define_method :secure do
@@ -9,62 +9,62 @@ module Vkontakte
9
9
  end
10
10
  end
11
11
  end
12
-
12
+
13
13
  class Standart < Api::Base
14
-
14
+
15
15
  def default_options
16
- {
17
- :timestamp => Time.now.utc.to_i,
16
+ {
17
+ :timestamp => Time.now.utc.to_i,
18
18
  :random => Kernel.rand(10000),
19
- :client_secret => Vkontakte.config.app_secret
19
+ :client_secret => Vkontakte.config.app_secret
20
20
  }
21
21
  end
22
-
22
+
23
23
  # Отправляет уведомление пользователю.
24
- # http://vkontakte.ru/developers.php?oid=-1&p=secure.sendNotification
24
+ # http://vk.com/developers.php?oid=-1&p=secure.sendNotification
25
25
  #
26
26
  def sendNotification(options = {})
27
27
  options = default_options.merge(options)
28
28
  call('secure.sendNotification', options)
29
29
  end
30
-
31
- # Возвращает платежный баланс (счет) приложения в сотых долях голоса.
30
+
31
+ # Возвращает платежный баланс (счет) приложения в сотых долях голоса.
32
32
  #
33
33
  def getAppBalance(options = {})
34
34
  options = default_options.merge(options)
35
35
  call("secure.getAppBalance", options)
36
36
  end
37
-
38
- # Возвращает баланс пользователя на счету приложения в сотых долях голоса.
37
+
38
+ # Возвращает баланс пользователя на счету приложения в сотых долях голоса.
39
39
  #
40
40
  def getBalance(options = {})
41
41
  options = default_options.merge(options)
42
42
  call("secure.getBalance", options)
43
43
  end
44
-
44
+
45
45
  # Списывает голоса со счета пользователя на счет приложения (в сотых долях).
46
46
  #
47
47
  def withdrawVotes(options = {})
48
48
  options = default_options.merge(options)
49
49
  call("secure.withdrawVotes", options)
50
50
  end
51
-
52
- # Выводит историю транзакций по переводу голосов между пользователями и приложением.
51
+
52
+ # Выводит историю транзакций по переводу голосов между пользователями и приложением.
53
53
  #
54
54
  def getTransactionsHistory(options = {})
55
55
  options = default_options.merge(options)
56
56
  call("secure.getTransactionsHistory", options)
57
57
  end
58
-
59
- # Поднимает пользователю рейтинг от имени приложения.
58
+
59
+ # Поднимает пользователю рейтинг от имени приложения.
60
60
  #
61
61
  def addRating(options = {})
62
62
  options = default_options.merge(options)
63
63
  call("secure.addRating", options)
64
64
  end
65
-
66
- # Устанавливает счетчик, который выводится пользователю жирным шрифтом в левом меню.
67
- # Это происходит только в том случае, если пользователь добавил приложение в левое меню со страницы приложения,
65
+
66
+ # Устанавливает счетчик, который выводится пользователю жирным шрифтом в левом меню.
67
+ # Это происходит только в том случае, если пользователь добавил приложение в левое меню со страницы приложения,
68
68
  # списка приложений или настроек.
69
69
  #
70
70
  def setCounter(options = {})
@@ -4,84 +4,83 @@ module Vkontakte
4
4
  module App
5
5
  class Base
6
6
  include ::HTTParty
7
-
8
- base_uri "https://api.vkontakte.ru"
7
+
8
+ base_uri "https://api.vk.com"
9
9
  format Vkontakte.config.format
10
10
  debug_output Vkontakte.config.logger
11
-
11
+
12
12
  attr_accessor :auth
13
-
13
+
14
14
  def initialize(app_id = nil, app_secret = nil)
15
15
  @config = {
16
- :app_id => (app_id || Vkontakte.config.app_id),
16
+ :app_id => (app_id || Vkontakte.config.app_id),
17
17
  :app_secret => (app_secret || Vkontakte.config.app_secret)
18
18
  }
19
19
  end
20
-
21
- # http://vkontakte.ru/developers.php?oid=-1&p=%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F
20
+
21
+ # http://vk.com/developers.php?oid=-1&p=%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F
22
22
  # Site auth:
23
- # https://api.vkontakte.ru/oauth/access_token?
23
+ # https://oauth.vk.com/access_token?
24
24
  # client_id=APP_ID&
25
25
  # client_secret=APP_SECRET&
26
26
  # code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a
27
27
  #
28
28
  # Server auth:
29
- # https://api.vkontakte.ru/oauth/access_token?
30
- # client_id=' + APP_ID + '&client_secret=' + APP_SECRET + '&grant_type=client_credentials'
29
+ # https://oauth.vk.com/access_token?client_id=' + APP_ID + '&client_secret=' + APP_SECRET + '&grant_type=client_credentials'
31
30
  #
32
31
  # Response:
33
32
  # {"access_token":"533bacf01e11f55b536a565b57531ac114461ae8736d6506a3", "expires_in":43200, "user_id":6492}
34
33
  #
35
- def authorize(code = nil, options = {})
36
- options = {
37
- :client_id => @config[:app_id],
34
+ def authorize(code = nil, params = {})
35
+ params = {
36
+ :client_id => @config[:app_id],
38
37
  :client_secret => @config[:app_secret],
39
38
  :code => code
40
- }.merge(options)
41
-
39
+ }.merge(params)
40
+
42
41
  # Server auth
43
- if options[:code].blank?
44
- options.delete(:code)
45
- options[:grant_type] = 'client_credentials'
42
+ if params[:code].blank?
43
+ params.delete(:code)
44
+ params[:grant_type] = 'client_credentials'
46
45
  end
47
-
48
- @auth = get("/oauth/access_token", options)
46
+
47
+ @auth = get("/access_token", {:query => params, :base_uri => "https://oauth.vk.com"})
49
48
  end
50
-
49
+
51
50
  # Check if app is authorized
52
51
  #
53
52
  def authorized?
54
53
  auth && auth['access_token']
55
54
  end
56
-
57
- # Выполнение запросов к API
58
- # https://api.vkontakte.ru/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN
55
+
56
+ # Выполнение запросов к API
57
+ # https://api.vk.com/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN
59
58
  # METHOD_NAME – название метода из списка функций API,
60
59
  # PARAMETERS – параметры соответствующего метода API,
61
- # ACCESS_TOKEN – ключ доступа, полученный в результате успешной авторизации приложения.
60
+ # ACCESS_TOKEN – ключ доступа, полученный в результате успешной авторизации приложения.
62
61
  # Example:
63
- # https://api.vkontakte.ru/method/getProfiles?uid=66748&access_token=533bacf01e11f55b536a565b57531ac114461ae8736d6506a3
62
+ # https://api.vk.com/method/getProfiles?uid=66748&access_token=533bacf01e11f55b536a565b57531ac114461ae8736d6506a3
64
63
  #
65
- # More info: http://vkontakte.ru/developers.php?oid=-1&p=%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2_%D0%BA_API
64
+ # More info: http://vk.com/developers.php?oid=-1&p=%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2_%D0%BA_API
66
65
  #
67
66
  def call(method_name, params = {})
68
67
  params[:access_token] ||= @auth['access_token'] if authorized?
69
-
68
+
70
69
  unless params[:access_token].blank?
71
- get("/method/#{method_name}", params)
70
+ get("/method/#{method_name}", {:query => params, :base_uri => "https://api.vk.com"})
72
71
  else
73
72
  raise VkException.new(method_name, {
74
- :error => 'access_token is blank',
73
+ :error => 'access_token is blank',
75
74
  :error_description => 'You need first authorize app before call API methods.'
76
75
  })
77
76
  end
78
77
  end
79
-
78
+
80
79
  protected
81
-
80
+
82
81
  def get(method_name, options = {})
83
- response = self.class.get(method_name, :query => options)
84
-
82
+ response = self.class.get(method_name, options)
83
+
85
84
  if response['error']
86
85
  raise VkException.new(method_name, response)
87
86
  else
@@ -89,7 +88,7 @@ module Vkontakte
89
88
  end
90
89
  end
91
90
  end
92
-
91
+
93
92
  # Errors
94
93
  # {"error":"invalid_grant","error_description":"Code is expired."}
95
94
  # {"error":{"error_code":5,"error_msg":"User authorization failed: invalid application type","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"getProfiles"},{"key":"uid","value":"66748"},{"key":"access_token","value":"533bacf01e11f55b536a565b57531ac114461ae8736d6506a3"}]}}
@@ -98,13 +97,13 @@ module Vkontakte
98
97
  def initialize(method_name, options)
99
98
  error_hash = options.symbolize_keys
100
99
  @message = "Error in #{method_name}: "
101
-
100
+
102
101
  if error_hash[:error].is_a?(Hash)
103
102
  @message += error_hash[:error].inspect
104
103
  else
105
104
  @message += [error_hash[:error], error_hash[:error_description]].join('-')
106
105
  end
107
-
106
+
108
107
  super @message
109
108
  end
110
109
  end