textanywhere_ruby 0.1.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/Rakefile +8 -0
- data/bin/textanywhere_ruby +4 -0
- data/lib/textanywhere_ruby.rb +401 -0
- data/test/test_textanywhere_ruby.rb +8 -0
- metadata +60 -0
data/Rakefile
ADDED
@@ -0,0 +1,401 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
class TextAnywhere_ruby
|
5
|
+
def self.hi()
|
6
|
+
"hello there"
|
7
|
+
end
|
8
|
+
|
9
|
+
def live?
|
10
|
+
@is_live
|
11
|
+
end
|
12
|
+
|
13
|
+
def live!
|
14
|
+
@is_live = true
|
15
|
+
end
|
16
|
+
|
17
|
+
def test!
|
18
|
+
@is_live = false
|
19
|
+
end
|
20
|
+
|
21
|
+
def use_https!
|
22
|
+
@start_url = "https://www.textapp.net/webservice/httpservice.aspx"
|
23
|
+
@is_https = true
|
24
|
+
end
|
25
|
+
|
26
|
+
def use_http!
|
27
|
+
@start_url = "http://www.textapp.net/webservice/httpservice.aspx"
|
28
|
+
@is_https = false
|
29
|
+
end
|
30
|
+
|
31
|
+
def default_options
|
32
|
+
{:method=>"",
|
33
|
+
:returncsvstring=>"false",
|
34
|
+
:externallogin=>"",
|
35
|
+
:password=>"",
|
36
|
+
:clientbillingreference=>"all",
|
37
|
+
:clientmessagereference=>"",
|
38
|
+
:originator=>"",
|
39
|
+
:destinations=>"",
|
40
|
+
:body=>"",
|
41
|
+
:validity=>72,
|
42
|
+
:charactersetid=>2,
|
43
|
+
:replymethodid=>1,
|
44
|
+
:replydata=>"",
|
45
|
+
:statusnotificationurl=>"",
|
46
|
+
:number=>"",
|
47
|
+
:keyword=>"",
|
48
|
+
:shortcode=>"",
|
49
|
+
:rbid=>""}
|
50
|
+
end
|
51
|
+
|
52
|
+
def send_params
|
53
|
+
[
|
54
|
+
:method,
|
55
|
+
:returncsvstring,
|
56
|
+
:externallogin,
|
57
|
+
:password,
|
58
|
+
:clientbillingreference,
|
59
|
+
:clientmessagereference,
|
60
|
+
:originator,
|
61
|
+
:destinations,
|
62
|
+
:body,
|
63
|
+
:validity,
|
64
|
+
:charactersetid,
|
65
|
+
:replymethodid,
|
66
|
+
:replydata,
|
67
|
+
:statusnotificationurl
|
68
|
+
]
|
69
|
+
end
|
70
|
+
|
71
|
+
def status_params
|
72
|
+
[
|
73
|
+
:method,
|
74
|
+
:returncsvstring,
|
75
|
+
:externallogin,
|
76
|
+
:password,
|
77
|
+
:clientmessagereference
|
78
|
+
]
|
79
|
+
end
|
80
|
+
|
81
|
+
def base_params
|
82
|
+
[
|
83
|
+
:method,
|
84
|
+
:returncsvstring,
|
85
|
+
:externallogin,
|
86
|
+
:password
|
87
|
+
]
|
88
|
+
end
|
89
|
+
|
90
|
+
def inbound_params
|
91
|
+
[
|
92
|
+
:method,
|
93
|
+
:returncsvstring,
|
94
|
+
:externallogin,
|
95
|
+
:password,
|
96
|
+
:number,
|
97
|
+
:keyword
|
98
|
+
]
|
99
|
+
end
|
100
|
+
|
101
|
+
def premium_inbound_params
|
102
|
+
[
|
103
|
+
:method,
|
104
|
+
:returncsvstring,
|
105
|
+
:externallogin,
|
106
|
+
:password,
|
107
|
+
:shortcode,
|
108
|
+
:keyword
|
109
|
+
]
|
110
|
+
end
|
111
|
+
|
112
|
+
def send_premium_params
|
113
|
+
[
|
114
|
+
:returncsvstring,
|
115
|
+
:externallogin,
|
116
|
+
:password,
|
117
|
+
:clientbillingreference,
|
118
|
+
:clientmessagereference,
|
119
|
+
:rbid,
|
120
|
+
:body,
|
121
|
+
:validity,
|
122
|
+
:charactersetid,
|
123
|
+
:statusnotificationurl
|
124
|
+
]
|
125
|
+
end
|
126
|
+
|
127
|
+
def subscriber_params
|
128
|
+
[
|
129
|
+
:returncsvstring,
|
130
|
+
:externallogin,
|
131
|
+
:password,
|
132
|
+
:number,
|
133
|
+
:keyword
|
134
|
+
]
|
135
|
+
end
|
136
|
+
|
137
|
+
def initialize(username,password,originator,options = {})
|
138
|
+
live!
|
139
|
+
use_http!
|
140
|
+
|
141
|
+
@options = default_options
|
142
|
+
@options[:externallogin] = username
|
143
|
+
@options[:password] = password
|
144
|
+
@options[:originator] = originator if originator
|
145
|
+
|
146
|
+
@options.merge(options)
|
147
|
+
@remember_originator = @options[:originator]
|
148
|
+
end
|
149
|
+
|
150
|
+
def send(destinations,body,clientmessagereference="ref",options = {})
|
151
|
+
if live?
|
152
|
+
return live_send(destinations,body,clientmessagereference,options)
|
153
|
+
else
|
154
|
+
return test_send(destinations,body,clientmessagereference,options)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def format_number(phone)
|
159
|
+
phone = phone.gsub(/[^0-9]/, "")
|
160
|
+
|
161
|
+
if phone.start_with?("00")
|
162
|
+
phone = phone[2..-1]
|
163
|
+
end
|
164
|
+
if phone.start_with?("0")
|
165
|
+
phone = "44" + phone[1..-1]
|
166
|
+
end
|
167
|
+
phone = "+" + phone
|
168
|
+
|
169
|
+
return phone
|
170
|
+
end
|
171
|
+
|
172
|
+
def to_csv(destinations)
|
173
|
+
if destinations.kind_of?(Array)
|
174
|
+
ret = ""
|
175
|
+
destinations.each do |dest|
|
176
|
+
ret=ret+"," if ret != ""
|
177
|
+
ret = ret + (format_number(dest))
|
178
|
+
end
|
179
|
+
else
|
180
|
+
ret = (format_number(destinations))
|
181
|
+
end
|
182
|
+
return ret
|
183
|
+
end
|
184
|
+
|
185
|
+
def format_response(response)
|
186
|
+
hash = {}
|
187
|
+
|
188
|
+
response.children.each do |p|
|
189
|
+
if p.children.length > 1 || p.children.children.length > 1
|
190
|
+
new_item = format_response(p)
|
191
|
+
else
|
192
|
+
new_item = p.inner_html
|
193
|
+
end
|
194
|
+
|
195
|
+
if hash.has_key?(p.name)
|
196
|
+
unless hash[p.name].is_a?(Array)
|
197
|
+
hash[p.name] = [] << hash[p.name]
|
198
|
+
end
|
199
|
+
hash[p.name] << new_item
|
200
|
+
else
|
201
|
+
hash[p.name] = new_item
|
202
|
+
end
|
203
|
+
end
|
204
|
+
return hash
|
205
|
+
end
|
206
|
+
|
207
|
+
def is_ok(response)
|
208
|
+
response["Transaction"]["Code"].to_i == 1
|
209
|
+
end
|
210
|
+
|
211
|
+
def get_html_content(requested_url)
|
212
|
+
response = Nokogiri::XML(open(requested_url))
|
213
|
+
trans_code = response.xpath('//Transaction/Code').inner_text().to_i
|
214
|
+
trans_text = response.xpath('//Transaction/Description').inner_text()
|
215
|
+
|
216
|
+
a = format_response(response.xpath("/*"))
|
217
|
+
puts a
|
218
|
+
return a
|
219
|
+
end
|
220
|
+
|
221
|
+
def client_billing_reference=(val)
|
222
|
+
@options[:clientbillingreference] = val
|
223
|
+
end
|
224
|
+
|
225
|
+
#params is an array of symbols. Use this array to create
|
226
|
+
#a url containing only those symbols as parameters.
|
227
|
+
#Array is created from the @options variable
|
228
|
+
#need to send this off to the internet and get answer back.
|
229
|
+
def ta_response(params)
|
230
|
+
url = ""
|
231
|
+
params.each do |param|
|
232
|
+
url = url + "&" if url != ""
|
233
|
+
url = url + param.to_s + "=" + URI::encode(@options[param].to_s)
|
234
|
+
end
|
235
|
+
response = get_html_content(@start_url + "?" + url)
|
236
|
+
puts url
|
237
|
+
return response
|
238
|
+
end
|
239
|
+
|
240
|
+
#live send a text message - finished.
|
241
|
+
def live_send(destinations,body,clientmessagereference,options = {})
|
242
|
+
@options[:method] = 'sendsms'
|
243
|
+
@options[:destinations] = to_csv(destinations)
|
244
|
+
@options[:clientmessagereference] = clientmessagereference
|
245
|
+
@options[:body] = body
|
246
|
+
@options.merge(options)
|
247
|
+
response = ta_response(send_params)
|
248
|
+
return response
|
249
|
+
end
|
250
|
+
|
251
|
+
#get status of text message - finished
|
252
|
+
def status(clientmessagereference)
|
253
|
+
@options[:method] = 'getsmsstatus'
|
254
|
+
@options[:clientmessagereference] = clientmessagereference
|
255
|
+
response = ta_response(status_params)
|
256
|
+
return response
|
257
|
+
end
|
258
|
+
|
259
|
+
#get replies from the text message - OK
|
260
|
+
def reply
|
261
|
+
@options[:method] = 'getsmsreply'
|
262
|
+
@options[:clientmessagereference] = clientmessagereference
|
263
|
+
response = ta_response(status_params)
|
264
|
+
return response
|
265
|
+
end
|
266
|
+
|
267
|
+
def restore_originator
|
268
|
+
@options[:originator] = @remember_originator
|
269
|
+
@options[:replydata] = ""
|
270
|
+
@options[:replymethodid] = 1
|
271
|
+
end
|
272
|
+
|
273
|
+
#Test service is working. All OK
|
274
|
+
def test_service
|
275
|
+
@options[:method] = 'testservice'
|
276
|
+
response = ta_response(base_params)
|
277
|
+
return response
|
278
|
+
end
|
279
|
+
|
280
|
+
#test send a message - we're OK
|
281
|
+
def test_send(destinations,body,clientmessagereference,options = {})
|
282
|
+
@options[:method] = 'testsendsms'
|
283
|
+
@options[:clientmessagereference] = clientmessagereference
|
284
|
+
@options[:destinations] = to_csv(destinations)
|
285
|
+
@options[:body] = body
|
286
|
+
@options.merge(options)
|
287
|
+
response = ta_response(send_params)
|
288
|
+
|
289
|
+
return response
|
290
|
+
end
|
291
|
+
|
292
|
+
#the credits left - ok
|
293
|
+
def credits_left
|
294
|
+
@options[:method] = 'GetCreditsLeft'
|
295
|
+
response = ta_response(base_params)
|
296
|
+
return response
|
297
|
+
end
|
298
|
+
|
299
|
+
#should be ok
|
300
|
+
def inbound(number="", keyword="")
|
301
|
+
number = @options['originator'] if number == ""
|
302
|
+
@options[:method] = 'GetSMSInbound'
|
303
|
+
@options[:number] = number
|
304
|
+
@options[:keyword] = keyword
|
305
|
+
|
306
|
+
response = ta_response(inbound_params)
|
307
|
+
return response
|
308
|
+
end
|
309
|
+
|
310
|
+
#should be ok
|
311
|
+
def premium_inbound(shortcode,keyword)
|
312
|
+
@options[:method] = 'GetPremiumSMSInbound'
|
313
|
+
@options[:shortcode] = number
|
314
|
+
@options[:keyword] = keyword
|
315
|
+
|
316
|
+
response = ta_response(premium_inbound_params)
|
317
|
+
return response
|
318
|
+
end
|
319
|
+
|
320
|
+
def send_premium(rbid,body,clientmessagereference,options = {})
|
321
|
+
@options[:method] = 'SendPremiumSMS'
|
322
|
+
@options.merge(options)
|
323
|
+
|
324
|
+
@options[:clientmessagereference] = clientmessagereference
|
325
|
+
@options[:rbid] = rbid
|
326
|
+
@options[:body] = body
|
327
|
+
|
328
|
+
response = ta_response(send_premium_params)
|
329
|
+
return response
|
330
|
+
end
|
331
|
+
|
332
|
+
def premium_status(clientmessagereference)
|
333
|
+
@options[:method] = 'GetPremiumSMSStatus'
|
334
|
+
@options[:clientmessagereference] = clientmessagereference
|
335
|
+
response = ta_response(status_params)
|
336
|
+
return response
|
337
|
+
end
|
338
|
+
|
339
|
+
def subscribers(number="", keyword="")
|
340
|
+
@options[:method] = 'GetSubscribers'
|
341
|
+
|
342
|
+
number = @options['originator'] if number == ""
|
343
|
+
|
344
|
+
@options[:number] = number
|
345
|
+
@options[:keyword] = keyword
|
346
|
+
response = ta_response(subscriber_params)
|
347
|
+
return response
|
348
|
+
end
|
349
|
+
|
350
|
+
def method_for(method)
|
351
|
+
reply = {
|
352
|
+
:no_reply=>1,
|
353
|
+
:reply_to_email=>2,
|
354
|
+
:reply_to_web_service=>3,
|
355
|
+
:send_phone_no=>4,
|
356
|
+
:reply_to_url=>5,
|
357
|
+
:no_reply_use_shortcode=>7
|
358
|
+
}[method]
|
359
|
+
|
360
|
+
reply = 1 unless reply
|
361
|
+
return reply
|
362
|
+
end
|
363
|
+
|
364
|
+
def no_reply_originator(orig="")
|
365
|
+
@options[:replymethodid] = 1
|
366
|
+
@options[:replydata] = ""
|
367
|
+
@options[:originator] = orig unless orig==""
|
368
|
+
end
|
369
|
+
|
370
|
+
def no_reply_phone_number(orig="")
|
371
|
+
@options[:replymethodid] = 4
|
372
|
+
@options[:replydata] = ""
|
373
|
+
@options[:originator] = orig unless orig==""
|
374
|
+
end
|
375
|
+
|
376
|
+
def reply_to_email(email)
|
377
|
+
@options[:replymethodid] = 2
|
378
|
+
@options[:replydata] = email
|
379
|
+
@options[:originator] = ""
|
380
|
+
end
|
381
|
+
|
382
|
+
def reply_to_web_service
|
383
|
+
@options[:replymethodid] = 3
|
384
|
+
@options[:replydata] = ""
|
385
|
+
@options[:originator] = ""
|
386
|
+
end
|
387
|
+
|
388
|
+
def reply_to_url(url)
|
389
|
+
@options[:replymethodid] = 5
|
390
|
+
@options[:replydata] = url
|
391
|
+
@options[:originator] = ""
|
392
|
+
end
|
393
|
+
|
394
|
+
def no_reply_to_shortcode(shortcode)
|
395
|
+
@options[:replymethodid] = 7
|
396
|
+
@options[:replydata] = ""
|
397
|
+
@options[:originator] = shortcode
|
398
|
+
end
|
399
|
+
|
400
|
+
end
|
401
|
+
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: textanywhere_ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Sean Bamforth
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-05-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: nokogiri
|
16
|
+
requirement: &27004152 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.5.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *27004152
|
25
|
+
description: Library to communicate with TextAnywhere.net
|
26
|
+
email: sean@theguru.co.uk
|
27
|
+
executables: []
|
28
|
+
extensions: []
|
29
|
+
extra_rdoc_files: []
|
30
|
+
files:
|
31
|
+
- Rakefile
|
32
|
+
- lib/textanywhere_ruby.rb
|
33
|
+
- bin/textanywhere_ruby
|
34
|
+
- test/test_textanywhere_ruby.rb
|
35
|
+
homepage: http://rubygems.org/gems/textanywhere_ruby
|
36
|
+
licenses: []
|
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.11
|
56
|
+
signing_key:
|
57
|
+
specification_version: 3
|
58
|
+
summary: textanywhere_ruby!
|
59
|
+
test_files:
|
60
|
+
- test/test_textanywhere_ruby.rb
|