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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c72f87c7585790b91620ccf0285c85abe11ce62
4
- data.tar.gz: 0c6a5fad3d5ee9b9703d1a4ce1dd2ef09f3adba9
3
+ metadata.gz: 2f891b83da70ce61f6e3e971aa9a2ccd3f26e14a
4
+ data.tar.gz: 9eaad9281884239069c6125ae6c9b37886db162b
5
5
  SHA512:
6
- metadata.gz: 08fee47c21187c9288eaea2c66fe66d0ab7c3cf035ce7b7985b97f7cff9ea7aa0c688a966757178f134c9b4a1dadc3f657c1820d4e32f37facf68b711534916f
7
- data.tar.gz: b85bef5527af271a610184c832f206ce3282875f1eb0f9ed7ee33bbee1b5388e8b344120c24f399809d73fe9c53f750c7042ccbf1cdf3a4e7cb8ebfb0732fc02
6
+ metadata.gz: d20ddcbc7c8d31152f8c8052ff6a9862e77ac776e3961224f865f43bf832fa75d38932eb76f63e87ab0bc6afc0383c6f5c6538b615b3b704eeda676eaf88b36c
7
+ data.tar.gz: 0f8bef82a91e53150faeb0a24c44d29f0a968c202c6e226b2f531da20e67cca05fe8e9d83fd222aefbe74a2542a05fe5289176c37b8261c92b69b86cf1c4e609
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in smsconnect.gemspec
4
4
  gemspec
5
+
6
+ gem 'nokogiri'
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 node.js (for Czech Republic)
5
+ Send and receive SMS with Ruby (for Czech Republic)
6
6
 
7
- [Registration](http://www.smsbrana.cz/registrace.html)
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/[my-github-username]/smsconnect/fork )
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`)
@@ -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
@@ -1,12 +1,59 @@
1
- require "smsconnect/version"
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 = "http://api.smsbrana.cz/smsconnect/http.php?"
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
- result = {}
28
- result['login'] = @settings['login']
29
- result['time'] = time
30
- result['salt'] = salt
31
- result['hash'] = Digest::MD5.hexdigest(@settings['password'] + time + salt)
32
-
33
- return result
34
- end
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 = Net::HTTP.start(url.host, url.port) {|http|
91
+ res = http.start { |http|
44
92
  http.request(req)
45
93
  }
46
- puts res.body
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
- data = data.map{|k,v| "#{k}=#{v}"}.join('&')
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 = Net::HTTP.start(url.host, url.port) {|http|
175
+ res = http.start { |http|
58
176
  http.request(req)
59
177
  }
60
- puts res.body
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
@@ -1,3 +1,3 @@
1
1
  module Smsconnect
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
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.1
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: 2014-11-05 00:00:00.000000000 Z
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.4.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)