smsconnect 0.0.1 → 0.0.2
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.
- 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)
|