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 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)