commission_junction 1.4.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +35 -22
- data/lib/commission_junction.rb +39 -0
- data/lib/commission_junction/version.rb +1 -1
- data/test/commission_junction_test.rb +48 -1
- metadata +2 -8
data/README.md
CHANGED
@@ -33,25 +33,37 @@ cj = CommissionJunction.new(DEVELOPER_KEY, WEBSITE_ID)
|
|
33
33
|
# See http://help.cj.com/en/web_services/product_catalog_search_service_rest.htm
|
34
34
|
# for the list of request and response parameters.
|
35
35
|
cj.product_search('keywords' => '+blue +jeans',
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
36
|
+
'advertiser-ids' => 'joined',
|
37
|
+
'serviceable-area' => 'us',
|
38
|
+
'currency' => 'usd',
|
39
|
+
'records-per-page' => '5').each do |product|
|
40
|
+
puts product.name
|
41
|
+
puts product.price
|
42
|
+
puts product.image_url
|
43
|
+
puts ''
|
44
44
|
end
|
45
45
|
|
46
46
|
# See http://help.cj.com/en/web_services/advertiser_lookup_service_rest.htm
|
47
47
|
# for the list of request and response parameters.
|
48
48
|
cj.advertiser_lookup('keywords' => '+used +books',
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
49
|
+
'advertiser-ids' => 'joined',
|
50
|
+
'records-per-page' => '5').each do |advertiser|
|
51
|
+
puts advertiser.advertiser_name
|
52
|
+
puts advertiser.network_rank
|
53
|
+
puts advertiser.program_url
|
54
|
+
puts ''
|
55
|
+
end
|
56
|
+
|
57
|
+
# See http://help.cj.com/en/web_services/link_search_service_rest.htm
|
58
|
+
# for the list of request and response parameters.
|
59
|
+
cj.link_search('keywords' => '+used +books',
|
60
|
+
'advertiser-ids' => 'joined',
|
61
|
+
'records-per-page' => '5').each do |link|
|
62
|
+
puts link.link_id
|
63
|
+
puts link.link_name
|
64
|
+
puts link.link_code_html
|
65
|
+
puts link.sale_commission
|
66
|
+
puts ''
|
55
67
|
end
|
56
68
|
|
57
69
|
# See http://help.cj.com/en/web_services/support_services_rest.htm
|
@@ -61,14 +73,14 @@ puts cj.categories
|
|
61
73
|
# See http://help.cj.com/en/web_services/Commission_Detail_Service.htm
|
62
74
|
# for the list of request and response parameters.
|
63
75
|
cj.commissions.each do |commission|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
76
|
+
puts commission.action_type
|
77
|
+
puts commission.aid
|
78
|
+
puts commission.commission_id
|
79
|
+
puts commission.event_date
|
80
|
+
puts commission.advertiser_name
|
81
|
+
puts commission.commission_amount
|
82
|
+
puts commission.sid
|
83
|
+
puts ''
|
72
84
|
end
|
73
85
|
```
|
74
86
|
|
@@ -88,6 +100,7 @@ end
|
|
88
100
|
* [C.J. Sanders](https://github.com/cjsanders)
|
89
101
|
* [Michael Nutt](https://github.com/mnutt)
|
90
102
|
* [Jean-Sebastien Boulanger](https://github.com/jsboulanger)
|
103
|
+
* [luckyjazzbo](https://github.com/luckyjazzbo)
|
91
104
|
|
92
105
|
## Copyright
|
93
106
|
|
data/lib/commission_junction.rb
CHANGED
@@ -27,6 +27,7 @@ class CommissionJunction
|
|
27
27
|
WEB_SERVICE_URIS =
|
28
28
|
{
|
29
29
|
:product_search => 'https://product-search.api.cj.com/v2/product-search',
|
30
|
+
:link_search => 'https://link-search.api.cj.com/v2/link-search',
|
30
31
|
:advertiser_lookup => 'https://advertiser-lookup.api.cj.com/v3/advertiser-lookup',
|
31
32
|
:categories => 'https://support-services.api.cj.com/v2/categories',
|
32
33
|
:commissions => 'https://commission-detail.api.cj.com/v3/commissions'
|
@@ -128,6 +129,41 @@ class CommissionJunction
|
|
128
129
|
@cj_objects
|
129
130
|
end
|
130
131
|
|
132
|
+
def link_search(params)
|
133
|
+
raise ArgumentError, "params must be a Hash; got #{params.class} instead" unless params.is_a?(Hash)
|
134
|
+
|
135
|
+
unless params.size > 0
|
136
|
+
raise ArgumentError, "You must provide at least one request parameter, for example, \"keywords\".\nSee http://help.cj.com/en/web_services/product_catalog_search_service_rest.htm"
|
137
|
+
end
|
138
|
+
|
139
|
+
params['website-id'] = @website_id
|
140
|
+
|
141
|
+
@cj_objects = []
|
142
|
+
|
143
|
+
begin
|
144
|
+
response = self.class.get(WEB_SERVICE_URIS[:link_search], :query => params, :timeout => @timeout)
|
145
|
+
|
146
|
+
cj_api = response['cj_api']
|
147
|
+
error_message = cj_api['error_message']
|
148
|
+
|
149
|
+
raise ArgumentError, error_message if error_message
|
150
|
+
|
151
|
+
links = cj_api['links']
|
152
|
+
|
153
|
+
@total_matched = links['total_matched'].to_i
|
154
|
+
@records_returned = links['records_returned'].to_i
|
155
|
+
@page_number = links['page_number'].to_i
|
156
|
+
|
157
|
+
link = links['link']
|
158
|
+
link = [link] if link.is_a?(Hash) # If we got exactly one result, put it in an array.
|
159
|
+
link.each { |item| @cj_objects << Link.new(item) } if link
|
160
|
+
rescue Timeout::Error
|
161
|
+
@total_matched = @records_returned = @page_number = 0
|
162
|
+
end
|
163
|
+
|
164
|
+
@cj_objects
|
165
|
+
end
|
166
|
+
|
131
167
|
def commissions(params = {})
|
132
168
|
raise ArgumentError, "params must be a Hash; got #{params.class} instead" unless params.is_a?(Hash)
|
133
169
|
|
@@ -179,6 +215,9 @@ class CommissionJunction
|
|
179
215
|
class Advertiser < CjObject
|
180
216
|
end
|
181
217
|
|
218
|
+
class Link < CjObject
|
219
|
+
end
|
220
|
+
|
182
221
|
class Commission < CjObject
|
183
222
|
end
|
184
223
|
end
|
@@ -218,7 +218,7 @@ class CommissionJunctionTest < Test::Unit::TestCase
|
|
218
218
|
key_file = File.join(ENV['HOME'], '.commission_junction.yaml')
|
219
219
|
|
220
220
|
skip "#{key_file} does not exist. Put your CJ developer key and website ID in there to enable live testing." unless File.exist?(key_file)
|
221
|
-
|
221
|
+
|
222
222
|
credentials = YAML.load(File.read(key_file))
|
223
223
|
cj = CommissionJunction.new(credentials['developer_key'], credentials['website_id'])
|
224
224
|
|
@@ -337,4 +337,51 @@ class CommissionJunctionTest < Test::Unit::TestCase
|
|
337
337
|
assert_respond_to(commission, :sale_amount)
|
338
338
|
end
|
339
339
|
end
|
340
|
+
|
341
|
+
def test_link_search_live
|
342
|
+
key_file = File.join(ENV['HOME'], '.commission_junction.yaml')
|
343
|
+
|
344
|
+
skip "#{key_file} does not exist. Put your CJ developer key and website ID in there to enable live testing." unless File.exist?(key_file)
|
345
|
+
|
346
|
+
credentials = YAML.load(File.read(key_file))
|
347
|
+
cj = CommissionJunction.new(credentials['developer_key'], credentials['website_id'])
|
348
|
+
|
349
|
+
assert_nothing_raised do
|
350
|
+
cj.link_search('keywords' => '+blue +jeans', 'advertiser-ids' => 'joined')
|
351
|
+
end
|
352
|
+
|
353
|
+
check_link_search_results(cj)
|
354
|
+
end
|
355
|
+
|
356
|
+
def check_link_search_results(results)
|
357
|
+
assert_instance_of(Fixnum, results.total_matched)
|
358
|
+
assert_instance_of(Fixnum, results.records_returned)
|
359
|
+
assert_instance_of(Fixnum, results.page_number)
|
360
|
+
assert_instance_of(Array, results.cj_objects)
|
361
|
+
|
362
|
+
results.cj_objects.each do |link|
|
363
|
+
assert_instance_of(CommissionJunction::Link, link)
|
364
|
+
assert_respond_to(link, :advertiser_id)
|
365
|
+
assert_respond_to(link, :click_commission)
|
366
|
+
assert_respond_to(link, :creative_height)
|
367
|
+
assert_respond_to(link, :creative_width)
|
368
|
+
assert_respond_to(link, :lead_commission)
|
369
|
+
assert_respond_to(link, :link_code_html)
|
370
|
+
assert_respond_to(link, :link_code_javascript)
|
371
|
+
assert_respond_to(link, :destination)
|
372
|
+
assert_respond_to(link, :description)
|
373
|
+
assert_respond_to(link, :link_id)
|
374
|
+
assert_respond_to(link, :link_name)
|
375
|
+
assert_respond_to(link, :link_type)
|
376
|
+
assert_respond_to(link, :advertiser_name)
|
377
|
+
assert_respond_to(link, :performance_incentive)
|
378
|
+
assert_respond_to(link, :promotion_type)
|
379
|
+
assert_respond_to(link, :promotion_start_date)
|
380
|
+
assert_respond_to(link, :promotion_end_date)
|
381
|
+
assert_respond_to(link, :relationship_status)
|
382
|
+
assert_respond_to(link, :sale_commission)
|
383
|
+
assert_respond_to(link, :seven_day_epc)
|
384
|
+
assert_respond_to(link, :three_month_epc)
|
385
|
+
end
|
386
|
+
end
|
340
387
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: commission_junction
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -55,18 +55,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
55
55
|
- - ! '>='
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '0'
|
58
|
-
segments:
|
59
|
-
- 0
|
60
|
-
hash: 2510825910021186561
|
61
58
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
59
|
none: false
|
63
60
|
requirements:
|
64
61
|
- - ! '>='
|
65
62
|
- !ruby/object:Gem::Version
|
66
63
|
version: '0'
|
67
|
-
segments:
|
68
|
-
- 0
|
69
|
-
hash: 2510825910021186561
|
70
64
|
requirements: []
|
71
65
|
rubyforge_project:
|
72
66
|
rubygems_version: 1.8.24
|