exacttarget 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +3 -3
- data/VERSION +1 -1
- data/exacttarget.gemspec +3 -1
- data/lib/exacttarget.rb +1 -0
- data/lib/exacttarget/client.rb +54 -10
- data/lib/exacttarget/image.rb +31 -0
- data/lib/exacttarget/templates/image.xml.erb +13 -0
- metadata +5 -3
data/README.rdoc
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
= ExactTarget -- XML API client for the ExactTarget email system
|
2
2
|
|
3
|
-
ExactTarget is a
|
4
|
-
supports the most up-to-date XML API and is capable of uploading email pastes, images and
|
5
|
-
lists of subscribers, emails and more.
|
3
|
+
ExactTarget is a library for communicating with the ExactTarget email system. The library
|
4
|
+
supports the most up-to-date XML API and is capable of uploading email pastes, images and
|
5
|
+
retrieving lists of subscribers, emails and more.
|
6
6
|
|
7
7
|
== Download and installation
|
8
8
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/exacttarget.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{exacttarget}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Matthew Simpson"]
|
@@ -28,7 +28,9 @@ Gem::Specification.new do |s|
|
|
28
28
|
"lib/exacttarget.rb",
|
29
29
|
"lib/exacttarget/client.rb",
|
30
30
|
"lib/exacttarget/email.rb",
|
31
|
+
"lib/exacttarget/image.rb",
|
31
32
|
"lib/exacttarget/templates/email.xml.erb",
|
33
|
+
"lib/exacttarget/templates/image.xml.erb",
|
32
34
|
"lib/exacttarget/templates/main.xml.erb"
|
33
35
|
]
|
34
36
|
s.homepage = %q{http://github.com/msimpson/exacttarget}
|
data/lib/exacttarget.rb
CHANGED
data/lib/exacttarget/client.rb
CHANGED
@@ -1,20 +1,63 @@
|
|
1
1
|
module ExactTarget
|
2
|
+
FTP_STANDARD = {
|
3
|
+
:location => 'ExactTargetFTP',
|
4
|
+
:uri => 'ftp.exacttarget.com',
|
5
|
+
:path => '/',
|
6
|
+
}
|
7
|
+
FTP_ENHANCED = {
|
8
|
+
:location => 'ExactTargetEnhancedFTP',
|
9
|
+
:uri => 'ftp1.exacttarget.com',
|
10
|
+
:path => '/import',
|
11
|
+
}
|
12
|
+
|
2
13
|
class Client
|
3
|
-
|
4
|
-
attr_reader :username, :password
|
14
|
+
|
15
|
+
attr_reader :username, :password, :ftp
|
5
16
|
|
6
17
|
public
|
7
18
|
|
8
|
-
def initialize(username, password)
|
9
|
-
@username
|
10
|
-
@password
|
19
|
+
def initialize(username, password, ftp_username = 'import', ftp_password = 'import', ftp = FTP_STANDARD)
|
20
|
+
@username = username
|
21
|
+
@password = password
|
22
|
+
@ftp = {
|
23
|
+
:username => ftp_username.to_s,
|
24
|
+
:password => ftp_password.to_s,
|
25
|
+
:handle => Net::FTP.new(ftp[:uri])
|
26
|
+
}.merge ftp
|
27
|
+
|
28
|
+
begin
|
29
|
+
@ftp[:handle].login @ftp[:username], @ftp[:password]
|
30
|
+
@ftp[:handle].chdir @ftp[:path]
|
31
|
+
rescue Net::FTPPermError => msg
|
32
|
+
puts '[ExactTarget] Error: FTP access failed.'
|
33
|
+
raise msg
|
34
|
+
end
|
35
|
+
|
11
36
|
@uri = URI.parse('https://api.dc1.exacttarget.com/integrate.asp')
|
12
|
-
@
|
13
|
-
@
|
37
|
+
@api = Net::HTTP.new(@uri.host, @uri.port)
|
38
|
+
@api.use_ssl = true
|
14
39
|
end
|
15
40
|
|
16
41
|
private
|
17
42
|
|
43
|
+
def put(file_path)
|
44
|
+
begin
|
45
|
+
@ftp[:handle].put(file_path.to_s)
|
46
|
+
rescue Exception => msg
|
47
|
+
puts '[ExactTarget] Error: FTP put failed.'
|
48
|
+
raise msg
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def delete(file_name)
|
53
|
+
begin
|
54
|
+
@ftp[:handle].delete(file_name.to_s)
|
55
|
+
rescue Exception => msg
|
56
|
+
puts '[ExactTarget] Error: FTP delete failed.'
|
57
|
+
raise msg
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
18
61
|
def render(template)
|
19
62
|
path = File.join(File.dirname(__FILE__), "templates/#{template.to_s}.xml.erb")
|
20
63
|
file = File.open(path, 'r').read
|
@@ -26,14 +69,15 @@ module ExactTarget
|
|
26
69
|
post = 'qf=xml&xml=' + URI.escape(render(:main))
|
27
70
|
|
28
71
|
begin
|
29
|
-
@
|
72
|
+
@api.post(@uri.path, post,
|
30
73
|
{
|
31
74
|
'Content-Type' => 'application/x-www-form-urlencoded',
|
32
75
|
'Content-length' => post.length.to_s
|
33
76
|
}
|
34
77
|
).body
|
35
|
-
rescue SocketError
|
36
|
-
|
78
|
+
rescue SocketError => msg
|
79
|
+
puts '[ExactTarget] Error: API request failed.'
|
80
|
+
raise msg
|
37
81
|
end
|
38
82
|
end
|
39
83
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module ExactTarget
|
2
|
+
class Client
|
3
|
+
|
4
|
+
public
|
5
|
+
|
6
|
+
def image_import(file_path)
|
7
|
+
@name = File.basename(file_path)
|
8
|
+
|
9
|
+
begin
|
10
|
+
put(file_path.to_s)
|
11
|
+
result = Nokogiri::XML(send(render(:image)))
|
12
|
+
delete(@name)
|
13
|
+
rescue Exception => msg
|
14
|
+
puts msg
|
15
|
+
end
|
16
|
+
|
17
|
+
desc = result.xpath('//filemanagement-description').text
|
18
|
+
total = result.xpath('//filemanagement-totalmoved').text.to_i
|
19
|
+
name = result.xpath('//filemanagement-info').text
|
20
|
+
error = desc.include?('not exist') ? 'File not found.' : total < 1 ? 'Unsupported file type.' : nil
|
21
|
+
|
22
|
+
{
|
23
|
+
:file_path => file_path,
|
24
|
+
:old_name => @name,
|
25
|
+
:new_name => name,
|
26
|
+
:error => error
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<system>
|
2
|
+
|
3
|
+
<system_name>filemanagement</system_name>
|
4
|
+
<action>filemove</action>
|
5
|
+
<source>
|
6
|
+
<location><%= @ftp[:location] %></location>
|
7
|
+
<files>
|
8
|
+
<filename><%= @name %></filename>
|
9
|
+
</files>
|
10
|
+
</source>
|
11
|
+
<destination>imageimport</destination>
|
12
|
+
|
13
|
+
</system>
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 2
|
9
|
+
version: 0.1.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Matthew Simpson
|
@@ -109,7 +109,9 @@ files:
|
|
109
109
|
- lib/exacttarget.rb
|
110
110
|
- lib/exacttarget/client.rb
|
111
111
|
- lib/exacttarget/email.rb
|
112
|
+
- lib/exacttarget/image.rb
|
112
113
|
- lib/exacttarget/templates/email.xml.erb
|
114
|
+
- lib/exacttarget/templates/image.xml.erb
|
113
115
|
- lib/exacttarget/templates/main.xml.erb
|
114
116
|
has_rdoc: true
|
115
117
|
homepage: http://github.com/msimpson/exacttarget
|
@@ -125,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
127
|
requirements:
|
126
128
|
- - ">="
|
127
129
|
- !ruby/object:Gem::Version
|
128
|
-
hash:
|
130
|
+
hash: 1328632892447175540
|
129
131
|
segments:
|
130
132
|
- 0
|
131
133
|
version: "0"
|