mc 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mc/commands.rb +2 -1
- data/lib/mc/commands/campaigns.rb +37 -17
- data/lib/mc/commands/ecomm.rb +24 -2
- data/lib/mc/commands/export.rb +1 -6
- data/lib/mc/commands/helper.rb +24 -2
- data/lib/mc/commands/lists-group.rb +105 -0
- data/lib/mc/commands/lists-merge-var.rb +56 -0
- data/lib/mc/commands/lists-webhook.rb +44 -0
- data/lib/mc/commands/lists.rb +118 -41
- data/lib/mc/commands/reports.rb +114 -20
- data/lib/mc/commands/search.rb +3 -3
- data/lib/mc/commands/users.rb +53 -6
- data/lib/mc/commands/vip.rb +11 -13
- data/lib/mc/helper.rb +14 -6
- data/lib/mc/mailchimp.rb +1 -1
- data/lib/mc/mailchimp_cached.rb +2 -1
- data/lib/mc/version.rb +1 -1
- data/lib/mc/writer.rb +27 -11
- data/test/mc_test.rb +3 -3
- data/test/test_helper.rb +3 -4
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d79a45dcaa36faa47ceedc159a03ae01730318f
|
4
|
+
data.tar.gz: 99326eed6d7cc453b5d83e7b828ff6a7baab9b1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5dc376cf666cf740fa86a19001fe17bb682b5a2d866825b0db37a3dd871682b8d1aad4ebee53ba5b3210b0032cafe551593435dc83d56bc397fcc3b4f9612734
|
7
|
+
data.tar.gz: 6bcd1ca4fdd3587c552ca0dc609a81129f8cdcc6dd4b9eea9aa81614edb3185bc3bf08daf24d986eb2e98069fdc859a98bfecd3dcd20fe5f5c7e6f9be78bffbb
|
data/lib/mc/commands.rb
CHANGED
@@ -6,6 +6,7 @@ program_desc 'Command line interface to MailChimp. Eep eep!'
|
|
6
6
|
version MC::VERSION
|
7
7
|
|
8
8
|
config_file '.mailchimp'
|
9
|
+
subcommand_option_handling :normal
|
9
10
|
|
10
11
|
desc 'Turn on debugging'
|
11
12
|
switch [:debug], :negatable => false
|
@@ -21,7 +22,7 @@ desc 'List to use'
|
|
21
22
|
arg_name 'listID'
|
22
23
|
flag [:list]
|
23
24
|
|
24
|
-
desc 'formatted, raw, or
|
25
|
+
desc 'table, formatted, raw, or hash'
|
25
26
|
arg_name 'format'
|
26
27
|
flag [:output,:o]
|
27
28
|
|
@@ -82,7 +82,7 @@ command :campaigns do |c|
|
|
82
82
|
type = options[:type]
|
83
83
|
|
84
84
|
standard_opts = {
|
85
|
-
:list_id => options[:id],
|
85
|
+
:list_id => required_option(:id, options[:id], global[:list]),
|
86
86
|
:subject => required_option(:subject, options[:subject]),
|
87
87
|
:from_email => required_option('from-email', options['from-email']),
|
88
88
|
:from_name => required_option('from-name', options['from-name']),
|
@@ -124,14 +124,21 @@ command :campaigns do |c|
|
|
124
124
|
|
125
125
|
c.desc 'Send Campaign Now'
|
126
126
|
c.command :send do |s|
|
127
|
+
s.desc 'Campaign ID'
|
128
|
+
s.flag :cid
|
129
|
+
|
127
130
|
s.action do |global,options,args|
|
128
|
-
|
129
|
-
|
131
|
+
cid = required_argument("Need to supply a campaign id", options[:cid])
|
132
|
+
print "Sending campaign #{cid}... "
|
133
|
+
@mailchimp.campaigns_send(:cid => cid)["complete"] ? puts("done!") : puts("ut oh, no can do!")
|
130
134
|
end
|
131
135
|
end
|
132
136
|
|
133
137
|
c.desc 'Schedule Campaign'
|
134
138
|
c.command :schedule do |s|
|
139
|
+
s.desc 'Campaign ID'
|
140
|
+
s.flag :cid
|
141
|
+
|
135
142
|
s.desc 'Date to schedule campaign in YYYY-MM-DD format'
|
136
143
|
s.flag :date, :default_value => (Time.now + 86400).strftime("%Y-%m-%d")
|
137
144
|
|
@@ -139,29 +146,34 @@ command :campaigns do |c|
|
|
139
146
|
s.flag :time, :default_value => '08:00:00'
|
140
147
|
|
141
148
|
s.action do |global,options,args|
|
142
|
-
|
143
|
-
puts @mailchimp.campaigns_schedule(:cid =>
|
149
|
+
cid = required_argument("Need to supply a campaign id", options[:cid])
|
150
|
+
puts @mailchimp.campaigns_schedule(:cid => cid, :schedule_time => options[:date] + ' ' + options[:time])
|
144
151
|
end
|
145
152
|
end
|
146
153
|
|
147
154
|
c.desc 'Send Test Campaign'
|
148
|
-
c.command
|
155
|
+
c.command 'send-test' do |s|
|
156
|
+
s.desc 'Campaign ID'
|
157
|
+
s.flag :cid
|
158
|
+
|
149
159
|
s.action do |global,options,args|
|
150
|
-
|
160
|
+
cid = required_argument("Need to supply a campaign id", options[:cid])
|
161
|
+
emails = required_argument("Need to supply at least one email to send test campaign to.", args)
|
151
162
|
|
152
|
-
|
153
|
-
|
163
|
+
print "Sending test for campaign #{cid}... "
|
164
|
+
@mailchimp.campaigns_send_test(:cid=> cid, :test_emails => emails)["complete"] ? puts("done!") : puts("ut oh, no can do!")
|
154
165
|
end
|
155
166
|
end
|
156
167
|
|
157
168
|
c.desc 'Delete Campaign'
|
158
169
|
c.command :delete do |s|
|
159
|
-
s.
|
160
|
-
|
161
|
-
throw "Need a valid Campaign ID." if campaign_id.nil?
|
170
|
+
s.desc 'Campaign ID'
|
171
|
+
s.flag :cid
|
162
172
|
|
163
|
-
|
164
|
-
|
173
|
+
s.action do |global,options,args|
|
174
|
+
cid = required_argument("Need to supply a campaign id", options[:cid])
|
175
|
+
print "Deleting campaign #{cid}... "
|
176
|
+
@mailchimp.campaigns_send_test(:cid=> cid)["complete"] ? puts("done!") : puts("ut oh, no can do!")
|
165
177
|
end
|
166
178
|
end
|
167
179
|
|
@@ -179,25 +191,33 @@ command :campaigns do |c|
|
|
179
191
|
|
180
192
|
c.desc 'Check to see if campaign is ready to send'
|
181
193
|
c.command :ready do |s|
|
194
|
+
s.desc 'Campaign ID'
|
195
|
+
s.flag :cid
|
196
|
+
|
182
197
|
s.action do |global,options,args|
|
183
198
|
cid = options[:cid] || get_last_campaign_id
|
184
199
|
|
185
|
-
puts cid
|
186
200
|
@output.standard @mailchimp_cached.campaigns_ready(:cid=> cid)
|
187
201
|
end
|
188
202
|
end
|
189
203
|
|
190
204
|
c.command "segment-test" do |s|
|
205
|
+
s.desc 'List ID'
|
206
|
+
s.flag :id
|
207
|
+
|
191
208
|
s.desc "Use either 'any' or 'all'"
|
192
209
|
s.flag :match, :default_value => 'all'
|
193
210
|
|
194
211
|
s.desc 'Condition in the format field,op,value'
|
195
212
|
s.flag :condition
|
213
|
+
|
196
214
|
s.action do |global,options,args|
|
197
|
-
id =
|
215
|
+
id = required_option(:id, options[:id], global[:list])
|
216
|
+
match = required_option(:match, options[:match])
|
217
|
+
condition = required_option(:condition, options[:condition])
|
198
218
|
|
199
219
|
segment = {}
|
200
|
-
segment['match'] =
|
220
|
+
segment['match'] = match
|
201
221
|
field, op, value = options[:condition].split(',')
|
202
222
|
segment['conditions'] = [{:field => field, :op => op, :value => value}]
|
203
223
|
|
data/lib/mc/commands/ecomm.rb
CHANGED
@@ -16,14 +16,15 @@ command :ecomm do |c|
|
|
16
16
|
|
17
17
|
s.action do |global,options,args|
|
18
18
|
order = {}
|
19
|
-
order[:id] = options[:order_id]
|
19
|
+
order[:id] = required_option(:order_id, options[:order_id])
|
20
|
+
order[:campaign_id] = options[:campaign_id]
|
20
21
|
order[:email_id] = options[:email_id]
|
21
22
|
order[:email] = options[:email]
|
22
23
|
order[:total] = options[:total]
|
23
24
|
order[:order_date] = options[:order_date]
|
24
25
|
order[:shipping] = options[:shipping]
|
25
26
|
order[:tax] = options[:tax]
|
26
|
-
order[:store_id] = options[:store_id]
|
27
|
+
order[:store_id] = required_option(:store_id, options[:store_id])
|
27
28
|
order[:store_name] = options[:store_name]
|
28
29
|
order[:items] = [{:product_id => 500, :product_name => "Freddie Doll", :category_id => 1, :category_name => "Toys"}]
|
29
30
|
|
@@ -34,4 +35,25 @@ command :ecomm do |c|
|
|
34
35
|
end
|
35
36
|
end
|
36
37
|
end
|
38
|
+
|
39
|
+
c.desc 'Delete Ecommerce Order Information used for segmentation'
|
40
|
+
c.command :delete do |s|
|
41
|
+
s.flag :store_id
|
42
|
+
s.flag :order_id
|
43
|
+
|
44
|
+
s.action do |global,options,args|
|
45
|
+
if @mailchimp.ecomm_order_del(:store_id => required_option(:store_id, options[:store_id]), :order_id => required_option(:order_id, options[:order_id]))
|
46
|
+
puts "Order deleted!"
|
47
|
+
else
|
48
|
+
puts "Order not deleted. :("
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
c.desc 'Retrieve the Ecommerce Orders for an account'
|
54
|
+
c.command :orders do |s|
|
55
|
+
s.action do |global,options,args|
|
56
|
+
@output.standard @mailchimp_cached.ecomm_orders['data'], :fields => [:store_id, :store_name, :order_id, :campaign_id, :email, :order_total, :order_date]
|
57
|
+
end
|
58
|
+
end
|
37
59
|
end
|
data/lib/mc/commands/export.rb
CHANGED
@@ -15,7 +15,7 @@ command :export do |c|
|
|
15
15
|
c.flag :condition
|
16
16
|
|
17
17
|
s.action do |global,options,args|
|
18
|
-
id =
|
18
|
+
id = required_option(:id, options[:id], global[:list])
|
19
19
|
|
20
20
|
if options[:condition]
|
21
21
|
segment = {}
|
@@ -26,10 +26,6 @@ command :export do |c|
|
|
26
26
|
|
27
27
|
status = options[:status]
|
28
28
|
|
29
|
-
# segment = {}
|
30
|
-
# segment["match"] = "all"
|
31
|
-
# segment["conditions"] = [{:field => 'aim', :op => 'open', :value => 'b55303410e'}]
|
32
|
-
|
33
29
|
@mailchimp.export_list(:id => id, :status => status, :segment => segment).each do |subscriber|
|
34
30
|
puts subscriber
|
35
31
|
end
|
@@ -66,4 +62,3 @@ command :export do |c|
|
|
66
62
|
end
|
67
63
|
end
|
68
64
|
end
|
69
|
-
|
data/lib/mc/commands/helper.rb
CHANGED
@@ -1,12 +1,34 @@
|
|
1
1
|
desc 'Basic admin funtions'
|
2
2
|
command :helper do |c|
|
3
3
|
c.desc 'View API key currently configured'
|
4
|
-
c.command :apikey do |
|
5
|
-
|
4
|
+
c.command :apikey do |s|
|
5
|
+
s.action do |global,options,args|
|
6
6
|
puts global[:apikey]
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
+
c.desc 'View user_id of account'
|
11
|
+
c.command :userid do |s|
|
12
|
+
s.action do |global,options,args|
|
13
|
+
puts @mailchimp_cached.helper_account_details['user_id']
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
c.desc 'View default list if set in config file'
|
18
|
+
c.command 'default-list' do |s|
|
19
|
+
s.action do |global,options,args|
|
20
|
+
global[:list].nil? ? puts('No default list set.') : puts(global[:list])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
c.desc 'Quickly see the last campaign sent'
|
25
|
+
c.command 'last-campaign' do |s|
|
26
|
+
s.action do |global,options,args|
|
27
|
+
result = @mailchimp.campaigns_list(:limit => 1)['data'].first
|
28
|
+
puts "#{result['id']}: #{result['title']}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
10
32
|
# === Actual MailChimp API Calls below ===
|
11
33
|
|
12
34
|
# helper/account-details (string apikey, array exclude)
|
@@ -0,0 +1,105 @@
|
|
1
|
+
command :lists do |lists|
|
2
|
+
lists.desc 'Manage groups'
|
3
|
+
lists.command :group do |c|
|
4
|
+
# lists/interest-group-add (string apikey, string id, string group_name, int grouping_id)
|
5
|
+
c.desc 'Add a single Interest Group'
|
6
|
+
c.command :add do |s|
|
7
|
+
s.desc 'list id'
|
8
|
+
s.flag :id
|
9
|
+
s.flag 'grouping-id'
|
10
|
+
|
11
|
+
s.action do |global,options,args|
|
12
|
+
id = required_argument(:id, options[:id], global[:list])
|
13
|
+
group_name = required_argument("Need to provide a group name.", args).first
|
14
|
+
|
15
|
+
@output.standard @mailchimp.lists_interest_group_add(:id => id, :group_name => group_name, :grouping_id => options['grouping-id'])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# lists/interest-group-del (string apikey, string id, string group_name, int grouping_id)
|
20
|
+
c.desc 'Delete a single Interest Group'
|
21
|
+
c.command :delete do |s|
|
22
|
+
s.desc 'list id'
|
23
|
+
s.flag :id
|
24
|
+
s.flag 'grouping-id'
|
25
|
+
|
26
|
+
s.action do |global,options,args|
|
27
|
+
id = required_argument(:id, options[:id], global[:list])
|
28
|
+
group_name = required_argument("Need to provide a group name.", args).first
|
29
|
+
@output.standard @mailchimp.lists_interest_group_delete(:id => id, :group_name => group_name, :grouping_id => options['grouping-id'])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# lists/interest-group-update (string apikey, string id, string old_name, string new_name, int grouping_id)
|
34
|
+
c.desc 'Change the name of an Interest Group'
|
35
|
+
c.command :update do |s|
|
36
|
+
s.desc 'list id'
|
37
|
+
s.flag :id
|
38
|
+
s.flag :old
|
39
|
+
s.flag :new
|
40
|
+
s.flag 'grouping-id'
|
41
|
+
|
42
|
+
s.action do |global,options,args|
|
43
|
+
id = required_argument(:id, options[:id], global[:list])
|
44
|
+
@output.standard @mailchimp.lists_interest_group_delete(:id => id, :old_name => options[:old], :new_name => options[:new], :grouping_id => options['grouping-id'])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
lists.desc 'Manage groupings'
|
50
|
+
lists.command :grouping do |c|
|
51
|
+
# lists/interest-grouping-add (string apikey, string id, string name, string type, array groups)
|
52
|
+
c.desc 'Add a new Interest Grouping'
|
53
|
+
c.arg_name 'groups'
|
54
|
+
c.command :add do |s|
|
55
|
+
s.desc 'list id'
|
56
|
+
s.flag :id
|
57
|
+
|
58
|
+
s.action do |global,options,args|
|
59
|
+
id = required_argument(:id, options[:id], global[:list])
|
60
|
+
@output.standard @mailchimp_cached.lists_grouping_add(:id => id, :name => options[:name], :type => options[:type])
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# lists/interest-grouping-del (string apikey, int grouping_id)
|
65
|
+
c.desc 'Delete an existing Interest Grouping'
|
66
|
+
c.command :delete do |s|
|
67
|
+
s.desc 'list id'
|
68
|
+
s.flag :id
|
69
|
+
|
70
|
+
s.action do |global,options,args|
|
71
|
+
id = required_argument(:id, options[:id], global[:list])
|
72
|
+
emails = create_email_struct(required_argument("Need to provide one or more email addresses.", args))
|
73
|
+
@output.standard @mailchimp_cached.lists_
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# lists/interest-grouping-update (string apikey, int grouping_id, string name, string value)
|
78
|
+
c.desc 'Update an existing Interest Grouping'
|
79
|
+
c.command :update do |s|
|
80
|
+
s.flag :grouping_id
|
81
|
+
s.flag :name
|
82
|
+
s.flag :value
|
83
|
+
|
84
|
+
s.action do |global,options,args|
|
85
|
+
id = required_argument(:id, options[:id], global[:list])
|
86
|
+
@output.standard @mailchimp_cached.lists_interest_grouping_update(:grouping_id => options[:grouping_id], :name => options[:name], :value => options[:value])
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# lists/interest-groupings (string apikey, string id, bool counts)
|
91
|
+
c.desc 'Get the list of interest groupings for a given list, including the label, form information, and included groups for each'
|
92
|
+
c.command :list do |s|
|
93
|
+
s.desc 'list id'
|
94
|
+
s.flag :id
|
95
|
+
s.switch :counts, :default_value => false
|
96
|
+
|
97
|
+
s.action do |global,options,args|
|
98
|
+
id = required_argument(:id, options[:id], global[:list])
|
99
|
+
@output.standard @mailchimp_cached.lists_interest_groupings(:id => id, :counts => options[:counts])
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
c.default_command :list
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
command :lists do |lists|
|
2
|
+
lists.desc 'Manage merge tags'
|
3
|
+
lists.command 'merge-vars' do |c|
|
4
|
+
# # lists/merge-var-add (string apikey, string id, string tag, string name, struct options)
|
5
|
+
# c.desc 'Add a new merge tag to a given list'
|
6
|
+
# c.command :add do |s|
|
7
|
+
# s.action do |global,options,args|
|
8
|
+
# end
|
9
|
+
# end
|
10
|
+
|
11
|
+
# # lists/merge-var-del (string apikey, string id, string tag)
|
12
|
+
# c.desc 'Delete a merge tag from a given list and all its members'
|
13
|
+
# c.long_desc <<EOS
|
14
|
+
# Seriously - the data is removed from all members as well! Note that on large lists this method may seem a bit slower than calls you typically make.
|
15
|
+
# EOS
|
16
|
+
# c.command :delete do |s|
|
17
|
+
# s.action do |global,options,args|
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
|
21
|
+
# # lists/merge-var-reset (string apikey, string id, string tag)
|
22
|
+
# c.desc 'Completely resets all data stored in a merge var on a list.'
|
23
|
+
# c.command :reset do |s|
|
24
|
+
# s.action do |global,options,args|
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
|
28
|
+
# # lists/merge-var-set (string apikey, string id, string tag, string value)
|
29
|
+
# c.desc 'Completely resets all data stored in a merge var on a list.'
|
30
|
+
# c.command :reset do |s|
|
31
|
+
# s.action do |global,options,args|
|
32
|
+
# end
|
33
|
+
# end
|
34
|
+
|
35
|
+
# # lists/merge-var-update (string apikey, string id, string tag, struct options)
|
36
|
+
# c.desc 'Completely resets all data stored in a merge var on a list.'
|
37
|
+
# c.command :reset do |s|
|
38
|
+
# s.action do |global,options,args|
|
39
|
+
# end
|
40
|
+
# end
|
41
|
+
|
42
|
+
# lists/merge-vars (string apikey, array id)
|
43
|
+
c.desc 'Get the list of merge tags for a given list, including their name, tag, and required setting'
|
44
|
+
c.command :list do |s|
|
45
|
+
s.desc 'List ID'
|
46
|
+
s.flag :id
|
47
|
+
|
48
|
+
s.action do |global,options,args|
|
49
|
+
id = required_option(:id, options[:id], global[:list])
|
50
|
+
@output.standard @mailchimp_cached.lists_merge_vars(:id => [id])['data'].first['merge_vars']
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
c.default_command :list
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
command :lists do |lists|
|
2
|
+
lists.desc 'Manage webhooks for a given lists'
|
3
|
+
lists.command :webhook do |c|
|
4
|
+
#lists/webhook-add (string apikey, string id, string url, struct actions, struct sources)
|
5
|
+
c.desc 'Add a new Webhook URL for the given list'
|
6
|
+
c.command :add do |s|
|
7
|
+
s.desc 'list id'
|
8
|
+
s.flag :id
|
9
|
+
|
10
|
+
s.action do |global,options,args|
|
11
|
+
s.flag :url
|
12
|
+
id = required_argument(:id, options[:id], global[:list])
|
13
|
+
@output.standard @mailchimp.lists_webhook_add(:id => id, :url => options[:url])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
#lists/webhook-del (string apikey, string id, string url)
|
18
|
+
c.desc 'Delete an existing Webhook URL from a given list'
|
19
|
+
c.command :delete do |s|
|
20
|
+
s.desc 'list id'
|
21
|
+
s.flag :id
|
22
|
+
|
23
|
+
s.action do |global,options,args|
|
24
|
+
s.flag :url
|
25
|
+
id = required_argument(:id, options[:id], global[:list])
|
26
|
+
@output.standard @mailchimp.lists_webhook_del(:id => id, :url => options[:url])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
#lists/webhooks (string apikey, string id)
|
31
|
+
c.desc 'Return the Webhooks configured for the given list'
|
32
|
+
c.command :list do |s|
|
33
|
+
s.desc 'list id'
|
34
|
+
s.flag :id
|
35
|
+
|
36
|
+
s.action do |global,options,args|
|
37
|
+
id = required_argument(:id, options[:id], global[:list])
|
38
|
+
@output.standard @mailchimp_cached.lists_webhooks(:id => id)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
c.default_command :list
|
43
|
+
end
|
44
|
+
end
|
data/lib/mc/commands/lists.rb
CHANGED
@@ -1,36 +1,35 @@
|
|
1
1
|
desc 'View information about lists and subscribers'
|
2
|
-
arg_name 'Describe arguments to lists here'
|
3
|
-
|
4
2
|
command :lists do |c|
|
5
|
-
c.desc '
|
6
|
-
c.
|
7
|
-
|
8
|
-
|
9
|
-
c.flag :email
|
10
|
-
|
11
|
-
c.desc 'Page number to start at'
|
12
|
-
c.flag :start, :default_value => 0
|
3
|
+
c.desc 'Get all email addresses that complained about a campaign sent to a list'
|
4
|
+
c.command 'abuse-reports' do |s|
|
5
|
+
s.desc 'list id'
|
6
|
+
s.flag :id
|
13
7
|
|
14
|
-
c.desc 'Retrieve all of the lists defined for your user account.'
|
15
|
-
c.command :list do |s|
|
16
|
-
s.action do |global,options,args|
|
17
|
-
stats_column = lambda{|l| "#{l['stats']['member_count']} / #{na(l['stats']['open_rate'])} / #{na(l['stats']['click_rate'])}"}
|
18
|
-
@output.standard @mailchimp_cached.lists_list['data'], :fields => [:id, :name, {"count / open % / click %" => stats_column}]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
c.desc 'Access up to the previous 180 days of daily detailed aggregated activity stats for a given list.'
|
23
|
-
c.command :activity do |s|
|
24
8
|
s.action do |global,options,args|
|
25
9
|
id = required_argument(:id, options[:id], global[:list])
|
26
10
|
@output.standard @mailchimp_cached.lists_activity(:id => id)
|
27
11
|
end
|
28
12
|
end
|
29
13
|
|
14
|
+
# c.desc 'Subscribe a batch of email addresses to a list at once.'
|
15
|
+
# c.command 'batch-subscribe' do |s|
|
16
|
+
# s.action do |global,options,args|
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
|
20
|
+
# c.desc 'Unsubscribe a batch of email addresses from a list.'
|
21
|
+
# c.command 'batch-unsubscribe' do |s|
|
22
|
+
# s.action do |global,options,args|
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
|
30
26
|
c.desc "Retrieve the clients that the list's subscribers have been tagged as being used based on user agents seen."
|
31
27
|
c.command :clients do |s|
|
28
|
+
s.desc 'list id'
|
29
|
+
s.flag :id
|
30
|
+
|
32
31
|
s.action do |global,options,args|
|
33
|
-
id =
|
32
|
+
id = required_option(:id, options[:id], global[:list])
|
34
33
|
|
35
34
|
results = @mailchimp_cached.lists_clients(:id => id)
|
36
35
|
if global[:output]
|
@@ -45,50 +44,128 @@ command :lists do |c|
|
|
45
44
|
end
|
46
45
|
end
|
47
46
|
|
48
|
-
c.desc '
|
49
|
-
c.command
|
47
|
+
c.desc 'Access the Growth History by Month for a given list.'
|
48
|
+
c.command :growth do |s|
|
49
|
+
s.desc 'list id'
|
50
|
+
s.flag :id
|
51
|
+
|
50
52
|
s.action do |global,options,args|
|
51
|
-
id =
|
52
|
-
@output.standard @mailchimp_cached.
|
53
|
+
id = required_option(:id, options[:id], global[:list])
|
54
|
+
@output.standard @mailchimp_cached.lists_growth_history(:id => id)
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
56
|
-
c.desc '
|
57
|
-
c.command :
|
58
|
-
s.
|
58
|
+
c.desc 'Retrieve all of the lists defined for your user account.'
|
59
|
+
c.command :list do |s|
|
60
|
+
s.action do |global,options,args|
|
61
|
+
stats_column = lambda{|l| "#{l['stats']['member_count']} / #{na(l['stats']['open_rate'])} / #{na(l['stats']['click_rate'])}"}
|
62
|
+
@output.standard @mailchimp_cached.lists_list['data'], :fields => [:id, :name, {"count / open % / click %" => stats_column}]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
c.desc 'Retrieve the locations (countries) that the list\'s subscribers have been tagged to based on geocoding their IP address.'
|
67
|
+
c.command :locations do |s|
|
68
|
+
s.desc 'list id'
|
69
|
+
s.flag :id
|
70
|
+
s.flag :num, :default_value => 25
|
71
|
+
|
72
|
+
s.action do |global,options,args|
|
73
|
+
id = required_option(:id, options[:id], global[:list])
|
74
|
+
@output.standard @mailchimp_cached.lists_locations(:id => id)[0..options[:num].to_i]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
c.desc 'Get the most recent 100 activities for particular list members.'
|
79
|
+
c.arg_name 'emails'
|
80
|
+
c.command 'member-activity' do |s|
|
81
|
+
s.desc 'list id'
|
82
|
+
s.flag :id
|
59
83
|
|
60
84
|
s.action do |global,options,args|
|
61
|
-
id =
|
62
|
-
|
85
|
+
id = required_option(:id, options[:id], global[:list])
|
86
|
+
emails = create_email_struct(required_argument("Need to provide one or more email addresses.", args))
|
87
|
+
|
88
|
+
@output.standard @mailchimp_cached.lists_member_activity(:id => id, :emails => emails)['data'].first['activity'], :fields => [:action, :timestamp, :title, :url]
|
63
89
|
end
|
64
90
|
end
|
65
91
|
|
66
92
|
c.desc 'Get information about one particular member.'
|
93
|
+
c.arg_name 'emails'
|
67
94
|
c.command 'member-info' do |s|
|
95
|
+
s.desc 'list id'
|
96
|
+
s.flag :id
|
97
|
+
|
68
98
|
s.action do |global,options,args|
|
69
|
-
id =
|
99
|
+
id = required_option(:id, options[:id], global[:list])
|
70
100
|
emails = create_email_struct(required_argument("Need to provide one or more email addresses.", args))
|
71
101
|
|
72
102
|
@output.as_hash @mailchimp_cached.lists_member_info(:id => id, :emails => emails)
|
73
103
|
end
|
74
104
|
end
|
75
105
|
|
76
|
-
c.desc '
|
77
|
-
c.command :
|
78
|
-
s.
|
106
|
+
c.desc 'Get all of the list members for a list that are of a particular status.'
|
107
|
+
c.command :members do |s|
|
108
|
+
s.desc 'list id'
|
109
|
+
s.flag :id
|
110
|
+
s.flag :limit, :default_value => 25
|
79
111
|
|
80
112
|
s.action do |global,options,args|
|
81
|
-
id =
|
82
|
-
@output.standard @mailchimp_cached.
|
113
|
+
id = required_option(:id, options[:id], global[:list])
|
114
|
+
@output.standard @mailchimp_cached.lists_members(:id => id, :limit => options[:limit])['data'], :fields => [:email, :member_rating, :status, :is_gmonkey]
|
83
115
|
end
|
84
116
|
end
|
85
117
|
|
86
|
-
c.desc '
|
87
|
-
c.
|
118
|
+
c.desc 'Subscribe the provided email to a list. By default this sends a confirmation email.'
|
119
|
+
c.arg_name 'emails'
|
120
|
+
c.command :subscribe do |s|
|
121
|
+
s.desc 'list id'
|
122
|
+
s.flag :id
|
123
|
+
|
88
124
|
s.action do |global,options,args|
|
89
|
-
|
90
|
-
#
|
91
|
-
|
125
|
+
#TODO: add support for merge fields
|
126
|
+
#TODO: add support for location
|
127
|
+
s.flag 'new-email'
|
128
|
+
s.flag 'group-id'
|
129
|
+
s.flag 'group-name'
|
130
|
+
s.flag :groups
|
131
|
+
s.flag 'optin-ip'
|
132
|
+
s.flag 'optin-time'
|
133
|
+
s.flag :language
|
134
|
+
s.flag :note
|
135
|
+
s.flag 'note-id'
|
136
|
+
s.flag 'note-action'
|
137
|
+
|
138
|
+
s.flag 'email-type'
|
139
|
+
s.switch 'double-optin'
|
140
|
+
s.switch 'update-existing'
|
141
|
+
s.switch 'replace-interests'
|
142
|
+
s.switch 'send-welcome'
|
143
|
+
|
144
|
+
id = required_argument(:id, options[:id], global[:list])
|
145
|
+
emails = create_email_struct(required_argument("Need to provide one or more email addresses.", args))
|
146
|
+
@output.as_hash @mailchimp.lists_subscribe(:id => id, :email => emails.first, :merge_vars => {:groupings => [{:id => 4493, :groups => ['Group1']}]})
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
c.desc 'Retrieve all of the Static Segments for a list.'
|
151
|
+
c.command 'static-segments' do |s|
|
152
|
+
s.desc 'list id'
|
153
|
+
s.flag :id
|
154
|
+
|
155
|
+
s.action do |global,options,args|
|
156
|
+
id = required_option(:id, options[:id], global[:list])
|
157
|
+
@output.as_hash @mailchimp_cached.lists_static_segments(:id => id)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
c.desc 'Retrieve all of the Static Segments for a list.'
|
162
|
+
c.command 'segments' do |s|
|
163
|
+
s.desc 'list id'
|
164
|
+
s.flag :id
|
165
|
+
|
166
|
+
s.action do |global,options,args|
|
167
|
+
id = required_option(:id, options[:id], global[:list])
|
168
|
+
@output.as_hash @mailchimp_cached.lists_segments(:id => id)
|
92
169
|
end
|
93
170
|
end
|
94
171
|
end
|
data/lib/mc/commands/reports.rb
CHANGED
@@ -1,20 +1,26 @@
|
|
1
1
|
desc 'Reports'
|
2
2
|
command :reports do |c|
|
3
|
-
|
4
3
|
# reports/abuse (string apikey, string cid, struct opts)
|
5
4
|
c.desc 'Get all email addresses that complained about a given campaign'
|
6
5
|
c.command :abuse do |s|
|
6
|
+
s.arg_name 'campaign id'
|
7
|
+
s.flag :cid
|
8
|
+
|
7
9
|
s.action do |global,options,args|
|
8
|
-
|
10
|
+
cid = options[:cid] || get_last_campaign_id
|
11
|
+
member_column = lambda{|l| "#{l['member']['email']}"}
|
12
|
+
@output.standard @mailchimp_cached.reports_abuse(:cid => cid)['data'], :fields => [:member => {:display_method => member_column}]
|
9
13
|
end
|
10
14
|
end
|
11
15
|
|
12
16
|
# reports/advice (string apikey, string cid)
|
13
17
|
c.desc 'Retrieve the text presented in our app for how a campaign performed and any advice we may have for you'
|
14
18
|
c.command :advice do |s|
|
19
|
+
s.arg_name 'campaign id'
|
20
|
+
s.flag :cid
|
21
|
+
|
15
22
|
s.action do |global,options,args|
|
16
23
|
cid = options[:cid] || get_last_campaign_id
|
17
|
-
#cid = @mailchimp.campaigns_list(:limit => 1, :sort_field => "send_time")["data"].first["id"]
|
18
24
|
@output.as_hash @mailchimp_cached.reports_advice :cid => cid
|
19
25
|
end
|
20
26
|
end
|
@@ -22,14 +28,22 @@ command :reports do |c|
|
|
22
28
|
# reports/bounce-message (string apikey, string cid, struct email)
|
23
29
|
c.desc 'Retrieve the most recent full bounce message for a specific email address on the given campaign. Messages over 30 days old are subject to being removed'
|
24
30
|
c.command :bounce do |s|
|
31
|
+
s.arg_name 'campaign id'
|
32
|
+
s.flag :cid
|
33
|
+
|
25
34
|
s.action do |global,options,args|
|
26
|
-
|
35
|
+
cid = options[:cid] || get_last_campaign_id
|
36
|
+
email = create_email_struct(required_argument("Need to provide an email address.", args))
|
37
|
+
puts @mailchimp_cached.reports_bounce_message(:cid => cid, :email => email.first)['message']
|
27
38
|
end
|
28
39
|
end
|
29
40
|
|
30
41
|
# reports/bounce-messages (string apikey, string cid, struct opts)
|
31
|
-
c.desc 'Retrieve the full bounce messages for the given campaign.
|
42
|
+
c.desc 'Retrieve the full bounce messages for the given campaign. Messages over 30 days old are subject to being removed'
|
32
43
|
c.command :bounces do |s|
|
44
|
+
s.arg_name 'campaign id'
|
45
|
+
s.flag :cid
|
46
|
+
|
33
47
|
s.action do |global,options,args|
|
34
48
|
cid = options[:cid] || get_last_campaign_id
|
35
49
|
|
@@ -55,24 +69,37 @@ command :reports do |c|
|
|
55
69
|
|
56
70
|
# reports/click-detail (string apikey, string cid, int tid, struct opts)
|
57
71
|
c.desc 'Return the list of email addresses that clicked on a given url, and how many times they clicked'
|
58
|
-
c.command
|
72
|
+
c.command 'clicked-url' do |s|
|
73
|
+
s.arg_name 'campaign id'
|
74
|
+
s.flag :cid
|
75
|
+
s.flag :tid
|
76
|
+
|
59
77
|
s.action do |global,options,args|
|
60
|
-
|
78
|
+
cid = options[:cid] || get_last_campaign_id
|
79
|
+
tid = options[:tid]
|
80
|
+
member_column = lambda{|l| "#{l['member']['email']}"}
|
81
|
+
@output.standard @mailchimp_cached.reports_click_detail(:cid => cid, :tid => tid)['data'], :fields => [:clicks, {:member => {:display_method => member_column}}]
|
61
82
|
end
|
62
83
|
end
|
63
84
|
|
64
85
|
# reports/clicks (string apikey, string cid)
|
65
86
|
c.desc 'The urls tracked and their click counts for a given campaign.'
|
66
87
|
c.command :clicks do |s|
|
88
|
+
s.arg_name 'campaign id'
|
89
|
+
s.flag :cid
|
90
|
+
|
67
91
|
s.action do |global,options,args|
|
68
92
|
cid = options[:cid] || get_last_campaign_id
|
69
|
-
@output.standard @mailchimp_cached.reports_clicks(:cid => cid)['total'], :fields => [{:url => {:width => 80}}, :clicks, :unique]
|
93
|
+
@output.standard @mailchimp_cached.reports_clicks(:cid => cid)['total'], :fields => [:tid, {:url => {:width => 80}}, :clicks, :unique]
|
70
94
|
end
|
71
95
|
end
|
72
96
|
|
73
97
|
# reports/domain-performance (string apikey, string cid)
|
74
98
|
c.desc 'Get the top 5 performing email domains for this campaign.'
|
75
99
|
c.command :domains do |s|
|
100
|
+
s.arg_name 'campaign id'
|
101
|
+
s.flag :cid
|
102
|
+
|
76
103
|
s.action do |global,options,args|
|
77
104
|
cid = options[:cid] || get_last_campaign_id
|
78
105
|
@output.standard @mailchimp_cached.reports_domain_performance :cid => cid
|
@@ -82,32 +109,45 @@ command :reports do |c|
|
|
82
109
|
# reports/ecomm-orders (string apikey, string cid, struct opts)
|
83
110
|
c.desc 'Retrieve the Ecommerce Orders tracked by campaignEcommOrderAdd()'
|
84
111
|
c.command :ecomm do |s|
|
112
|
+
s.arg_name 'campaign id'
|
113
|
+
s.flag :cid
|
114
|
+
|
85
115
|
s.action do |global,options,args|
|
86
|
-
|
116
|
+
cid = options[:cid] || get_last_campaign_id
|
117
|
+
@output.standard @mailchimp_cached.reports_ecomm_orders(:cid => cid)['data']
|
87
118
|
end
|
88
119
|
end
|
89
120
|
|
90
121
|
# reports/eepurl (string apikey, string cid)
|
91
122
|
c.desc 'Retrieve the eepurl stats from the web/Twitter mentions for this campaign'
|
92
123
|
c.command :eepurl do |s|
|
124
|
+
s.arg_name 'campaign id'
|
125
|
+
s.flag :cid
|
126
|
+
|
93
127
|
s.action do |global,options,args|
|
94
128
|
cid = options[:cid] || get_last_campaign_id
|
95
|
-
@output.
|
129
|
+
@output.as_hash @mailchimp_cached.reports_eepurl(:cid => cid)
|
96
130
|
end
|
97
131
|
end
|
98
132
|
|
99
133
|
# reports/geo-opens (string apikey, string cid)
|
100
134
|
c.desc 'Retrieve the countries/regions and number of opens tracked for each. Email address are not returned.'
|
101
135
|
c.command :geo do |s|
|
136
|
+
s.arg_name 'campaign id'
|
137
|
+
s.flag :cid
|
138
|
+
|
102
139
|
s.action do |global,options,args|
|
103
140
|
cid = options[:cid] || get_last_campaign_id
|
104
|
-
@output.standard @mailchimp_cached.reports_geo_opens
|
141
|
+
@output.standard @mailchimp_cached.reports_geo_opens(:cid => cid), :fields => [:code, :name, :opens]
|
105
142
|
end
|
106
143
|
end
|
107
144
|
|
108
145
|
# reports/google-analytics (string apikey, string cid)
|
109
146
|
c.desc 'Retrieve the Google Analytics data we have collected for this campaign.'
|
110
147
|
c.command :ga do |s|
|
148
|
+
s.arg_name 'campaign id'
|
149
|
+
s.flag :cid
|
150
|
+
|
111
151
|
s.action do |global,options,args|
|
112
152
|
cid = options[:cid] || get_last_campaign_id
|
113
153
|
@output.standard @mailchimp_cached.reports_google_analytics :cid => cid
|
@@ -116,39 +156,81 @@ command :reports do |c|
|
|
116
156
|
|
117
157
|
# reports/member-activity (string apikey, string cid, array emails)
|
118
158
|
c.desc 'Given a campaign and email address, return the entire click and open history with timestamps, ordered by time.'
|
119
|
-
c.command
|
159
|
+
c.command 'member-activity' do |s|
|
160
|
+
s.arg_name 'campaign id'
|
161
|
+
s.flag :cid
|
162
|
+
|
120
163
|
s.action do |global,options,args|
|
121
|
-
|
164
|
+
cid = options[:cid] || get_last_campaign_id
|
165
|
+
email = create_email_struct(required_argument("Need to provide an email address.", args))
|
166
|
+
results = @mailchimp_cached.reports_member_activity(:cid => cid, :emails => email)['data']
|
167
|
+
|
168
|
+
results.each do |result|
|
169
|
+
puts result['email']['email']
|
170
|
+
puts "#{'='*result['email']['email'].size}"
|
171
|
+
@output.as_table result['activity']
|
172
|
+
puts "\n"
|
173
|
+
end
|
122
174
|
end
|
123
175
|
end
|
124
176
|
|
125
177
|
# reports/not-opened (string apikey, string cid, struct opts)
|
126
178
|
c.desc 'Retrieve the list of email addresses that did not open a given campaign'
|
127
|
-
c.command
|
179
|
+
c.command 'not-opened' do |s|
|
180
|
+
s.arg_name 'campaign id'
|
181
|
+
s.flag :cid
|
182
|
+
s.flag :start, :default_value => 0
|
183
|
+
s.flag :limit, :default_value => 50
|
184
|
+
|
128
185
|
s.action do |global,options,args|
|
129
|
-
|
186
|
+
cid = options[:cid] || get_last_campaign_id
|
187
|
+
opts = {:start => options['start'], :limit => options['limit']}
|
188
|
+
@output.standard @mailchimp_cached.reports_not_opened(:cid => cid, :opts => opts)['data'], :fields => [:email]
|
130
189
|
end
|
131
190
|
end
|
132
191
|
|
133
192
|
# reports/opened (string apikey, string cid, struct opts)
|
134
193
|
c.desc 'Retrieve the list of email addresses that opened a given campaign with how many times they opened'
|
135
194
|
c.command :opened do |s|
|
195
|
+
s.arg_name 'campaign id'
|
196
|
+
s.flag :cid
|
197
|
+
s.flag :start, :default_value => 0
|
198
|
+
s.flag :limit, :default_value => 50
|
199
|
+
s.flag 'sort-field', :default_value => "opened"
|
200
|
+
s.flag 'sort-dir', :default_value => "asc"
|
201
|
+
|
136
202
|
s.action do |global,options,args|
|
137
|
-
|
203
|
+
cid = options[:cid] || get_last_campaign_id
|
204
|
+
opts = {:start => options['start'], :limit => options['limit'], :sort_field => options['sort-field'], :sort_dir => options['sort-dir']}
|
205
|
+
member_column = lambda{|l| "#{l['member']['email']}"}
|
206
|
+
|
207
|
+
@output.standard @mailchimp_cached.reports_opened(:cid => cid, :opts => opts)['data'], :fields => [:opens, {:member => {:display_method => member_column}}]
|
138
208
|
end
|
139
209
|
end
|
140
210
|
|
141
211
|
# reports/sent-to (string apikey, string cid, struct opts)
|
142
212
|
c.desc 'Get email addresses the campaign was sent to'
|
143
|
-
c.command
|
213
|
+
c.command 'sent-to' do |s|
|
214
|
+
s.arg_name 'campaign id'
|
215
|
+
s.flag :cid
|
216
|
+
s.flag :status
|
217
|
+
s.flag :start, :default_value => 0
|
218
|
+
s.flag :limit, :default_value => 50
|
219
|
+
|
144
220
|
s.action do |global,options,args|
|
145
|
-
|
221
|
+
cid = options[:cid] || get_last_campaign_id
|
222
|
+
opts = {:status => options['status'], :start => options['start'], :limit => options['limit']}
|
223
|
+
member_column = lambda{|l| "#{l['member']['email']}"}
|
224
|
+
@output.standard @mailchimp_cached.reports_sent_to(:cid => cid, :opts => opts)['data'], :fields => [:member => {:display_method => member_column}]
|
146
225
|
end
|
147
226
|
end
|
148
227
|
|
149
228
|
# reports/share (string apikey, string cid, array opts)
|
150
229
|
c.desc 'Get the URL to a customized VIP Report for the specified campaign and optionally send an email to someone with links to it.'
|
151
230
|
c.command :share do |s|
|
231
|
+
s.arg_name 'campaign id'
|
232
|
+
s.flag :cid
|
233
|
+
|
152
234
|
s.action do |global,options,args|
|
153
235
|
cid = options[:cid] || get_last_campaign_id
|
154
236
|
|
@@ -168,16 +250,28 @@ command :reports do |c|
|
|
168
250
|
# reports/summary (string apikey, string cid)
|
169
251
|
c.desc 'Retrieve relevant aggregate campaign statistics (opens, bounces, clicks, etc.)'
|
170
252
|
c.command :summary do |s|
|
253
|
+
s.desc 'Campaign ID'
|
254
|
+
s.flag :cid
|
255
|
+
|
171
256
|
s.action do |global,options,args|
|
172
|
-
|
257
|
+
ap options
|
258
|
+
cid = options[:cid] || get_last_campaign_id
|
259
|
+
@output.as_hash @mailchimp_cached.reports_summary(:cid => cid)
|
173
260
|
end
|
174
261
|
end
|
175
262
|
|
176
263
|
# reports/unsubscribes (string apikey, string cid, struct opts)
|
177
264
|
c.desc 'Get all unsubscribed email addresses for a given campaign'
|
178
265
|
c.command :unsubscribes do |s|
|
266
|
+
s.arg_name 'campaign id'
|
267
|
+
s.flag :cid
|
268
|
+
s.flag :start, :default_value => 0
|
269
|
+
s.flag :limit, :default_value => 50
|
270
|
+
|
179
271
|
s.action do |global,options,args|
|
180
|
-
|
272
|
+
cid = options[:cid] || get_last_campaign_id
|
273
|
+
opts = {:start => options['start'], :limit => options['limit']}
|
274
|
+
@output.standard @mailchimp_cached.reports_unsubscribes(:cid => cid, :opts => opts)['data'], :fields => [:email]
|
181
275
|
end
|
182
276
|
end
|
183
277
|
end
|
data/lib/mc/commands/search.rb
CHANGED
@@ -4,8 +4,8 @@ command :search do |c|
|
|
4
4
|
c.desc 'Search all campaigns for the specified query terms'
|
5
5
|
c.command :campaigns do |s|
|
6
6
|
s.action do |global,options,args|
|
7
|
-
|
8
|
-
@output.
|
7
|
+
query = required_argument("You need to include a search argument: mc search campaigns <query terms>", args.join(' '))
|
8
|
+
@output.campaign_search @mailchimp_cached.helper_search_campaigns(:query => query)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
@@ -14,7 +14,7 @@ command :search do |c|
|
|
14
14
|
c.command :members do |s|
|
15
15
|
s.action do |global,options,args|
|
16
16
|
query = required_argument("You need to include a search argument: mc search members <query terms>", args.join(' '))
|
17
|
-
@output.
|
17
|
+
@output.member_search @mailchimp_cached.helper_search_members(:query => query)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/mc/commands/users.rb
CHANGED
@@ -3,19 +3,66 @@ command :users do |c|
|
|
3
3
|
# users/invite (string apikey, string email, string role, string msg)
|
4
4
|
c.desc 'Invite a user to your account'
|
5
5
|
c.command :invite do |s|
|
6
|
+
s.flag :role
|
7
|
+
s.flag :msg
|
8
|
+
|
9
|
+
s.action do |global,options,args|
|
10
|
+
email = required_argument("Need to provide an email address.", args)
|
11
|
+
role = options[:role]
|
12
|
+
msg = options[:msg]
|
13
|
+
|
14
|
+
@output.standard @mailchimp.users_invites(:email => email, :role => role, :msg => msg)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# users/invite-resend (string apikey, string email)
|
19
|
+
c.desc 'Resend an invite a user to your account.'
|
20
|
+
c.command 'invite-revoke' do |s|
|
6
21
|
s.action do |global,options,args|
|
7
|
-
|
22
|
+
email = required_argument("Need to provide email address.", args)
|
23
|
+
@output.standard @mailchimp.users_login_revoke(:email => email)
|
24
|
+
end
|
25
|
+
end
|
8
26
|
|
9
|
-
|
10
|
-
|
27
|
+
# users/invite-revoke (string apikey, string email)
|
28
|
+
c.desc 'Revoke an invitation sent to a user to your account.'
|
29
|
+
c.command 'invite-revoke' do |s|
|
30
|
+
s.action do |global,options,args|
|
31
|
+
email = required_argument("Need to provide email address.", args)
|
32
|
+
@output.standard @mailchimp.users_login_revoke(:email => email)
|
11
33
|
end
|
12
34
|
end
|
13
35
|
|
14
|
-
#
|
36
|
+
# users/invites (string apikey)
|
37
|
+
c.desc 'Retrieve the list of pending users invitations have been sent for.'
|
38
|
+
c.command :invites do |s|
|
39
|
+
s.action do
|
40
|
+
@output.standard @mailchimp_cached.users_invites
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# users/login-revoke (string apikey, string username)
|
45
|
+
c.desc 'Revoke access for a specified login.'
|
46
|
+
c.command 'login-revoke' do |s|
|
47
|
+
s.action do |global,options,args|
|
48
|
+
username = required_argument("Need to provide login username.", args)
|
49
|
+
@output.standard @mailchimp.users_login_revoke(:username => username)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# users/logins (string apikey)
|
15
54
|
c.desc 'Retrieve the list of active logins.'
|
16
55
|
c.command :logins do |s|
|
17
|
-
s.action do
|
18
|
-
|
56
|
+
s.action do |global,options,args|
|
57
|
+
@output.standard @mailchimp_cached.users_logins
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# users/profile (string apikey)
|
62
|
+
c.desc 'Retrieve the profile for the login owning the provided API Key.'
|
63
|
+
c.command :profile do |s|
|
64
|
+
s.action do |global,options,args|
|
65
|
+
@output.standard @mailchimp_cached.users_profile
|
19
66
|
end
|
20
67
|
end
|
21
68
|
end
|
data/lib/mc/commands/vip.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
desc 'VIPs'
|
2
2
|
command :vip do |c|
|
3
|
-
c.desc 'List ID'
|
4
|
-
c.flag :id
|
5
|
-
|
6
3
|
# vip/activity (string apikey)
|
7
4
|
c.desc 'Show all Activity (opens/clicks) for VIPs over the past 10 days'
|
8
5
|
c.command :activity do |s|
|
@@ -14,16 +11,17 @@ command :vip do |c|
|
|
14
11
|
# vip/add (string apikey, string id, array emails)
|
15
12
|
c.desc 'Add VIP(s)'
|
16
13
|
c.command :add do |s|
|
14
|
+
s.desc 'List ID'
|
15
|
+
s.flag :id
|
16
|
+
|
17
17
|
s.action do |global,options,args|
|
18
|
-
id =
|
18
|
+
id = required_option(:id, options[:id], global[:list])
|
19
19
|
emails = create_email_struct(required_argument("Need to provide an email address.", args))
|
20
20
|
|
21
21
|
status = @mailchimp.vip_add(:id => id, :emails => emails)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
@output.errors status
|
26
|
-
end
|
22
|
+
|
23
|
+
puts "Added #{status['success_count']} subscriber(s) as VIPs." if successful? status
|
24
|
+
show_errors status
|
27
25
|
end
|
28
26
|
end
|
29
27
|
|
@@ -31,13 +29,13 @@ command :vip do |c|
|
|
31
29
|
c.desc 'Remove VIP(s)'
|
32
30
|
c.command :remove do |s|
|
33
31
|
s.action do |global,options,args|
|
34
|
-
id =
|
32
|
+
id = required_option(:id, options[:id], global[:list])
|
35
33
|
emails = create_email_struct(required_argument("Need to provide an email address.", args))
|
36
34
|
|
37
35
|
status = @mailchimp.vip_del(:id => id, :emails => emails)
|
38
|
-
|
39
|
-
puts status
|
40
|
-
|
36
|
+
|
37
|
+
puts "Removed #{status['success_count']} subscriber(s) as VIPs." if successful? status
|
38
|
+
show_errors status
|
41
39
|
end
|
42
40
|
end
|
43
41
|
|
data/lib/mc/helper.rb
CHANGED
@@ -9,12 +9,6 @@ module Helper
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
def get_required_argument(name, option, global)
|
13
|
-
return option unless option.nil?
|
14
|
-
return global unless global.nil?
|
15
|
-
help_now!("--#{name.to_s} is required")
|
16
|
-
end
|
17
|
-
|
18
12
|
def required_option(name, *options)
|
19
13
|
options.each {|o| return o unless o.nil? or o.empty?}
|
20
14
|
exit_now!("Error: --#{name.to_s} is required")
|
@@ -51,6 +45,20 @@ module Helper
|
|
51
45
|
end
|
52
46
|
end
|
53
47
|
|
48
|
+
def successful? status
|
49
|
+
status['success_count'] > 0
|
50
|
+
end
|
51
|
+
|
52
|
+
def show_errors status
|
53
|
+
if status['error_count'] > 0
|
54
|
+
puts "Oops, had #{status['error_count']} error(s):"
|
55
|
+
status['errors'].each do |error|
|
56
|
+
# remove periods just to make the error look nicer
|
57
|
+
puts " #{error['error'].gsub('.','')} - #{error['email']['email']}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
54
62
|
private
|
55
63
|
|
56
64
|
def pad(num, total)
|
data/lib/mc/mailchimp.rb
CHANGED
@@ -15,7 +15,7 @@ class MailChimp
|
|
15
15
|
category = method_name.to_s.split('_').first
|
16
16
|
method = method_name.to_s.split('_')[1..-1].join('_')
|
17
17
|
if category == "export"
|
18
|
-
@exporter.
|
18
|
+
@exporter.__send__(method, *args)
|
19
19
|
else
|
20
20
|
if method == 'send'
|
21
21
|
# handle wonk case of 'send' method
|
data/lib/mc/mailchimp_cached.rb
CHANGED
@@ -33,7 +33,8 @@ class MailChimpCached < MailChimp
|
|
33
33
|
category = method_name.to_s.split('_').first
|
34
34
|
method = method_name.to_s.split('_')[1..-1].join('_')
|
35
35
|
|
36
|
-
throw "error: don't support caching
|
36
|
+
throw "error: don't support caching export" if category == "export"
|
37
|
+
throw "error: don't support caching send" if method == "send"
|
37
38
|
|
38
39
|
result = @api.send(category).method_missing(method, *args)
|
39
40
|
@cache.set(cache_key, result)
|
data/lib/mc/version.rb
CHANGED
data/lib/mc/writer.rb
CHANGED
@@ -29,6 +29,10 @@ class ConsoleWriter
|
|
29
29
|
tp results, options[:fields]
|
30
30
|
end
|
31
31
|
|
32
|
+
def as_raw(results)
|
33
|
+
puts results
|
34
|
+
end
|
35
|
+
|
32
36
|
def errors(results)
|
33
37
|
puts "Error count: #{results['error_count']}"
|
34
38
|
results['errors'].each do |error|
|
@@ -113,30 +117,42 @@ class ConsoleWriter
|
|
113
117
|
end
|
114
118
|
end
|
115
119
|
|
116
|
-
def
|
120
|
+
def campaign_search(results)
|
121
|
+
if results['total'].to_i == 0
|
122
|
+
exit_now!("No matches found.")
|
123
|
+
end
|
124
|
+
|
125
|
+
results['results'].each_with_index do |result, index|
|
126
|
+
puts "#{'-'*15} [#{index+1}] #{'-'*15}"
|
127
|
+
puts result['snippet'].strip.gsub(/\n/, ' ')
|
128
|
+
puts "From campaign \"#{result['campaign']['title']}\" (#{result['campaign']['id']}) that was sent on #{result['campaign']['send_time'].split.first}"
|
129
|
+
puts "\n"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def member_search(results)
|
117
134
|
redirect_output?(results)
|
118
135
|
|
119
|
-
|
120
|
-
if i['exact_matches']['total'].to_i == 0 and i['full_search']['total'].to_i == 0
|
136
|
+
if results['exact_matches']['total'].to_i == 0 and results['full_search']['total'].to_i == 0
|
121
137
|
exit_now!("No matches found.")
|
122
138
|
end
|
123
139
|
|
124
140
|
members = []
|
125
141
|
|
126
|
-
if
|
127
|
-
puts "#{'='*20} Exact Matches (#{
|
142
|
+
if results['exact_matches']['total'].to_i > 0
|
143
|
+
puts "#{'='*20} Exact Matches (#{results['exact_matches']['total']}) #{'='*20}"
|
128
144
|
|
129
|
-
|
145
|
+
results['exact_matches']['members'].each do |member|
|
130
146
|
members << member
|
131
147
|
end
|
132
|
-
elsif
|
133
|
-
puts "#{'='*26} Matches (#{
|
134
|
-
|
148
|
+
elsif results['full_search']['total'].to_i > 0
|
149
|
+
puts "#{'='*26} Matches (#{results['full_search']['total']}) #{'='*26}"
|
150
|
+
results['full_search']['members'].each do |member|
|
135
151
|
members << member
|
136
152
|
end
|
137
153
|
end
|
138
154
|
|
139
|
-
tp members, :email, :id, :member_rating, :status, "VIP?" => {:display_method => :is_gmonkey}
|
155
|
+
tp members, :email, :id, :list_name, :member_rating, :status, "VIP?" => {:display_method => :is_gmonkey}
|
140
156
|
end
|
141
157
|
|
142
158
|
private
|
@@ -163,7 +179,7 @@ class ConsoleWriter
|
|
163
179
|
as_formatted results, options
|
164
180
|
exit_now!('')
|
165
181
|
when :raw
|
166
|
-
|
182
|
+
as_raw results
|
167
183
|
exit_now!('')
|
168
184
|
when :awesome, :hash
|
169
185
|
ap results
|
data/test/mc_test.rb
CHANGED
@@ -11,11 +11,11 @@ describe "MailChimp" do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should be able to ping MailChimp" do
|
14
|
-
@mailchimp.
|
14
|
+
@mailchimp.helper_ping['msg'].must_equal "Everything's Chimpy!"
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should pass to method_missing" do
|
18
|
-
|
18
|
+
@mailchimp.lists_list.count.must_be :>, 0
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should see updated results" do
|
@@ -73,7 +73,7 @@ describe "MailChimpCached" do
|
|
73
73
|
@mailchimp_cached.lists_subscribe(:id => @test_list_id, :email => {:email => email}, :double_optin => false)
|
74
74
|
new_count = @mailchimp_cached.lists_members(:id => @test_list_id)["total"].to_i
|
75
75
|
new_count.must_equal count
|
76
|
-
|
76
|
+
|
77
77
|
clear_cached_dir
|
78
78
|
|
79
79
|
new_count = @mailchimp_cached.lists_members(:id => @test_list_id)["total"].to_i
|
data/test/test_helper.rb
CHANGED
@@ -2,10 +2,9 @@ def config
|
|
2
2
|
config_file = ENV['HOME']+'/.mailchimp'
|
3
3
|
raise "Need config file to pull API key from." unless File.exists?(config_file)
|
4
4
|
config_hash = YAML.load(File.open(config_file))
|
5
|
-
config_hash[:test_list_id] = "ef4227fc80"
|
6
5
|
|
7
|
-
raise "Need
|
8
|
-
raise "Need to
|
6
|
+
raise "Need to set :test_api_key in config file" unless config_hash.has_key? :test_api_key
|
7
|
+
raise "Need to set :test_list_id in config file" unless config_hash.has_key? :test_list_id
|
9
8
|
|
10
9
|
return config_hash
|
11
10
|
end
|
@@ -20,5 +19,5 @@ def clear_cached_dir
|
|
20
19
|
end
|
21
20
|
|
22
21
|
def get_random_email_address
|
23
|
-
"test+#{rand(1000..9999)}@
|
22
|
+
"test+#{rand(1000..9999)}@gmail.com"
|
24
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kale Davis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -145,6 +145,9 @@ files:
|
|
145
145
|
- lib/mc/commands/export.rb
|
146
146
|
- lib/mc/commands/gallery.rb
|
147
147
|
- lib/mc/commands/helper.rb
|
148
|
+
- lib/mc/commands/lists-group.rb
|
149
|
+
- lib/mc/commands/lists-merge-var.rb
|
150
|
+
- lib/mc/commands/lists-webhook.rb
|
148
151
|
- lib/mc/commands/lists.rb
|
149
152
|
- lib/mc/commands/reports.rb
|
150
153
|
- lib/mc/commands/search.rb
|