smsconnect 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/README.md +19 -5
- data/lib/error.rb +37 -0
- data/lib/smsconnect.rb +156 -23
- data/lib/smsconnect/version.rb +1 -1
- data/smsconnect-0.0.1.gem +0 -0
- data/test.rb +36 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f891b83da70ce61f6e3e971aa9a2ccd3f26e14a
|
4
|
+
data.tar.gz: 9eaad9281884239069c6125ae6c9b37886db162b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d20ddcbc7c8d31152f8c8052ff6a9862e77ac776e3961224f865f43bf832fa75d38932eb76f63e87ab0bc6afc0383c6f5c6538b615b3b704eeda676eaf88b36c
|
7
|
+
data.tar.gz: 0f8bef82a91e53150faeb0a24c44d29f0a968c202c6e226b2f531da20e67cca05fe8e9d83fd222aefbe74a2542a05fe5289176c37b8261c92b69b86cf1c4e609
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
<img align="right" src="http://www.smsbrana.cz/images/logo.png">
|
4
4
|
|
5
|
-
Send and receive SMS with
|
5
|
+
Send and receive SMS with Ruby (for Czech Republic)
|
6
6
|
|
7
|
-
[Registration](
|
7
|
+
[Registration](https://www.smsbrana.cz/registrace.html)
|
8
8
|
|
9
9
|
## Installation
|
10
10
|
|
@@ -30,21 +30,35 @@ Or install it yourself as:
|
|
30
30
|
require 'smsconnect'
|
31
31
|
|
32
32
|
sms = Smsconnect::Smsconnect.new({'login'=>'<your_login>', 'password' => '<your_password>'})
|
33
|
-
sms.inbox
|
33
|
+
puts sms.inbox
|
34
34
|
```
|
35
35
|
|
36
36
|
### Send SMS
|
37
37
|
|
38
|
+
simple usage:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
require 'smsconnect'
|
42
|
+
|
43
|
+
sms = Smsconnect::Smsconnect.new({'login'=>'<your_login>', 'password' => '<your_password>'})
|
44
|
+
puts sms.send('<phone_number>', '<text_sms>')
|
45
|
+
```
|
46
|
+
|
47
|
+
or you can use other optional params:
|
48
|
+
|
38
49
|
```ruby
|
39
50
|
require 'smsconnect'
|
40
51
|
|
41
52
|
sms = Smsconnect::Smsconnect.new({'login'=>'<your_login>', 'password' => '<your_password>'})
|
42
|
-
sms.send('<phone_number>', '<text_sms>')
|
53
|
+
puts sms.send('<phone_number>', '<text_sms>', '<when>', '<delivery_report>', '<sender_id>', '<sender_phone>', '<user_id>', '<data_code>', '<answer_mail>', '<delivery_mail>')
|
43
54
|
```
|
44
55
|
|
56
|
+
###
|
57
|
+
|
58
|
+
|
45
59
|
## Contributing
|
46
60
|
|
47
|
-
1. Fork it ( https://github.com/
|
61
|
+
1. Fork it ( https://github.com/pryznar/smsconnect/fork )
|
48
62
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
49
63
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
50
64
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/lib/error.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Smsconnect
|
2
|
+
class Error
|
3
|
+
|
4
|
+
ERRORS = {
|
5
|
+
'-1' => 'duplicitni user_id - stejne oznacena sms byla odeslana jiz v minulosti',
|
6
|
+
'0' => 'OK',
|
7
|
+
'1' => 'neznama chyba',
|
8
|
+
'2' => 'neplatny login',
|
9
|
+
'3' => 'neplatny hash nebo password (podle varianty zabezpeceni prihlaseni)',
|
10
|
+
'4' => 'neplatny time, vetsi odchylka casu mezi servery nez maximalni akceptovana v nastaveni sluzby SMS Connect',
|
11
|
+
'5' => 'nepovolena IP, viz nastaveni sluzby SMS Connect',
|
12
|
+
'6' => 'neplatny nazev akce',
|
13
|
+
'7' => 'tato sul byla jiz jednou za dany den pouzita',
|
14
|
+
'8' => 'nebylo navazano spojeni s databazi',
|
15
|
+
'9' => 'nedostatecny kredit',
|
16
|
+
'10' => 'neplatne cislo prijemce SMS',
|
17
|
+
'11' => 'prazdny text zpravy',
|
18
|
+
'12' => 'SMS je delsi nez povolenych 459 znaku',
|
19
|
+
}
|
20
|
+
|
21
|
+
def initialize(error)
|
22
|
+
@error = error
|
23
|
+
end
|
24
|
+
|
25
|
+
def message
|
26
|
+
if ERRORS.key? @error
|
27
|
+
return ERRORS[@error]
|
28
|
+
end
|
29
|
+
"Unknown error"
|
30
|
+
end
|
31
|
+
|
32
|
+
def is_error?
|
33
|
+
@error != '0' && @error != nil
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
data/lib/smsconnect.rb
CHANGED
@@ -1,12 +1,59 @@
|
|
1
|
-
require
|
1
|
+
require 'smsconnect/version'
|
2
2
|
require 'digest'
|
3
3
|
require 'securerandom'
|
4
4
|
require 'net/http'
|
5
|
+
require 'nokogiri'
|
6
|
+
require 'error'
|
5
7
|
|
6
8
|
module Smsconnect
|
9
|
+
|
10
|
+
class SendResponse
|
11
|
+
attr_reader :error, :price, :count, :credit, :sms_id, :plain_xml
|
12
|
+
|
13
|
+
def initialize(err, price, count, credit, sms_id, plain_xml)
|
14
|
+
@error = Error.new(err)
|
15
|
+
@price = price
|
16
|
+
@count = count
|
17
|
+
@credit = credit
|
18
|
+
@sms_id = sms_id
|
19
|
+
@plain_xml = plain_xml
|
20
|
+
end
|
21
|
+
|
22
|
+
def is_error?
|
23
|
+
@error.is_error?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class InboxResponse
|
28
|
+
attr_reader :error, :delivery_sms, :delivery_report
|
29
|
+
|
30
|
+
def initialize(err, delivery_sms, delivery_report)
|
31
|
+
@error = Error.new(err)
|
32
|
+
@delivery_sms = delivery_sms
|
33
|
+
@delivery_report = delivery_report
|
34
|
+
end
|
35
|
+
|
36
|
+
def is_error?
|
37
|
+
@error.is_error?
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class CreditResponse
|
42
|
+
attr_reader :error, :credit
|
43
|
+
|
44
|
+
def initialize(err, credit)
|
45
|
+
@error = Error.new(err)
|
46
|
+
@credit = credit
|
47
|
+
end
|
48
|
+
|
49
|
+
def is_error?
|
50
|
+
@error.is_error?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
7
54
|
class Smsconnect
|
8
55
|
|
9
|
-
API_SCRIPT = "
|
56
|
+
API_SCRIPT = "https://api.smsbrana.cz/smsconnect/http.php?"
|
10
57
|
|
11
58
|
def initialize(settings)
|
12
59
|
@settings = settings
|
@@ -17,47 +64,133 @@ module Smsconnect
|
|
17
64
|
end
|
18
65
|
|
19
66
|
def getAuth
|
20
|
-
if @settings['login'].nil? && @settings['password'].nil?
|
21
|
-
return false
|
22
|
-
else
|
23
|
-
t = Time.new
|
24
|
-
time = t.strftime("%Y%m%d") + "T" + t.strftime("%H%M%S")
|
25
|
-
salt = self.salt(10)
|
67
|
+
return false if @settings['login'].nil? && @settings['password'].nil?
|
26
68
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
69
|
+
t = Time.new
|
70
|
+
time = t.strftime("%Y%m%d") + "T" + t.strftime("%H%M%S")
|
71
|
+
salt = self.salt(10)
|
72
|
+
|
73
|
+
result = {}
|
74
|
+
result['login'] = @settings['login']
|
75
|
+
result['time'] = time
|
76
|
+
result['salt'] = salt
|
77
|
+
result['hash'] = Digest::MD5.hexdigest(@settings['password'] + time + salt)
|
78
|
+
|
79
|
+
result
|
35
80
|
end
|
36
81
|
|
37
82
|
def inbox
|
38
83
|
data = self.getAuth
|
39
84
|
data['action'] = 'inbox'
|
40
|
-
data = data.map{|k,v| "#{k}=#{v}"}.join('&')
|
85
|
+
data = data.map{ |k,v| "#{k}=#{v}" }.join('&')
|
41
86
|
url = URI.parse(API_SCRIPT + data)
|
87
|
+
http = Net::HTTP.new(url.host, url.port)
|
88
|
+
http.use_ssl = url.scheme == 'https'
|
89
|
+
|
42
90
|
req = Net::HTTP::Get.new(url.to_s)
|
43
|
-
res =
|
91
|
+
res = http.start { |http|
|
44
92
|
http.request(req)
|
45
93
|
}
|
46
|
-
|
94
|
+
res.body
|
95
|
+
|
96
|
+
doc = Nokogiri::XML(res.body)
|
97
|
+
err = nil
|
98
|
+
delivery_sms = []
|
99
|
+
delivery_report = []
|
100
|
+
doc.xpath('//result').each do |result|
|
101
|
+
err = result.at_xpath('err').content if result.at_xpath('err')
|
102
|
+
result.xpath('//inbox/delivery_sms/item').each do |a|
|
103
|
+
delivery_sms << {
|
104
|
+
number: a.at_xpath('number').text,
|
105
|
+
time: a.at_xpath('time').text,
|
106
|
+
message: a.at_xpath('message').text
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
err = result.at_xpath('err').content if result.at_xpath('err')
|
111
|
+
result.xpath('//inbox/delivery_report/item').each do |a|
|
112
|
+
delivery_report << {
|
113
|
+
idsms: a.at_xpath('idsms').text,
|
114
|
+
time: a.at_xpath('time').text,
|
115
|
+
status: a.at_xpath('status').text
|
116
|
+
}
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
puts delivery_sms
|
121
|
+
puts delivery_report
|
122
|
+
|
123
|
+
InboxResponse.new(err, delivery_sms, delivery_report)
|
124
|
+
end
|
125
|
+
|
126
|
+
def credit_info
|
127
|
+
data = self.getAuth
|
128
|
+
data['action'] = 'credit_info'
|
129
|
+
data = data.map { |k,v| "#{k}=#{v}" }.join('&')
|
130
|
+
url = URI.parse(API_SCRIPT + data)
|
131
|
+
|
132
|
+
puts url
|
133
|
+
|
134
|
+
http = Net::HTTP.new(url.host, url.port)
|
135
|
+
http.use_ssl = url.scheme == 'https'
|
136
|
+
req = Net::HTTP::Get.new(url.to_s)
|
137
|
+
res = http.start { |http|
|
138
|
+
http.request(req)
|
139
|
+
}
|
140
|
+
|
141
|
+
doc = Nokogiri::XML(res.body)
|
142
|
+
err = nil
|
143
|
+
price = nil
|
144
|
+
credit = nil
|
145
|
+
sms_count = nil
|
146
|
+
sms_id = nil
|
147
|
+
doc.xpath('//result').each do |result|
|
148
|
+
err = result.at_xpath('err').content if result.at_xpath('err')
|
149
|
+
credit = result.at_xpath('credit').content if result.at_xpath('credit')
|
150
|
+
end
|
151
|
+
|
152
|
+
CreditResponse.new(err, credit)
|
47
153
|
end
|
48
154
|
|
49
|
-
def send(number, text)
|
155
|
+
def send(number, text, send_at = nil, delivery_report=nil, sender_id=nil, sender_phone=nil, user_id=nil, data_code=nil, answer_mail=nil, delivery_mail=nil)
|
50
156
|
data = self.getAuth
|
51
157
|
data['action'] = 'send_sms'
|
52
158
|
data['number'] = number
|
53
159
|
data['message'] = text.gsub(/ /, '+')
|
54
|
-
|
160
|
+
|
161
|
+
data['when'] = send_at if send_at
|
162
|
+
data['delivery_report'] = delivery_report if delivery_report
|
163
|
+
data['sender_id'] = sender_id if sender_id
|
164
|
+
data['sender_phone'] = sender_phone if sender_phone
|
165
|
+
data['user_id'] = user_id if user_id
|
166
|
+
data['data_code'] = data_code if data_code
|
167
|
+
data['answer_mail'] = answer_mail if answer_mail
|
168
|
+
data['delivery_mail'] = delivery_mail if delivery_mail
|
169
|
+
data = data.map { |k,v| "#{k}=#{v}" }.join('&')
|
55
170
|
url = URI.parse(API_SCRIPT + data)
|
171
|
+
|
172
|
+
http = Net::HTTP.new(url.host, url.port)
|
173
|
+
http.use_ssl = url.scheme == 'https'
|
56
174
|
req = Net::HTTP::Get.new(url.to_s)
|
57
|
-
res =
|
175
|
+
res = http.start { |http|
|
58
176
|
http.request(req)
|
59
177
|
}
|
60
|
-
|
178
|
+
|
179
|
+
doc = Nokogiri::XML(res.body)
|
180
|
+
err = nil
|
181
|
+
price = nil
|
182
|
+
credit = nil
|
183
|
+
sms_count = nil
|
184
|
+
sms_id = nil
|
185
|
+
doc.xpath('//result').each do |result|
|
186
|
+
err = result.at_xpath('err').content if result.at_xpath('err')
|
187
|
+
price = result.at_xpath('price').content if result.at_xpath('price')
|
188
|
+
sms_count = result.at_xpath('sms_count').content if result.at_xpath('sms_count')
|
189
|
+
credit = result.at_xpath('credit').content if result.at_xpath('credit')
|
190
|
+
sms_id = result.at_xpath('sms_id').content if result.at_xpath('sms_id')
|
191
|
+
end
|
192
|
+
|
193
|
+
SendResponse.new(err, price, sms_count, credit, sms_id, res.body)
|
61
194
|
end
|
62
195
|
end
|
63
196
|
end
|
data/lib/smsconnect/version.rb
CHANGED
Binary file
|
data/test.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require './lib/smsconnect'
|
2
|
+
require './lib/smsconnect/version'
|
3
|
+
|
4
|
+
login = 'test'
|
5
|
+
password = 'test'
|
6
|
+
|
7
|
+
connect = Smsconnect::Smsconnect.new ({'login' => login, 'password' => password})
|
8
|
+
|
9
|
+
# result = connect.send('123123123', 'ahoj')
|
10
|
+
# result = connect.send('+421918123456', 'test')
|
11
|
+
result = connect.inbox
|
12
|
+
# result = connect.credit_info
|
13
|
+
|
14
|
+
if result.is_error?
|
15
|
+
puts "ERROR:"
|
16
|
+
puts result.error.message
|
17
|
+
else
|
18
|
+
puts "OK"
|
19
|
+
if result.is_a? Smsconnect::CreditResponse
|
20
|
+
puts "Credit info: #{result.credit}"
|
21
|
+
elsif result.is_a? Smsconnect::SendResponse
|
22
|
+
puts "Send response"
|
23
|
+
puts " - price #{result.price}"
|
24
|
+
puts " - sms_count #{result.count}"
|
25
|
+
puts " - credit #{result.credit}"
|
26
|
+
puts " - sms_id #{result.sms_id}"
|
27
|
+
elsif result.is_a? Smsconnect::InboxResponse
|
28
|
+
puts "Inbox response"
|
29
|
+
puts " - Delivery SMS"
|
30
|
+
puts result.delivery_sms
|
31
|
+
puts " - Delivery Report"
|
32
|
+
puts result.delivery_report
|
33
|
+
else
|
34
|
+
puts "Uknown response"
|
35
|
+
end
|
36
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smsconnect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Ryznar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -51,9 +51,12 @@ files:
|
|
51
51
|
- LICENSE.txt
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
|
+
- lib/error.rb
|
54
55
|
- lib/smsconnect.rb
|
55
56
|
- lib/smsconnect/version.rb
|
57
|
+
- smsconnect-0.0.1.gem
|
56
58
|
- smsconnect.gemspec
|
59
|
+
- test.rb
|
57
60
|
homepage: ''
|
58
61
|
licenses:
|
59
62
|
- MIT
|
@@ -74,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
77
|
version: '0'
|
75
78
|
requirements: []
|
76
79
|
rubyforge_project:
|
77
|
-
rubygems_version: 2.
|
80
|
+
rubygems_version: 2.6.11
|
78
81
|
signing_key:
|
79
82
|
specification_version: 4
|
80
83
|
summary: Send and receive SMS with node.js (for Czech Republic)
|