mailru-api 0.4.1
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/lib/mailru-api.rb +136 -0
- data/lib/mailru-api/audio.rb +23 -0
- data/lib/mailru-api/error.rb +43 -0
- data/lib/mailru-api/events.rb +15 -0
- data/lib/mailru-api/friends.rb +31 -0
- data/lib/mailru-api/guestbook.rb +19 -0
- data/lib/mailru-api/mail.rb +15 -0
- data/lib/mailru-api/messages.rb +23 -0
- data/lib/mailru-api/mobile.rb +18 -0
- data/lib/mailru-api/notifications.rb +15 -0
- data/lib/mailru-api/photos.rb +27 -0
- data/lib/mailru-api/request.rb +103 -0
- data/lib/mailru-api/stream.rb +39 -0
- data/lib/mailru-api/users.rb +27 -0
- metadata +60 -0
data/lib/mailru-api.rb
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
require 'mailru-api/error'
|
4
|
+
require 'mailru-api/request'
|
5
|
+
require 'mailru-api/audio'
|
6
|
+
require 'mailru-api/events'
|
7
|
+
require 'mailru-api/friends'
|
8
|
+
require 'mailru-api/guestbook'
|
9
|
+
require 'mailru-api/mail'
|
10
|
+
require 'mailru-api/mobile'
|
11
|
+
require 'mailru-api/notifications'
|
12
|
+
require 'mailru-api/photos'
|
13
|
+
require 'mailru-api/stream'
|
14
|
+
require 'mailru-api/users'
|
15
|
+
|
16
|
+
module MailRU
|
17
|
+
class APIConfiguration
|
18
|
+
attr_accessor :app_id, :secret_key, :private_key, :session_key, :uid, :format
|
19
|
+
end
|
20
|
+
|
21
|
+
class APIConfigurationBuilder
|
22
|
+
attr_reader :configuration
|
23
|
+
|
24
|
+
def initialize(&block)
|
25
|
+
if block_given?
|
26
|
+
@configuration = APIConfiguration.new
|
27
|
+
instance_eval(&block)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def app_id value
|
32
|
+
@configuration.app_id = value
|
33
|
+
end
|
34
|
+
|
35
|
+
def secret_key value
|
36
|
+
@configuration.secret_key = value
|
37
|
+
end
|
38
|
+
|
39
|
+
def private_key value
|
40
|
+
@configuration.private_key = value
|
41
|
+
end
|
42
|
+
|
43
|
+
def session_key value
|
44
|
+
@configuration.session_key = value
|
45
|
+
end
|
46
|
+
|
47
|
+
def uid value
|
48
|
+
@configuration.uid = value
|
49
|
+
end
|
50
|
+
|
51
|
+
def format value
|
52
|
+
@configuration.format = value
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class API
|
57
|
+
module Format
|
58
|
+
XML = 'xml'
|
59
|
+
JSON = 'json'
|
60
|
+
end
|
61
|
+
|
62
|
+
PATH = 'http://www.appsmail.ru/platform/api'
|
63
|
+
|
64
|
+
attr_accessor :app_id, :secret_key, :private_key, :session_key, :uid, :format
|
65
|
+
|
66
|
+
def initialize options = {}, &block
|
67
|
+
@app_id = options[:app_id]
|
68
|
+
@secret_key = options[:secret_key]
|
69
|
+
@private_key = options[:private_key]
|
70
|
+
@session_key = options[:session_key]
|
71
|
+
@uid = options[:uid]
|
72
|
+
@format = options[:format]
|
73
|
+
|
74
|
+
if block_given?
|
75
|
+
if block.arity == 1
|
76
|
+
yield self
|
77
|
+
else
|
78
|
+
configuration = APIConfigurationBuilder.new(&block).configuration
|
79
|
+
|
80
|
+
unless configuration.nil?
|
81
|
+
@app_id = configuration.app_id || @app_id
|
82
|
+
@secret_key = configuration.secret_key || @secret_key
|
83
|
+
@private_key = configuration.private_key || @private_key
|
84
|
+
@session_key = configuration.session_key || @session_key
|
85
|
+
@uid = configuration.uid || @uid
|
86
|
+
@format = configuration.format || @format
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def audio
|
93
|
+
return Audio.new(self)
|
94
|
+
end
|
95
|
+
|
96
|
+
def events
|
97
|
+
return Events.new(self)
|
98
|
+
end
|
99
|
+
|
100
|
+
def friends
|
101
|
+
return Friends.new(self)
|
102
|
+
end
|
103
|
+
|
104
|
+
def guestbook
|
105
|
+
return Guestbook.new(self)
|
106
|
+
end
|
107
|
+
|
108
|
+
def mail
|
109
|
+
return Mail.new(self)
|
110
|
+
end
|
111
|
+
|
112
|
+
def messages
|
113
|
+
return Messages.new(self)
|
114
|
+
end
|
115
|
+
|
116
|
+
def mobile
|
117
|
+
return Mobile.new(self)
|
118
|
+
end
|
119
|
+
|
120
|
+
def notifications
|
121
|
+
return Notifications.new(self)
|
122
|
+
end
|
123
|
+
|
124
|
+
def photos
|
125
|
+
return Photos.new(self)
|
126
|
+
end
|
127
|
+
|
128
|
+
def stream
|
129
|
+
return Stream.new(self)
|
130
|
+
end
|
131
|
+
|
132
|
+
def users
|
133
|
+
return Users.new(self)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
module MailRU
|
4
|
+
class API
|
5
|
+
class Audio
|
6
|
+
def initialize api
|
7
|
+
@api = api
|
8
|
+
end
|
9
|
+
|
10
|
+
def get params = {}
|
11
|
+
GetRequest.new(@api, 'audio.get', params).get
|
12
|
+
end
|
13
|
+
|
14
|
+
def link params = {}
|
15
|
+
GetRequest.new(@api, 'audio.link', params).get
|
16
|
+
end
|
17
|
+
|
18
|
+
def search params = {}
|
19
|
+
GetRequest.new(@api, 'audio.search', params).get
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
module MailRU
|
4
|
+
class API
|
5
|
+
class Error < RuntimeError
|
6
|
+
attr_accessor :code, :description
|
7
|
+
|
8
|
+
def initialize code, description
|
9
|
+
@code = Integer(code)
|
10
|
+
@description = description
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.create(code, description)
|
14
|
+
case code
|
15
|
+
when 1 then UnknwonError.new(code, description)
|
16
|
+
when 2 then UnknownMethodCalledError.new(code, description)
|
17
|
+
when 3 then MethodIsDeprecatedError.new(code, description)
|
18
|
+
when 100 then InvalidParameterError.new(code, description)
|
19
|
+
when 102 then AuthorizationFailedError.new(code, description)
|
20
|
+
when 103 then ApplicationLookupFailedError.new(code, description)
|
21
|
+
when 104 then IncorrectSignatureError.new(code, description)
|
22
|
+
when 105 then ApplicationIsNotInstalledError.new(code, description)
|
23
|
+
when 200 then PermissionDeniedError.new(code, description)
|
24
|
+
when 202 then AccessToObjectDeniedError.new(code, description)
|
25
|
+
when 501 then IncorrectImageError.new(code, description)
|
26
|
+
else Error.new(code, description)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class UnknownError < Error; end
|
32
|
+
class UnknownMethodCalledError < Error; end
|
33
|
+
class MethodIsDeprecatedError < Error; end
|
34
|
+
class InvalidParameterError < Error; end
|
35
|
+
class AuthorizationFailedError < Error; end
|
36
|
+
class ApplicationLookupFailedError < Error; end
|
37
|
+
class IncorrectSignatureError < Error; end
|
38
|
+
class ApplicationIsNotInstalledError < Error; end
|
39
|
+
class PermissionDeniedError < Error; end
|
40
|
+
class AccessToObjectDeniedError < Error; end
|
41
|
+
class IncorrectImageError < Error; end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
module MailRU
|
4
|
+
class API
|
5
|
+
class Friends
|
6
|
+
RETURN_OBJECTS = 1
|
7
|
+
RETURN_UIDS = 0
|
8
|
+
|
9
|
+
def initialize api
|
10
|
+
@api = api
|
11
|
+
end
|
12
|
+
|
13
|
+
def get params = {}
|
14
|
+
GetRequest.new(@api, 'friends.get', params).get
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_app_users params = {}
|
18
|
+
GetRequest.new(@api, 'friends.getAppUsers', params).get
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_invitations_count params = {}
|
22
|
+
GetRequest.new(@api, 'friends.getInvitationsCount', params).get
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_online params = {}
|
26
|
+
GetRequest.new(@api, 'friends.getOnline', params).get
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
module MailRU
|
4
|
+
class API
|
5
|
+
class Guestbook
|
6
|
+
def initialize api
|
7
|
+
@api = api
|
8
|
+
end
|
9
|
+
|
10
|
+
def get params = {}
|
11
|
+
GetRequest.new(@api, 'guestbook.get', params).get
|
12
|
+
end
|
13
|
+
|
14
|
+
def post params = {}
|
15
|
+
PostRequest.new(@api, 'guestbook.post', params).post
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
module MyMailRU
|
4
|
+
class API
|
5
|
+
class Messages
|
6
|
+
def get_thread params = {}
|
7
|
+
GetRequest.new(@api, 'messages.getThread', params).get
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_threads_list params = {}
|
11
|
+
GetRequest.new(@api, 'messages.getThreadsList', params).get
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_unread_count params = {}
|
15
|
+
GetRequest.new(@api, 'messages.getUnreadCount', params).get
|
16
|
+
end
|
17
|
+
|
18
|
+
def post params = {}
|
19
|
+
PostRequest.new(@api, 'messages.post', params).post
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
module MailRU
|
4
|
+
class API
|
5
|
+
class Mobile
|
6
|
+
BASIC = 'basic'
|
7
|
+
SMARTPHONE = 'smartphone'
|
8
|
+
|
9
|
+
def initialize api
|
10
|
+
@api = api
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_canvas params = {}
|
14
|
+
GetRequest.new(@api, 'mobile.getCanvas', params, Request::Secure::No).get
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
module MailRU
|
4
|
+
class API
|
5
|
+
class Photos
|
6
|
+
def initialize api
|
7
|
+
@api = api
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_album params = {}
|
11
|
+
GetRequest.new(@api, 'photos.createAlbum', params).get
|
12
|
+
end
|
13
|
+
|
14
|
+
def get params = {}
|
15
|
+
GetRequest.new(@api, 'photos.get', params).get
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_albums params = {}
|
19
|
+
GetRequest.new(@api, 'photos.getAlbums', params).get
|
20
|
+
end
|
21
|
+
|
22
|
+
def upload params = {}
|
23
|
+
PostRequest.new(@api, 'photos.upload', params).post
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'net/http'
|
5
|
+
require 'uri'
|
6
|
+
require 'digest'
|
7
|
+
require 'rexml/document'
|
8
|
+
|
9
|
+
module MailRU
|
10
|
+
class API
|
11
|
+
class Request
|
12
|
+
|
13
|
+
module Secure
|
14
|
+
No = 0
|
15
|
+
Yes = 1
|
16
|
+
Any = 2
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize api, method, method_params, secure = Secure::Any
|
20
|
+
@api = api
|
21
|
+
@method = method
|
22
|
+
@method_params = method_params
|
23
|
+
@secure = secure
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def use_s2s?
|
29
|
+
@api.secret_key and (@secure == Secure::Yes or @secure == Secure::Any)
|
30
|
+
end
|
31
|
+
|
32
|
+
def use_c2s?
|
33
|
+
@api.private_key and (@secure == Secure::No or @secure == Secure::Any)
|
34
|
+
end
|
35
|
+
|
36
|
+
def signature
|
37
|
+
return s2s_signature if use_s2s?
|
38
|
+
return c2s_signature if use_c2s?
|
39
|
+
''
|
40
|
+
end
|
41
|
+
|
42
|
+
def c2s_signature
|
43
|
+
Digest::MD5.hexdigest(@api.uid + parameters.sort.join + @api.private_key)
|
44
|
+
end
|
45
|
+
|
46
|
+
def s2s_signature
|
47
|
+
Digest::MD5.hexdigest(parameters.sort.join + @api.secret_key)
|
48
|
+
end
|
49
|
+
|
50
|
+
def parameters
|
51
|
+
params = {app_id: @api.app_id, method: @method}
|
52
|
+
params.merge!({session_key: @api.session_key}) if @api.session_key
|
53
|
+
params.merge!({format: @api.format}) if @api.format
|
54
|
+
params.merge!(@method_params) if @method_params
|
55
|
+
params.merge!({secure: 1}) if use_s2s?
|
56
|
+
|
57
|
+
params.to_a.map{|p| p.join('=')}
|
58
|
+
end
|
59
|
+
|
60
|
+
def handle_response response
|
61
|
+
response = response.body unless response.is_a?(String)
|
62
|
+
|
63
|
+
if @api.format == Format::XML
|
64
|
+
response = REXML::Document.new(response).root
|
65
|
+
|
66
|
+
error = response if response.name == 'error'
|
67
|
+
if error
|
68
|
+
raise MailRU::API::Error.create(
|
69
|
+
error.elements['error_code'].text,
|
70
|
+
error.elements['error_msg'].text
|
71
|
+
)
|
72
|
+
end
|
73
|
+
else
|
74
|
+
response = JSON.parse(response)
|
75
|
+
if response.is_a?(Hash)
|
76
|
+
error = response['error']
|
77
|
+
if error
|
78
|
+
raise MailRU::API::Error.create(error['error_code'], error['error_msg'])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
response
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
class GetRequest < Request
|
88
|
+
def get
|
89
|
+
request = URI.escape(PATH + '?' + parameters.push("sig=#{signature}").join('&'))
|
90
|
+
handle_response(Net::HTTP.get(URI(request)))
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
class PostRequest < Request
|
95
|
+
def post
|
96
|
+
uri = URI(PATH)
|
97
|
+
request = Net::HTTP::Post.new(uri.path)
|
98
|
+
request.body = parameters.push("sig=#{signature}").join('&')
|
99
|
+
handle_response(Net::HTTP.new(uri.host, uri.port).request(request))
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
module MailRU
|
4
|
+
class API
|
5
|
+
class Stream
|
6
|
+
def initialize api
|
7
|
+
@api = api
|
8
|
+
end
|
9
|
+
|
10
|
+
def comment params = {}
|
11
|
+
GetRequest.new(@api, 'stream.comment', params).get
|
12
|
+
end
|
13
|
+
|
14
|
+
def get params = {}
|
15
|
+
GetRequest.new(@api, 'stream.get', params).get
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_by_author params = {}
|
19
|
+
GetRequest.new(@api, 'stream.getByAuthor', params).get
|
20
|
+
end
|
21
|
+
|
22
|
+
def like params = {}
|
23
|
+
GetRequest.new(@api, 'stream.like', params).get
|
24
|
+
end
|
25
|
+
|
26
|
+
def post params = {}
|
27
|
+
PostRequest.new(@api, 'stream.post', params).post
|
28
|
+
end
|
29
|
+
|
30
|
+
def share params ={}
|
31
|
+
PostRequest.new(@api, 'stream.share', params).post
|
32
|
+
end
|
33
|
+
|
34
|
+
def unlike params = {}
|
35
|
+
GetRequest.new(@api, 'stream.unlike', params).get
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#:encoding: utf-8
|
2
|
+
|
3
|
+
module MailRU
|
4
|
+
class API
|
5
|
+
class Users
|
6
|
+
def initialize api
|
7
|
+
@api = api
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_balance
|
11
|
+
GetRequest.new(@api, 'users.getBalance', params).get
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_info params = {}
|
15
|
+
GetRequest.new(@api, 'users.getInfo', params).get
|
16
|
+
end
|
17
|
+
|
18
|
+
def has_app_permission params = {}
|
19
|
+
GetRequest.new(@api, 'users.hasAppPermission', params).get
|
20
|
+
end
|
21
|
+
|
22
|
+
def is_app_user
|
23
|
+
GetRequest.new(@api, 'users.isAppUser', params).get
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mailru-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Alexey Demin
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2010-04-28 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: MailRU API for Ruby
|
15
|
+
email: demin.alexey@inbox.ru
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/mailru-api.rb
|
21
|
+
- lib/mailru-api/audio.rb
|
22
|
+
- lib/mailru-api/error.rb
|
23
|
+
- lib/mailru-api/events.rb
|
24
|
+
- lib/mailru-api/friends.rb
|
25
|
+
- lib/mailru-api/guestbook.rb
|
26
|
+
- lib/mailru-api/mail.rb
|
27
|
+
- lib/mailru-api/messages.rb
|
28
|
+
- lib/mailru-api/mobile.rb
|
29
|
+
- lib/mailru-api/notifications.rb
|
30
|
+
- lib/mailru-api/photos.rb
|
31
|
+
- lib/mailru-api/request.rb
|
32
|
+
- lib/mailru-api/stream.rb
|
33
|
+
- lib/mailru-api/users.rb
|
34
|
+
homepage: ''
|
35
|
+
licenses:
|
36
|
+
- MIT
|
37
|
+
post_install_message:
|
38
|
+
rdoc_options: []
|
39
|
+
require_paths:
|
40
|
+
- lib
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 1.8.24
|
56
|
+
signing_key:
|
57
|
+
specification_version: 3
|
58
|
+
summary: MailRU API for Ruby
|
59
|
+
test_files: []
|
60
|
+
has_rdoc:
|