Silverpops 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.
- checksums.yaml +7 -0
- data/Gemfile +10 -0
- data/lib/silverpops.rb +190 -0
- metadata +87 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 44989ca2865f3090862e652f0ce8b01e42391ca1
|
4
|
+
data.tar.gz: b2d427cc08c34ea33b7e0cfe134947848835f25d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ccc0beef8d2167374f885e145011de6d41c3239ef7a99b30f95710ce79dc2c0d1ce55b8bdf0989147496df013fb882c5fa3f5e66d52a2e0a15bd6d1af8476010
|
7
|
+
data.tar.gz: 308a99e110f1526c834fd017ca2908bc1df6f7abab1a21203528b91830c5178e03bac7851444bb87e5aa0fd8f729f97939f2272b5f71841c11b0117b7e5af64e
|
data/Gemfile
ADDED
data/lib/silverpops.rb
ADDED
@@ -0,0 +1,190 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
require 'redis'
|
4
|
+
require 'nokogiri'
|
5
|
+
|
6
|
+
module Silverpops
|
7
|
+
|
8
|
+
class << self
|
9
|
+
attr_accessor :configuration
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.get_api_base_uri
|
13
|
+
return 'http://api' + Silverpops.configuration.server_number.to_s + '.silverpop.com/XMLAPI'
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.get_token(clear_cache = false)
|
17
|
+
tries ||= 2
|
18
|
+
|
19
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
20
|
+
xml.Envelope {
|
21
|
+
xml.Body {
|
22
|
+
xml.Login {
|
23
|
+
xml.USERNAME Silverpops.configuration.username
|
24
|
+
xml.PASSWORD Silverpops.configuration.password
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
faraday = Faraday.new(:url => get_api_base_uri(), :proxy => Silverpops.configuration.proxy) do |faraday|
|
31
|
+
faraday.request :url_encoded
|
32
|
+
faraday.adapter Faraday.default_adapter
|
33
|
+
end
|
34
|
+
|
35
|
+
response = faraday.post do |req|
|
36
|
+
req.url '/XMLAPI'
|
37
|
+
req.headers["Content-Type"] = "text/xml"
|
38
|
+
req.headers["Accept"] = "text/xml"
|
39
|
+
req.body = builder.to_xml
|
40
|
+
end
|
41
|
+
|
42
|
+
if response.status == 200
|
43
|
+
|
44
|
+
doc = Nokogiri::XML(response.body)
|
45
|
+
doc.xpath("//Envelope/Body/RESULT/SUCCESS").each do |node|
|
46
|
+
|
47
|
+
doc.xpath("//Envelope/Body/RESULT/SESSIONID").each do |session|
|
48
|
+
return session.content
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
return false
|
54
|
+
|
55
|
+
else
|
56
|
+
raise RetryException, response.status.to_s + " " + response.body if response.status == 200
|
57
|
+
end
|
58
|
+
|
59
|
+
rescue RetryException => e
|
60
|
+
if (tries -= 1) > 0
|
61
|
+
retry
|
62
|
+
else
|
63
|
+
raise e
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.find_list_member(database_id, email, fields = {})
|
68
|
+
|
69
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
70
|
+
xml.Envelope {
|
71
|
+
xml.Body {
|
72
|
+
xml.SelectRecipientData {
|
73
|
+
xml.LIST_ID database_id
|
74
|
+
xml.EMAIL email
|
75
|
+
}
|
76
|
+
}
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
faraday = Faraday.new(:url => get_api_base_uri(), :proxy => Silverpops.configuration.proxy) do |faraday|
|
81
|
+
faraday.request :url_encoded
|
82
|
+
faraday.adapter Faraday.default_adapter
|
83
|
+
end
|
84
|
+
|
85
|
+
response = faraday.post do |req|
|
86
|
+
req.url '/XMLAPI'
|
87
|
+
req.headers["Content-Type"] = "text/xml"
|
88
|
+
req.headers["Accept"] = "text/xml"
|
89
|
+
req.body = builder.to_xml
|
90
|
+
req.params['jsessionid'] = get_token()
|
91
|
+
end
|
92
|
+
|
93
|
+
doc = Nokogiri::XML(response.body)
|
94
|
+
doc.xpath("//Envelope/Body/RESULT/SUCCESS").each do |node|
|
95
|
+
|
96
|
+
|
97
|
+
if node.content.downcase == "true"
|
98
|
+
|
99
|
+
record_data = {}
|
100
|
+
|
101
|
+
doc.xpath("//Envelope/Body/RESULT").each do |data|
|
102
|
+
record_data["Email"] = data.xpath("EMAIL")[0].content
|
103
|
+
record_data["RecipientId"] = data.xpath("RecipientId")[0].content.to_i
|
104
|
+
end
|
105
|
+
|
106
|
+
doc.xpath("//Envelope/Body/RESULT/COLUMNS/COLUMN").each do |data|
|
107
|
+
record_data[data.xpath("NAME")[0].content] = data.xpath("VALUE")[0].content
|
108
|
+
end
|
109
|
+
|
110
|
+
return record_data
|
111
|
+
|
112
|
+
else
|
113
|
+
return false
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
def self.add_list_member(database_id, key_data, update_if_found = true, allow_html = true, send_auto_reply = true)
|
120
|
+
|
121
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
122
|
+
xml.Envelope {
|
123
|
+
xml.Body {
|
124
|
+
xml.AddRecipient {
|
125
|
+
xml.LIST_ID database_id
|
126
|
+
xml.CREATED_FROM 1
|
127
|
+
xml.SEND_AUTOREPLY send_auto_reply
|
128
|
+
xml.UPDATE_IF_FOUND update_if_found
|
129
|
+
xml.ALLOW_HTML allow_html
|
130
|
+
xml.CONTACT_LISTS ''
|
131
|
+
|
132
|
+
key_data.each do |key, value|
|
133
|
+
xml.COLUMN {
|
134
|
+
xml.NAME key
|
135
|
+
xml.VALUE value
|
136
|
+
}
|
137
|
+
end
|
138
|
+
|
139
|
+
}
|
140
|
+
}
|
141
|
+
}
|
142
|
+
end
|
143
|
+
|
144
|
+
faraday = Faraday.new(:url => get_api_base_uri(), :proxy => Silverpops.configuration.proxy) do |faraday|
|
145
|
+
faraday.request :url_encoded
|
146
|
+
faraday.adapter Faraday.default_adapter
|
147
|
+
end
|
148
|
+
|
149
|
+
response = faraday.post do |req|
|
150
|
+
req.url '/XMLAPI'
|
151
|
+
req.headers["Content-Type"] = "text/xml"
|
152
|
+
req.headers["Accept"] = "text/xml"
|
153
|
+
req.body = builder.to_xml
|
154
|
+
req.params['jsessionid'] = get_token()
|
155
|
+
end
|
156
|
+
|
157
|
+
doc = Nokogiri::XML(response.body)
|
158
|
+
doc.xpath("//Envelope/Body/RESULT/SUCCESS").each do |node|
|
159
|
+
return node.content.downcase == "true"
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
163
|
+
|
164
|
+
def self.configuration
|
165
|
+
@configuration ||= Configuration.new
|
166
|
+
end
|
167
|
+
|
168
|
+
def self.configure
|
169
|
+
self.configuration ||= Configuration.new
|
170
|
+
yield(configuration)
|
171
|
+
end
|
172
|
+
|
173
|
+
class Configuration
|
174
|
+
attr_accessor :username
|
175
|
+
attr_accessor :password
|
176
|
+
attr_accessor :server_number
|
177
|
+
attr_accessor :proxy
|
178
|
+
|
179
|
+
def initialize
|
180
|
+
@username = ''
|
181
|
+
@password = ''
|
182
|
+
@server_number = 1
|
183
|
+
@proxy = nil
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
class RetryException < RuntimeError
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: Silverpops
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tom Holder
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.6.6.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.6.6.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.9.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.9.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: redis
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 3.0.1
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.0.1
|
55
|
+
description: Some basic cheetah mail API end points implemented
|
56
|
+
email: tom@simpleweb.co.uk
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- Gemfile
|
62
|
+
- lib/silverpops.rb
|
63
|
+
homepage: http://rubygems.org/gems/silverpops
|
64
|
+
licenses:
|
65
|
+
- MIT
|
66
|
+
metadata: {}
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubyforge_project:
|
83
|
+
rubygems_version: 2.4.5
|
84
|
+
signing_key:
|
85
|
+
specification_version: 4
|
86
|
+
summary: Silverpops is a clunky campaign manager
|
87
|
+
test_files: []
|