constantcontact 1.0.0
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/.rspec +2 -0
- data/README.md +132 -0
- data/constantcontact.gemspec +32 -0
- data/lib/constantcontact.rb +75 -0
- data/lib/constantcontact/api.rb +541 -0
- data/lib/constantcontact/auth/oauth2.rb +82 -0
- data/lib/constantcontact/auth/session_data_store.rb +69 -0
- data/lib/constantcontact/components/account/verified_email_address.rb +27 -0
- data/lib/constantcontact/components/activities/activity.rb +44 -0
- data/lib/constantcontact/components/activities/activity_error.rb +27 -0
- data/lib/constantcontact/components/activities/add_contacts.rb +117 -0
- data/lib/constantcontact/components/activities/add_contacts_import_data.rb +45 -0
- data/lib/constantcontact/components/activities/export_contacts.rb +30 -0
- data/lib/constantcontact/components/component.rb +23 -0
- data/lib/constantcontact/components/contacts/address.rb +28 -0
- data/lib/constantcontact/components/contacts/contact.rb +86 -0
- data/lib/constantcontact/components/contacts/contact_list.rb +27 -0
- data/lib/constantcontact/components/contacts/custom_field.rb +27 -0
- data/lib/constantcontact/components/contacts/email_address.rb +34 -0
- data/lib/constantcontact/components/contacts/note.rb +25 -0
- data/lib/constantcontact/components/email_marketing/campaign.rb +83 -0
- data/lib/constantcontact/components/email_marketing/click_through_details.rb +28 -0
- data/lib/constantcontact/components/email_marketing/message_footer.rb +30 -0
- data/lib/constantcontact/components/email_marketing/schedule.rb +29 -0
- data/lib/constantcontact/components/email_marketing/test_send.rb +45 -0
- data/lib/constantcontact/components/result_set.rb +27 -0
- data/lib/constantcontact/components/tracking/bounce_activity.rb +29 -0
- data/lib/constantcontact/components/tracking/click_activity.rb +28 -0
- data/lib/constantcontact/components/tracking/forward_activity.rb +28 -0
- data/lib/constantcontact/components/tracking/open_activity.rb +28 -0
- data/lib/constantcontact/components/tracking/send_activity.rb +28 -0
- data/lib/constantcontact/components/tracking/tracking_activity.rb +27 -0
- data/lib/constantcontact/components/tracking/tracking_summary.rb +28 -0
- data/lib/constantcontact/components/tracking/unsubscribe_activity.rb +29 -0
- data/lib/constantcontact/exceptions/ctct_exception.rb +25 -0
- data/lib/constantcontact/exceptions/illegal_argument_exception.rb +11 -0
- data/lib/constantcontact/exceptions/oauth2_exception.rb +11 -0
- data/lib/constantcontact/services/account_service.rb +29 -0
- data/lib/constantcontact/services/activity_service.rb +107 -0
- data/lib/constantcontact/services/base_service.rb +37 -0
- data/lib/constantcontact/services/campaign_schedule_service.rb +107 -0
- data/lib/constantcontact/services/campaign_tracking_service.rb +159 -0
- data/lib/constantcontact/services/contact_service.rb +114 -0
- data/lib/constantcontact/services/contact_tracking_service.rb +159 -0
- data/lib/constantcontact/services/email_marketing_service.rb +87 -0
- data/lib/constantcontact/services/list_service.rb +85 -0
- data/lib/constantcontact/util/config.rb +140 -0
- data/lib/constantcontact/util/helpers.rb +27 -0
- data/lib/constantcontact/version.rb +12 -0
- data/spec/constantcontact/api_spec.rb +183 -0
- data/spec/constantcontact/auth/oauth2_spec.rb +48 -0
- data/spec/constantcontact/components/contacts/address_spec.rb +18 -0
- data/spec/constantcontact/components/contacts/contact_list_spec.rb +18 -0
- data/spec/constantcontact/components/contacts/contact_spec.rb +18 -0
- data/spec/constantcontact/components/contacts/custom_field_spec.rb +18 -0
- data/spec/constantcontact/components/contacts/email_address_spec.rb +18 -0
- data/spec/constantcontact/services/contact_service_spec.rb +105 -0
- data/spec/constantcontact/services/list_service_spec.rb +69 -0
- data/spec/spec_helper.rb +13 -0
- metadata +134 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA512:
|
3
|
+
metadata.gz: ce4ab04068029132c0a484c8de77cdffa0a4eda24eeb8e42806266f0935151255a3d270b5c133aba9e337c87788597386cec2b5de64c1e81fe33c9a473d02076
|
4
|
+
data.tar.gz: 19c32b1028d217e47bc65a3e145d666b5b57b67a9b58692e75ca6f25fb8f16daecb6e43f8392038a51eb2324f4907db5398884c9746270b3eeb422048904b214
|
5
|
+
SHA1:
|
6
|
+
metadata.gz: e6944720fbf8a0b247595feb9676859612b53376
|
7
|
+
data.tar.gz: d2294f919b1f9d7292618c7a817ff29e0bc09987
|
data/.rspec
ADDED
data/README.md
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
Constant Contact Ruby SDK
|
2
|
+
=========================
|
3
|
+
|
4
|
+
In order to use the Constant Contact SDK you have to follow these steps:
|
5
|
+
|
6
|
+
A. Rails example :
|
7
|
+
|
8
|
+
1. Install the gem :
|
9
|
+
|
10
|
+
gem install constantcontact
|
11
|
+
|
12
|
+
2. Configure Rails to load the gem :
|
13
|
+
|
14
|
+
Rails::Initializer.run do |config|
|
15
|
+
...
|
16
|
+
config.gem "constantcontact"
|
17
|
+
...
|
18
|
+
end
|
19
|
+
|
20
|
+
or add the following in your .Gemfile :
|
21
|
+
|
22
|
+
gem 'constantcontact'
|
23
|
+
|
24
|
+
3. Create a new action and add the following code:
|
25
|
+
|
26
|
+
@oauth = ConstantContact::Auth::OAuth2.new(
|
27
|
+
:api_key => 'your api key',
|
28
|
+
:api_secret => 'your secret key',
|
29
|
+
:redirect_url => 'your redirect url'
|
30
|
+
)
|
31
|
+
|
32
|
+
@error = params[:error]
|
33
|
+
@user = params[:username]
|
34
|
+
@code = params[:code]
|
35
|
+
|
36
|
+
if @code
|
37
|
+
response = @oauth.get_access_token(@code)
|
38
|
+
if response
|
39
|
+
token = response['access_token']
|
40
|
+
cc = ConstantContact::Api.new('your api key')
|
41
|
+
@contacts = cc.get_contacts(token)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
Note: 'your redirect url' is the URL of the action you just created.
|
47
|
+
|
48
|
+
4. Create a view for the above mentioned action with the following code:
|
49
|
+
|
50
|
+
<% if @error %>
|
51
|
+
<p>
|
52
|
+
<%=@error%>
|
53
|
+
</p>
|
54
|
+
<% end %>
|
55
|
+
|
56
|
+
<% if @code %>
|
57
|
+
<% if @contacts %>
|
58
|
+
<% for contact in @contacts %>
|
59
|
+
<p>
|
60
|
+
Contact name: <%= contact.first_name + contact.last_name %>
|
61
|
+
</p>
|
62
|
+
<% end %>
|
63
|
+
<% end %>
|
64
|
+
<% else %>
|
65
|
+
<a href="<%=@oauth.get_authorization_url%>">Click to authorize</a>
|
66
|
+
<% end %>
|
67
|
+
|
68
|
+
5. The first time you access the action in browser you should see the "Click to authorize" link.
|
69
|
+
Follow the link, go through all the Constant Contact steps required
|
70
|
+
and then you will be redirected back to your action and you should see the list of contacts.
|
71
|
+
|
72
|
+
|
73
|
+
B. Sinatra example :
|
74
|
+
|
75
|
+
|
76
|
+
1. Install the gem :
|
77
|
+
|
78
|
+
gem install constantcontact
|
79
|
+
|
80
|
+
2. Add the following code in myapp.rb (just an example):
|
81
|
+
require 'active_support'
|
82
|
+
require 'constantcontact'
|
83
|
+
|
84
|
+
get '/my_url' do
|
85
|
+
@oauth = ConstantContact::Auth::OAuth2.new(
|
86
|
+
:api_key => 'your api key',
|
87
|
+
:api_secret => 'your secret key',
|
88
|
+
:redirect_url => 'your redirect url'
|
89
|
+
)
|
90
|
+
|
91
|
+
@error = params[:error]
|
92
|
+
@user = params[:username]
|
93
|
+
@code = params[:code]
|
94
|
+
|
95
|
+
if @code
|
96
|
+
response = @oauth.get_access_token(@code)
|
97
|
+
if response
|
98
|
+
token = response['access_token']
|
99
|
+
cc = ConstantContact::Api.new('your api key')
|
100
|
+
@contacts = cc.get_contacts(token)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
erb :my_view
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
Note: 'your redirect url' is the URL of the route you just created ( get '/my_url' ).
|
109
|
+
|
110
|
+
4. Create a my_view.rhtml (or my_view.erb) with the following code:
|
111
|
+
|
112
|
+
<% if @error %>
|
113
|
+
<p>
|
114
|
+
<%=@error%>
|
115
|
+
</p>
|
116
|
+
<% end %>
|
117
|
+
|
118
|
+
<% if @code %>
|
119
|
+
<% if @contacts %>
|
120
|
+
<% for contact in @contacts %>
|
121
|
+
<p>
|
122
|
+
Contact name: <%= contact.first_name + contact.last_name %>
|
123
|
+
</p>
|
124
|
+
<% end %>
|
125
|
+
<% end %>
|
126
|
+
<% else %>
|
127
|
+
<a href="<%=@oauth.get_authorization_url%>">Click to authorize</a>
|
128
|
+
<% end %>
|
129
|
+
|
130
|
+
5. The first time you access the action in browser you should see the "Click to authorize" link.
|
131
|
+
Follow the link, go through all the Constant Contact steps required
|
132
|
+
and then you will be redirected back to your action and you should see the list of contacts.
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'constantcontact/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "constantcontact"
|
9
|
+
s.version = ConstantContact::SDK::VERSION
|
10
|
+
s.platform = Gem::Platform::RUBY
|
11
|
+
s.authors = ["ConstantContact"]
|
12
|
+
s.homepage = "http://www.constantcontact.com"
|
13
|
+
s.summary = %q{Constant Contact SDK for Ruby}
|
14
|
+
s.email = "apisupport@constantcontact.com"
|
15
|
+
s.description = "Ruby library for interactions with Constant Contact v2 API"
|
16
|
+
s.version = "1.0.0"
|
17
|
+
s.license = "MIT"
|
18
|
+
|
19
|
+
s.files = [
|
20
|
+
'.rspec',
|
21
|
+
'constantcontact.gemspec',
|
22
|
+
'README.md'
|
23
|
+
]
|
24
|
+
s.files += Dir['lib/**/*.rb']
|
25
|
+
s.files += Dir['spec/**/*.rb']
|
26
|
+
s.executables = []
|
27
|
+
s.require_paths = [ "lib", "spec" ]
|
28
|
+
|
29
|
+
s.add_dependency("rest-client")
|
30
|
+
s.add_dependency("json")
|
31
|
+
s.add_development_dependency("rspec")
|
32
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#
|
2
|
+
# constantcontact.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rest_client'
|
9
|
+
require 'json'
|
10
|
+
require 'cgi'
|
11
|
+
require 'cgi/session'
|
12
|
+
require 'cgi/session/pstore'
|
13
|
+
|
14
|
+
|
15
|
+
module ConstantContact
|
16
|
+
autoload :Api, "constantcontact/api"
|
17
|
+
|
18
|
+
module Auth
|
19
|
+
autoload :OAuth2, "constantcontact/auth/oauth2"
|
20
|
+
autoload :Session, "constantcontact/auth/session_data_store"
|
21
|
+
end
|
22
|
+
|
23
|
+
module Components
|
24
|
+
autoload :Component, "constantcontact/components/component"
|
25
|
+
autoload :ResultSet, "constantcontact/components/result_set"
|
26
|
+
autoload :Activity, "constantcontact/components/activities/activity"
|
27
|
+
autoload :ActivityError, "constantcontact/components/activities/activity_error"
|
28
|
+
autoload :AddContacts, "constantcontact/components/activities/add_contacts"
|
29
|
+
autoload :AddContactsImportData, "constantcontact/components/activities/add_contacts_import_data"
|
30
|
+
autoload :ExportContacts, "constantcontact/components/activities/export_contacts"
|
31
|
+
autoload :Address, "constantcontact/components/contacts/address"
|
32
|
+
autoload :Contact, "constantcontact/components/contacts/contact"
|
33
|
+
autoload :ContactList, "constantcontact/components/contacts/contact_list"
|
34
|
+
autoload :CustomField, "constantcontact/components/contacts/custom_field"
|
35
|
+
autoload :EmailAddress, "constantcontact/components/contacts/email_address"
|
36
|
+
autoload :Note, "constantcontact/components/contacts/note"
|
37
|
+
autoload :ClickThroughDetails, "constantcontact/components/email_marketing/click_through_details"
|
38
|
+
autoload :Campaign, "constantcontact/components/email_marketing/campaign"
|
39
|
+
autoload :MessageFooter, "constantcontact/components/email_marketing/message_footer"
|
40
|
+
autoload :Schedule, "constantcontact/components/email_marketing/schedule"
|
41
|
+
autoload :TestSend, "constantcontact/components/email_marketing/test_send"
|
42
|
+
autoload :BounceActivity, "constantcontact/components/tracking/bounce_activity"
|
43
|
+
autoload :ClickActivity, "constantcontact/components/tracking/click_activity"
|
44
|
+
autoload :ForwardActivity, "constantcontact/components/tracking/forward_activity"
|
45
|
+
autoload :OpenActivity, "constantcontact/components/tracking/open_activity"
|
46
|
+
autoload :OptOutActivity, "constantcontact/components/tracking/opt_out_activity"
|
47
|
+
autoload :SendActivity, "constantcontact/components/tracking/send_activity"
|
48
|
+
autoload :TrackingActivity, "constantcontact/components/tracking/tracking_activity"
|
49
|
+
autoload :TrackingSummary, "constantcontact/components/tracking/tracking_summary"
|
50
|
+
autoload :VerifiedEmailAddress, "constantcontact/components/account/verified_email_address"
|
51
|
+
end
|
52
|
+
|
53
|
+
module Exceptions
|
54
|
+
autoload :CtctException, "constantcontact/exceptions/ctct_exception"
|
55
|
+
autoload :IllegalArgumentException, "constantcontact/exceptions/illegal_argument_exception"
|
56
|
+
autoload :OAuth2Exception, "constantcontact/exceptions/oauth2_exception"
|
57
|
+
end
|
58
|
+
|
59
|
+
module Services
|
60
|
+
autoload :BaseService, "constantcontact/services/base_service"
|
61
|
+
autoload :ActivityService, "constantcontact/services/activity_service"
|
62
|
+
autoload :CampaignScheduleService, "constantcontact/services/campaign_schedule_service"
|
63
|
+
autoload :CampaignTrackingService, "constantcontact/services/campaign_tracking_service"
|
64
|
+
autoload :ContactService, "constantcontact/services/contact_service"
|
65
|
+
autoload :ContactTrackingService, "constantcontact/services/contact_tracking_service"
|
66
|
+
autoload :EmailMarketingService, "constantcontact/services/email_marketing_service"
|
67
|
+
autoload :ListService, "constantcontact/services/list_service"
|
68
|
+
autoload :AccountService, "constantcontact/services/account_service"
|
69
|
+
end
|
70
|
+
|
71
|
+
module Util
|
72
|
+
autoload :Config, "constantcontact/util/config"
|
73
|
+
autoload :Helpers, "constantcontact/util/helpers"
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,541 @@
|
|
1
|
+
#
|
2
|
+
# api.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
class Api
|
9
|
+
|
10
|
+
# Class constructor
|
11
|
+
# @param [String] api_key - Constant Contact API Key
|
12
|
+
# @return
|
13
|
+
def initialize(api_key)
|
14
|
+
Services::BaseService.api_key = api_key
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
# Get verified addresses for the account
|
19
|
+
# @param [String] access_token - Valid access token
|
20
|
+
# @return [Array<VerifiedEmailAddress>] an array of email addresses
|
21
|
+
def get_verified_email_addresses(access_token)
|
22
|
+
Services::AccountService.get_verified_email_addresses(access_token)
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
# Get a set of contacts
|
27
|
+
# @param [String] access_token - Valid access token
|
28
|
+
# @param [Integer] param - denotes the number of results per set, limited to 50,
|
29
|
+
# or a next parameter provided from a previous call
|
30
|
+
# @return [ResultSet<Contact>] a ResultSet of Contacts
|
31
|
+
def get_contacts(access_token, param = nil)
|
32
|
+
param = determine_param(param)
|
33
|
+
Services::ContactService.get_contacts(access_token, param)
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# Get an individual contact
|
38
|
+
# @param [String] access_token - Valid access token
|
39
|
+
# @param [Integer] contact_id - Id of the contact to retrieve
|
40
|
+
# @return [Contact]
|
41
|
+
def get_contact(access_token, contact_id)
|
42
|
+
Services::ContactService.get_contact(access_token, contact_id)
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
# Get contacts with a specified email eaddress
|
47
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
48
|
+
# @param [String] email - contact email address to search for
|
49
|
+
# @return [ResultSet<Contact>] a ResultSet of Contacts
|
50
|
+
def get_contact_by_email(access_token, email)
|
51
|
+
Services::ContactService.get_contacts(access_token, {'email' => email})
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
# Add a new contact to an account
|
56
|
+
# @param [String] access_token - Valid access token
|
57
|
+
# @param [Contact] contact - Contact to add
|
58
|
+
# @param [Boolean] action_by_visitor - if the action is being taken by the visitor
|
59
|
+
# @return [Contact]
|
60
|
+
def add_contact(access_token, contact, action_by_visitor = false)
|
61
|
+
Services::ContactService.add_contact(access_token, contact, action_by_visitor)
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
# Sets an individual contact to 'REMOVED' status
|
66
|
+
# @param [String] access_token - Valid access token
|
67
|
+
# @param [Mixed] contact - Either a Contact id or the Contact itself
|
68
|
+
# @raise [IllegalArgumentException] If contact is not an integer or a Contact object
|
69
|
+
# @return [Boolean]
|
70
|
+
def delete_contact(access_token, contact)
|
71
|
+
contact_id = get_argument_id(contact, 'Contact')
|
72
|
+
Services::ContactService.delete_contact(access_token, contact_id)
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
# Delete a contact from all contact lists
|
77
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
78
|
+
# @param [Mixed] contact - Contact id or the Contact object itself
|
79
|
+
# @raise [IllegalArgumentException] If contact is not an integer or a Contact object
|
80
|
+
# @return [Boolean]
|
81
|
+
def delete_contact_from_lists(access_token, contact)
|
82
|
+
contact_id = get_argument_id(contact, 'Contact')
|
83
|
+
Services::ContactService.delete_contact_from_lists(access_token, contact_id)
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
# Delete a contact from all contact lists
|
88
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
89
|
+
# @param [Mixed] contact - Contact id or a Contact object
|
90
|
+
# @param [Mixed] list - ContactList id or a ContactList object
|
91
|
+
# @raise [IllegalArgumentException] If contact is not an integer or a Contact object
|
92
|
+
# @return [Boolean]
|
93
|
+
def delete_contact_from_list(access_token, contact, list)
|
94
|
+
contact_id = get_argument_id(contact, 'Contact')
|
95
|
+
list_id = get_argument_id(list, 'ContactList')
|
96
|
+
Services::ContactService.delete_contact_from_list(access_token, contact_id, list_id)
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
# Update an individual contact
|
101
|
+
# @param [String] access_token - Valid access token
|
102
|
+
# @param [Contact] contact - Contact to update
|
103
|
+
# @param [Boolean] action_by_visitor - if the action is being taken by the visitor
|
104
|
+
# @return [Contact]
|
105
|
+
def update_contact(access_token, contact, action_by_visitor = false)
|
106
|
+
Services::ContactService.update_contact(access_token, contact, action_by_visitor)
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
# Get lists
|
111
|
+
# @param [String] access_token - Valid access token
|
112
|
+
# @return [Array<ContactList>] Array of ContactList objects
|
113
|
+
def get_lists(access_token)
|
114
|
+
Services::ListService.get_lists(access_token)
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
# Get an individual list
|
119
|
+
# @param [String] access_token - Valid access token
|
120
|
+
# @param [Integer] list_id - Id of the list to retrieve
|
121
|
+
# @return [ContactList]
|
122
|
+
def get_list(access_token, list_id)
|
123
|
+
Services::ListService.get_list(access_token, list_id)
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
# Add a new list to an account
|
128
|
+
# @param [String] access_token - Valid access token
|
129
|
+
# @param [ContactList] list - List to add
|
130
|
+
# @return [ContactList]
|
131
|
+
def add_list(access_token, list)
|
132
|
+
Services::ListService.add_list(access_token, list)
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
# Update a contact list
|
137
|
+
# @param [String] access_token - Valid access token
|
138
|
+
# @param [ContactList] list - ContactList to update
|
139
|
+
# @return [ContactList]
|
140
|
+
def update_list(access_token, list)
|
141
|
+
Services::ListService.update_list(access_token, list)
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
# Get contact that belong to a specific list
|
146
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
147
|
+
# @param [Mixed] list - Integer id of the list or ContactList object
|
148
|
+
# @raise [IllegalArgumentException] If contact is not an integer or contact
|
149
|
+
# @return [Array<Contact>] An array of contacts
|
150
|
+
def get_contacts_from_list(access_token, list)
|
151
|
+
list_id = get_argument_id(list, 'ContactList')
|
152
|
+
Services::ListService.get_contacts_from_list(access_token, list_id)
|
153
|
+
end
|
154
|
+
|
155
|
+
|
156
|
+
# Get a set of campaigns
|
157
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
158
|
+
# @param [String] param - denotes the number of results per set, limited to 50, or a next parameter provided
|
159
|
+
# from a previous call
|
160
|
+
# @return [ResultSet<Campaign>]
|
161
|
+
def get_email_campaigns(access_token, param = nil)
|
162
|
+
param = determine_param(param)
|
163
|
+
Services::EmailMarketingService.get_campaigns(access_token, param)
|
164
|
+
end
|
165
|
+
|
166
|
+
|
167
|
+
# Get an individual campaign
|
168
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
169
|
+
# @param [Integer] campaign_id - Valid campaign id
|
170
|
+
# @return [Campaign]
|
171
|
+
def get_email_campaign(access_token, campaign_id)
|
172
|
+
Services::EmailMarketingService.get_campaign(access_token, campaign_id)
|
173
|
+
end
|
174
|
+
|
175
|
+
|
176
|
+
# Delete an individual campaign
|
177
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
178
|
+
# @param [Mixed] campaign - Id of a campaign or a Campaign object
|
179
|
+
# @raise IllegalArgumentException - if a Campaign object or campaign id is not passed
|
180
|
+
# @return [Boolean]
|
181
|
+
def delete_email_campaign(access_token, campaign)
|
182
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
183
|
+
Services::EmailMarketingService.delete_campaign(access_token, campaign_id)
|
184
|
+
end
|
185
|
+
|
186
|
+
|
187
|
+
# Create a new campaign
|
188
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
189
|
+
# @param [Campaign] campaign - Campaign to be created
|
190
|
+
# @return [Campaign] - created campaign
|
191
|
+
def add_email_campaign(access_token, campaign)
|
192
|
+
Services::EmailMarketingService.add_campaign(access_token, campaign)
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
# Update a specific campaign
|
197
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
198
|
+
# @param [Campaign] campaign - Campaign to be updated
|
199
|
+
# @return [Campaign] - updated campaign
|
200
|
+
def update_email_campaign(access_token, campaign)
|
201
|
+
Services::EmailMarketingService.update_campaign(access_token, campaign)
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
# Schedule a campaign to be sent
|
206
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
207
|
+
# @param [Mixed] campaign - Id of a campaign or a Campaign object
|
208
|
+
# @param [Schedule] schedule - Schedule to be associated with the provided campaign
|
209
|
+
# @return [Campaign] - updated campaign
|
210
|
+
def add_email_campaign_schedule(access_token, campaign, schedule)
|
211
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
212
|
+
Services::CampaignScheduleService.add_schedule(access_token, campaign_id, schedule)
|
213
|
+
end
|
214
|
+
|
215
|
+
|
216
|
+
# Get an array of schedules associated with a given campaign
|
217
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
218
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
219
|
+
# @return [Array<Schedule>]
|
220
|
+
def get_email_campaign_schedules(access_token, campaign)
|
221
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
222
|
+
Services::CampaignScheduleService.get_schedules(access_token, campaign_id)
|
223
|
+
end
|
224
|
+
|
225
|
+
|
226
|
+
# Get a specific schedule associated with a given campaign
|
227
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
228
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
229
|
+
# @param [Mixed] schedule - Schedule id or Schedule object itself
|
230
|
+
# @raise IllegalArgumentException
|
231
|
+
# @return [Schedule]
|
232
|
+
def get_email_campaign_schedule(access_token, campaign, schedule)
|
233
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
234
|
+
schedule_id = get_argument_id(schedule, 'Schedule')
|
235
|
+
Services::CampaignScheduleService.get_schedule(access_token, campaign_id, schedule_id)
|
236
|
+
end
|
237
|
+
|
238
|
+
|
239
|
+
# Update a specific schedule associated with a given campaign
|
240
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
241
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
242
|
+
# @param [Schedule] schedule - Schedule to be updated
|
243
|
+
# @return [Schedule]
|
244
|
+
def update_email_campaign_schedule(access_token, campaign, schedule)
|
245
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
246
|
+
Services::CampaignScheduleService.update_schedule(access_token, campaign_id, schedule)
|
247
|
+
end
|
248
|
+
|
249
|
+
|
250
|
+
# Delete a specific schedule associated with a given campaign
|
251
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
252
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
253
|
+
# @param [Mixed] schedule - Schedule id or Schedule object itself
|
254
|
+
# @raise IllegalArgumentException
|
255
|
+
# @return [Boolean]
|
256
|
+
def delete_email_campaign_schedule(access_token, campaign, schedule)
|
257
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
258
|
+
schedule_id = get_argument_id(schedule, 'Schedule')
|
259
|
+
Services::CampaignScheduleService.delete_schedule(access_token, campaign_id, schedule_id)
|
260
|
+
end
|
261
|
+
|
262
|
+
|
263
|
+
# Send a test send of a campaign
|
264
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
265
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
266
|
+
# @param [TestSend] test_send - test send details
|
267
|
+
# @return [TestSend]
|
268
|
+
def send_email_campaign_test(access_token, campaign, test_send)
|
269
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
270
|
+
Services::CampaignScheduleService.send_test(access_token, campaign_id, test_send)
|
271
|
+
end
|
272
|
+
|
273
|
+
|
274
|
+
# Get sends for a campaign
|
275
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
276
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
277
|
+
# @param [String] param - next value returned from a previous request (used in pagination)
|
278
|
+
# @return [ResultSet<SendActivity>]
|
279
|
+
def get_email_campaign_sends(access_token, campaign, param = nil)
|
280
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
281
|
+
param = determine_param(param)
|
282
|
+
Services::CampaignTrackingService.get_sends(access_token, campaign_id, param)
|
283
|
+
end
|
284
|
+
|
285
|
+
|
286
|
+
# Get bounces for a campaign
|
287
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
288
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
289
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
290
|
+
# an initial request
|
291
|
+
# @return [ResultSet<BounceActivity>]
|
292
|
+
def get_email_campaign_bounces(access_token, campaign, param = nil)
|
293
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
294
|
+
param = determine_param(param)
|
295
|
+
Services::CampaignTrackingService.get_bounces(access_token, campaign_id, param)
|
296
|
+
end
|
297
|
+
|
298
|
+
|
299
|
+
# Get clicks for a campaign
|
300
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
301
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
302
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
303
|
+
# an initial request
|
304
|
+
# @return [ResultSet<ClickActivity>]
|
305
|
+
def get_email_campaign_clicks(access_token, campaign, param = nil)
|
306
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
307
|
+
param = determine_param(param)
|
308
|
+
Services::CampaignTrackingService.get_clicks(access_token, campaign_id, param)
|
309
|
+
end
|
310
|
+
|
311
|
+
|
312
|
+
# Get opens for a campaign
|
313
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
314
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
315
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
316
|
+
# an initial request
|
317
|
+
# @return [ResultSet<OpenActivity>]
|
318
|
+
def get_email_campaign_opens(access_token, campaign, param = nil)
|
319
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
320
|
+
param = determine_param(param)
|
321
|
+
Services::CampaignTrackingService.get_opens(access_token, campaign_id, param)
|
322
|
+
end
|
323
|
+
|
324
|
+
|
325
|
+
# Get forwards for a campaign
|
326
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
327
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
328
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
329
|
+
# an initial request
|
330
|
+
# @return [ResultSet<ForwardActivity>]
|
331
|
+
def get_email_campaign_forwards(access_token, campaign, param = nil)
|
332
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
333
|
+
param = determine_param(param)
|
334
|
+
Services::CampaignTrackingService.get_forwards(access_token, campaign_id, param)
|
335
|
+
end
|
336
|
+
|
337
|
+
|
338
|
+
# Get unsubscribes for a campaign
|
339
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
340
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
341
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
342
|
+
# an initial request
|
343
|
+
# @return [ResultSet<UnsubscribeActivity>] - Containing a results array of UnsubscribeActivity
|
344
|
+
def get_email_campaign_unsubscribes(access_token, campaign, param = nil)
|
345
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
346
|
+
param = determine_param(param)
|
347
|
+
Services::CampaignTrackingService.get_unsubscribes(access_token, campaign_id, param)
|
348
|
+
end
|
349
|
+
|
350
|
+
|
351
|
+
# Get a reporting summary for a campaign
|
352
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
353
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
354
|
+
# @return [TrackingSummary]
|
355
|
+
def get_email_campaign_summary_report(access_token, campaign)
|
356
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
357
|
+
Services::CampaignTrackingService.get_summary(access_token, campaign_id)
|
358
|
+
end
|
359
|
+
|
360
|
+
|
361
|
+
# Get sends for a Contact
|
362
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
363
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
364
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
365
|
+
# an initial request
|
366
|
+
# @return [ResultSet<SendActivity>]
|
367
|
+
def get_contact_sends(access_token, contact, param = nil)
|
368
|
+
contact_id = get_argument_id(contact, 'Contact')
|
369
|
+
Services::ContactTrackingService.get_sends(access_token, contact_id, param)
|
370
|
+
end
|
371
|
+
|
372
|
+
|
373
|
+
# Get bounces for a Contact
|
374
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
375
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
376
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
377
|
+
# an initial request
|
378
|
+
# @return [ResultSet<BounceActivity>]
|
379
|
+
def get_contact_bounces(access_token, contact, param = nil)
|
380
|
+
contact_id = get_argument_id(contact, 'Contact')
|
381
|
+
Services::ContactTrackingService.get_bounces(access_token, contact_id, param)
|
382
|
+
end
|
383
|
+
|
384
|
+
|
385
|
+
# Get clicks for a Contact
|
386
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
387
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
388
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
389
|
+
# an initial request
|
390
|
+
# @return [ResultSet<ClickActivity>]
|
391
|
+
def get_contact_clicks(access_token, contact, param = nil)
|
392
|
+
contact_id = get_argument_id(contact, 'Contact')
|
393
|
+
param = determine_param(param)
|
394
|
+
Services::ContactTrackingService.get_clicks(access_token, contact_id, param)
|
395
|
+
end
|
396
|
+
|
397
|
+
|
398
|
+
# Get opens for a Contact
|
399
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
400
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
401
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
402
|
+
# an initial request
|
403
|
+
# @return [ResultSet<OpenActivity>]
|
404
|
+
def get_contact_opens(access_token, contact, param = nil)
|
405
|
+
contact_id = get_argument_id(contact, 'Contact')
|
406
|
+
param = determine_param(param)
|
407
|
+
Services::ContactTrackingService.get_opens(access_token, contact_id, param)
|
408
|
+
end
|
409
|
+
|
410
|
+
|
411
|
+
# Get forwards for a Contact
|
412
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
413
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
414
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
415
|
+
# an initial request
|
416
|
+
# @return [ResultSet<ForwardActivity>]
|
417
|
+
def get_contact_forwards(access_token, contact, param = nil)
|
418
|
+
contact_id = get_argument_id(contact, 'Contact')
|
419
|
+
param = determine_param(param)
|
420
|
+
Services::ContactTrackingService.get_forwards(access_token, contact_id, param)
|
421
|
+
end
|
422
|
+
|
423
|
+
|
424
|
+
# Get unsubscribes for a Contact
|
425
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
426
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
427
|
+
# @param [Hash] param - either the next link from a previous request, or a limit or restrict the page size of
|
428
|
+
# an initial request
|
429
|
+
# @return [UnsubscribeActivity] - Containing a results array of UnsubscribeActivity
|
430
|
+
def get_contact_unsubscribes(access_token, contact, param = nil)
|
431
|
+
contact_id = get_argument_id(contact, 'Contact')
|
432
|
+
param = determine_param(param)
|
433
|
+
Services::ContactTrackingService.get_unsubscribes(access_token, contact_id, param)
|
434
|
+
end
|
435
|
+
|
436
|
+
|
437
|
+
# Get a reporting summary for a Contact
|
438
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
439
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
440
|
+
# @return [TrackingSummary]
|
441
|
+
def get_contact_summary_report(access_token, contact)
|
442
|
+
contact_id = get_argument_id(contact, 'Contact')
|
443
|
+
Services::ContactTrackingService.get_summary(access_token, contact_id)
|
444
|
+
end
|
445
|
+
|
446
|
+
|
447
|
+
# Get an array of activities
|
448
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
449
|
+
# @return [Array<Activity>]
|
450
|
+
def get_activities(access_token)
|
451
|
+
Services::ActivityService.get_activities(access_token)
|
452
|
+
end
|
453
|
+
|
454
|
+
|
455
|
+
# Get a single activity by id
|
456
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
457
|
+
# @param [String] activity_id - Activity id
|
458
|
+
# @return [Activity]
|
459
|
+
def get_activity(access_token, activity_id)
|
460
|
+
Services::ActivityService.get_activity(access_token, activity_id)
|
461
|
+
end
|
462
|
+
|
463
|
+
|
464
|
+
# Add an AddContacts activity to add contacts in bulk
|
465
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
466
|
+
# @param [AddContacts] add_contacts - Add Contacts
|
467
|
+
# @return [Activity]
|
468
|
+
def add_add_contacts_activity(access_token, add_contacts)
|
469
|
+
Services::ActivityService.create_add_contacts_activity(access_token, add_contacts)
|
470
|
+
end
|
471
|
+
|
472
|
+
|
473
|
+
# Add a ClearLists Activity to remove all contacts from the provided lists
|
474
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
475
|
+
# @param [Array<Lists>] lists - Add Contacts Activity
|
476
|
+
# @return [Activity]
|
477
|
+
def add_clear_lists_activity(access_token, lists)
|
478
|
+
Services::ActivityService.add_clear_lists_activity(access_token, lists)
|
479
|
+
end
|
480
|
+
|
481
|
+
|
482
|
+
# Add a Remove Contacts From Lists Activity
|
483
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
484
|
+
# @param [Array<EmailAddress>] email_addresses - email addresses to be removed
|
485
|
+
# @param [Array<Lists>] lists - lists to remove the provided email addresses from
|
486
|
+
# @return [Activity]
|
487
|
+
def add_remove_contacts_from_lists_activity(access_token, email_addresses, lists)
|
488
|
+
Services::ActivityService.add_remove_contacts_from_lists_activity(access_token, email_addresses, lists)
|
489
|
+
end
|
490
|
+
|
491
|
+
|
492
|
+
# Create an Export Contacts Activity
|
493
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
494
|
+
# @param [<Array>Contacts] export_contacts - Contacts to be exported
|
495
|
+
# @return [Activity]
|
496
|
+
def add_export_contacts_activity(access_token, export_contacts)
|
497
|
+
Services::ActivityService.add_export_contacts_activity(access_token, export_contacts)
|
498
|
+
end
|
499
|
+
|
500
|
+
|
501
|
+
private
|
502
|
+
|
503
|
+
|
504
|
+
# Get the id of object, or attempt to convert the argument to an int
|
505
|
+
# @param [Mixed] item - object or a numeric value
|
506
|
+
# @param [String] class_name - class name to test the given object against
|
507
|
+
# @raise IllegalArgumentException - if the item is not an instance of the class name given, or cannot be
|
508
|
+
# converted to a numeric value
|
509
|
+
# @return [Integer]
|
510
|
+
def get_argument_id(item, class_name)
|
511
|
+
item_id = nil
|
512
|
+
if item.is_a?(Integer)
|
513
|
+
item_id = item
|
514
|
+
elsif item.class.to_s.split('::').last == class_name
|
515
|
+
item_id = item.id
|
516
|
+
else
|
517
|
+
raise Exceptions::IllegalArgumentException.new(sprintf(Util::Config.get('errors.id_or_object'), class_name))
|
518
|
+
end
|
519
|
+
item_id
|
520
|
+
end
|
521
|
+
|
522
|
+
|
523
|
+
# Append the limit parameter, if the value is an integer
|
524
|
+
# @param [String] param - parameter value
|
525
|
+
# @return [Hash] the parameters as a hash object
|
526
|
+
def determine_param(param)
|
527
|
+
params = {}
|
528
|
+
if param
|
529
|
+
param = param.to_s
|
530
|
+
if param[0, 1] == '?'
|
531
|
+
hash_params = CGI::parse(param[1..-1])
|
532
|
+
params = Hash[*hash_params.collect {|key, value| [key, value.first] }.flatten]
|
533
|
+
else
|
534
|
+
params['limit'] = param
|
535
|
+
end
|
536
|
+
end
|
537
|
+
params
|
538
|
+
end
|
539
|
+
|
540
|
+
end
|
541
|
+
end
|