zanox_publisher 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.rspec +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +178 -0
- data/Rakefile +10 -0
- data/lib/zanox_publisher/ad_medium.rb +232 -0
- data/lib/zanox_publisher/ad_space.rb +159 -0
- data/lib/zanox_publisher/base.rb +69 -0
- data/lib/zanox_publisher/category.rb +57 -0
- data/lib/zanox_publisher/connection.rb +291 -0
- data/lib/zanox_publisher/exclusive_incentive.rb +135 -0
- data/lib/zanox_publisher/format.rb +19 -0
- data/lib/zanox_publisher/incentive.rb +135 -0
- data/lib/zanox_publisher/incentive_base.rb +89 -0
- data/lib/zanox_publisher/policy.rb +42 -0
- data/lib/zanox_publisher/prize.rb +18 -0
- data/lib/zanox_publisher/product.rb +263 -0
- data/lib/zanox_publisher/profile.rb +123 -0
- data/lib/zanox_publisher/program.rb +241 -0
- data/lib/zanox_publisher/program_application.rb +135 -0
- data/lib/zanox_publisher/tracking_link.rb +42 -0
- data/lib/zanox_publisher/version.rb +3 -0
- data/lib/zanox_publisher/vertical.rb +19 -0
- data/lib/zanox_publisher.rb +39 -0
- data/spec/config/credentials.example.yml +2 -0
- data/spec/lib/requirements_spec.rb +9 -0
- data/spec/lib/zanox_publisher/ad_medium_spec.rb +162 -0
- data/spec/lib/zanox_publisher/ad_space_spec.rb +56 -0
- data/spec/lib/zanox_publisher/base_spec.rb +35 -0
- data/spec/lib/zanox_publisher/connection_spec.rb +68 -0
- data/spec/lib/zanox_publisher/exclusive_incentive_spec.rb +104 -0
- data/spec/lib/zanox_publisher/incentive_spec.rb +112 -0
- data/spec/lib/zanox_publisher/product_spec.rb +223 -0
- data/spec/lib/zanox_publisher/profile_spec.rb +26 -0
- data/spec/lib/zanox_publisher/program_application_spec.rb +51 -0
- data/spec/lib/zanox_publisher/program_spec.rb +192 -0
- data/spec/lib/zanox_ruby_spec.rb +17 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/support/credentials.rb +3 -0
- data/spec/support/vcr.rb +8 -0
- data/spec/vcr_cassettes/.gitignore +4 -0
- data/zanox_publisher.gemspec +27 -0
- metadata +203 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5c6bf86e78f08a2c0843e4bbd65559a199ecafd8
|
4
|
+
data.tar.gz: cf5642ccc19e98e22ed773532b3e46c29dad6a70
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 735892e5eda13333689055bd9bb34566c7f24e5ea1dd9813aa051145198520686894bc8061d52646964ce3f7ffd98f5ce1c509021963bf5fe522fcdb835ac087
|
7
|
+
data.tar.gz: 9086e6044aa019dd1f197b6f3fd1a012d07a10181d0ceadefe444073aeb27466105320f564b0baa8a11c00b0b28221bb6cdc494c4b14ca6df4c3dbebd824159e
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Oliver Prater
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
# ZanoxPublisher
|
2
|
+
|
3
|
+
This is a ruby wrapper for the [ZANOX Publisher API](https://developer.zanox.com/web/guest/publisher-api-2011), released on March 1, 2011.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
The simplest way to install ZanoxPublisher is with [Bundler](http://gembundler.com/).
|
8
|
+
|
9
|
+
Add this line to your application's `Gemfile`:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'zanox_publisher'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself:
|
20
|
+
|
21
|
+
$ gem install zanox_publisher
|
22
|
+
|
23
|
+
## Configuration
|
24
|
+
|
25
|
+
The Zanox Publisher API requires a connect ID and a secret key to make requests directly related with the account.
|
26
|
+
General information can often be retrieved with just the connect ID.
|
27
|
+
|
28
|
+
The required information for each request can be found in the [documentation][documentation].
|
29
|
+
|
30
|
+
The connect ID and secret key can be set with the authenticate method:
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
ZanoxPublisher.authenticate('Connect ID', 'Secret key')
|
34
|
+
```
|
35
|
+
|
36
|
+
Or directly on ZanoxPublisher.
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
ZanoxPublisher.connect_id = 'Connect ID'
|
40
|
+
ZanoxPublisher.secret_key = 'Secret key'
|
41
|
+
```
|
42
|
+
|
43
|
+
## Usage
|
44
|
+
|
45
|
+
The gem is designed for integratation with Ruby on Rails in mind.
|
46
|
+
The method names try to follow the common methods found on an ActiveRecord object.
|
47
|
+
|
48
|
+
### Usage with Rails
|
49
|
+
|
50
|
+
Install ZanoxPublisher by adding it to your projects `Gemfile`.
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
gem 'zanox_publisher'
|
54
|
+
```
|
55
|
+
|
56
|
+
And then execute:
|
57
|
+
|
58
|
+
$ bundle
|
59
|
+
|
60
|
+
Finally, create an initializer file `config/initializers/zanox_publisher.rb` to hold the configuration.
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
ZanoxPublisher.authenticate('Connect ID', 'Secret key')
|
64
|
+
```
|
65
|
+
|
66
|
+
To make an API call in your application simply use the gems corresponding ruby object.
|
67
|
+
|
68
|
+
### Usage outside of Rails
|
69
|
+
|
70
|
+
To use ZanoxPublisher in plain ruby require the gem and set the configuration before running your code.
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
require 'zanox_publisher'
|
74
|
+
|
75
|
+
ZanoxPublisher.authenticate('Connect ID', 'Secret key')
|
76
|
+
|
77
|
+
# Your code here
|
78
|
+
```
|
79
|
+
|
80
|
+
### Basic examples
|
81
|
+
|
82
|
+
ZanoxPublisher is designed to be a full ruby object representation for each of the Zanox API endpoints.
|
83
|
+
The matching of ruby objects to Zanox API method name's is given in the List of Objects.
|
84
|
+
|
85
|
+
The examples below expect that ZanoxPublisher is correctly configured and show only some basic usage examples.
|
86
|
+
Check the [documentation][documentation] for the complete reference.
|
87
|
+
|
88
|
+
**Search for a program that sells hats**
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
programs_that_sell_hats = ZanoxPublisher::Program.all q: 'hats', has_products: true
|
92
|
+
#=> [<Program>,...]
|
93
|
+
|
94
|
+
programs_that_sell_hats.count
|
95
|
+
#=> 84
|
96
|
+
|
97
|
+
first_program = programs_that_sell_hats.first
|
98
|
+
#=> <Program>
|
99
|
+
|
100
|
+
first_program.name
|
101
|
+
#=> "Asos.com DE"
|
102
|
+
|
103
|
+
first_program.products
|
104
|
+
#=> 50129
|
105
|
+
```
|
106
|
+
|
107
|
+
**Search for a fitting product to an comment**
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
adspaces = ZanoxPublisher::AdSpace.all
|
111
|
+
#=> [<AdSpace>,...]
|
112
|
+
|
113
|
+
adspace = adspaces.select { |adspace| adspace.url == 'http://www.my-blog.com/' }.first
|
114
|
+
#=> <AdSpace>
|
115
|
+
|
116
|
+
my_programs = ZanoxPublisher::ProgramApplication.all(status: 'confirmed').map(&:program)
|
117
|
+
#=> [<Program>,...]
|
118
|
+
|
119
|
+
comment = params['comment']
|
120
|
+
#=> 'I also want a baseball cap.'
|
121
|
+
|
122
|
+
products = ZanoxPublisher::Product.page 0, per_page: 1, query: comment, adspace: adspace, programs: my_programs
|
123
|
+
#=> [<Product>]
|
124
|
+
|
125
|
+
product = products.first
|
126
|
+
#=> <Product>
|
127
|
+
|
128
|
+
product.tracking_links.first.ppc
|
129
|
+
#=> "http://ad.zanox.com/ppv/?..."
|
130
|
+
```
|
131
|
+
|
132
|
+
### List of Objects (Implimented)
|
133
|
+
|
134
|
+
* `ZanoxPublisher::AdMedium`: GetAdmedia, GetAdmedium
|
135
|
+
* `ZanoxPublisher::AdSpace`: GetAdspaces, GetAdspace
|
136
|
+
* `ZanoxPublisher::Incentive`: SearchIncentives, GetIncentive
|
137
|
+
* `ZanoxPublisher::ExclusiveIncentive`: SearchExclusiveIncentives, GetExclusiveIncentive
|
138
|
+
* `ZanoxPublisher::Product`: SearchProducts, GetProduct
|
139
|
+
* `ZanoxPublisher::Profile`: getProfiles
|
140
|
+
* `ZanoxPublisher::Program`: SearchPrograms, GetProgram
|
141
|
+
* `ZanoxPublisher::ProgramApplication`: GetProgramApplications
|
142
|
+
|
143
|
+
## Documentation
|
144
|
+
|
145
|
+
[http://www.rubydoc.info/github/oliverprater/zanox_publisher/master][documentation]
|
146
|
+
|
147
|
+
[documentation]: http://www.rubydoc.info/github/oliverprater/zanox_publisher/master
|
148
|
+
|
149
|
+
## Versioning
|
150
|
+
|
151
|
+
This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations
|
152
|
+
of this scheme should be reported as bugs. Specifically, if a minor or patch
|
153
|
+
version is released that breaks backward compatibility, that version should be
|
154
|
+
immediately yanked and/or a new version should be immediately released that
|
155
|
+
restores compatibility. Breaking changes to the public API will only be
|
156
|
+
introduced with new major versions. As a result of this policy, you can (and
|
157
|
+
should) specify a dependency on this gem using the [Pessimistic Version
|
158
|
+
Constraint][pvc] with two digits of precision. For example:
|
159
|
+
|
160
|
+
'zanox_publisher', '~> 0.1'
|
161
|
+
|
162
|
+
[semver]: http://semver.org/
|
163
|
+
[pvc]: http://docs.rubygems.org/read/chapter/16#page74
|
164
|
+
|
165
|
+
## Contributing
|
166
|
+
|
167
|
+
1. Fork it ( https://github.com/oliverprater/zanox_publisher/fork )
|
168
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
169
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
170
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
171
|
+
5. Create a new Pull Request
|
172
|
+
|
173
|
+
## Copyright
|
174
|
+
|
175
|
+
Copyright (c) 2015 Oliver Prater.
|
176
|
+
See [LICENSE][license] for details.
|
177
|
+
|
178
|
+
[license]: LICENSE.md
|
data/Rakefile
ADDED
@@ -0,0 +1,232 @@
|
|
1
|
+
module ZanoxPublisher
|
2
|
+
# AdMedium
|
3
|
+
#
|
4
|
+
# Get banners and links, including tracking links
|
5
|
+
#
|
6
|
+
# @attr [Integer] id The admediumItem's identifer from Zanox
|
7
|
+
# @attr [String] name The name for the ad medium
|
8
|
+
# @attr [Fixnum] adrank The adrank of the ad medium
|
9
|
+
# @attr [String] admedium_type The type of ad medium
|
10
|
+
# @attr [Program] program The program to which the ad medium belongs
|
11
|
+
# @attr [String] title The title of the ad medium
|
12
|
+
# @attr [Integer] height The height in pixel of the image
|
13
|
+
# @attr [Integer] width The width in pixel of the image
|
14
|
+
# @attr [Format] format The formats' Zanox identifer and name
|
15
|
+
# @attr [String] code The code of the ad medium
|
16
|
+
# @attr [String] description The description from the advertiser
|
17
|
+
# @attr [String] instruction The instructions from the advertiser
|
18
|
+
# @attr [String] purpose The purpose assigned to the ad medium
|
19
|
+
# @attr [Array<Category>] category The merchants' given category to the ad medium
|
20
|
+
# @attr [Hash] group The group given to the ad medium
|
21
|
+
# @attr [Array] tags A list of tags for the ad medium
|
22
|
+
# @attr [Array<TrackingLink>] tracking_links The tracking links of the ad medium for each ad space
|
23
|
+
class AdMedium < Base
|
24
|
+
RESOURCE_PATH = '/admedia'
|
25
|
+
|
26
|
+
# ENUM types
|
27
|
+
@@admedia_types = %w(html script lookatMedia image imageText text)
|
28
|
+
@@admedia_purposes = %w(startPage productDeeplink categoryDeeplink searchDeeplink)
|
29
|
+
|
30
|
+
class << self
|
31
|
+
# Returns the Zanox API admediaTypeEnum datatype
|
32
|
+
#
|
33
|
+
# @return [Array<String>]
|
34
|
+
def admedia_types
|
35
|
+
@@admedia_types
|
36
|
+
end
|
37
|
+
|
38
|
+
# Returns the Zanox API admediaPurposeEnum datatype
|
39
|
+
#
|
40
|
+
# @return [Array<String>]
|
41
|
+
def admedia_purposes
|
42
|
+
@@admedia_purposes
|
43
|
+
end
|
44
|
+
|
45
|
+
# Retrieves all affiliate link's dependent on search parameters.
|
46
|
+
#
|
47
|
+
# This is equivalent to the Zanox API method GetAdmedia.
|
48
|
+
# The method documentation can be found under {https://developer.zanox.com/web/guest/publisher-api-2011/get-admedia}.
|
49
|
+
#
|
50
|
+
# Authentication: Requires connect ID.
|
51
|
+
#
|
52
|
+
# This can require multiple requests, as internally every page is pulled.
|
53
|
+
# The ZanoxPublisher::AdMedium.page function can be used to better control the requests made.
|
54
|
+
#
|
55
|
+
# @param program [Integer] Limits results to a particular program ID.
|
56
|
+
# @param region [String] Limits results to programs from a particular region.
|
57
|
+
# @param format [String] Limits results to an ad media format.
|
58
|
+
# @param admedium_type [String] Limits results to an ad media type (API equivalent is admediumtype).
|
59
|
+
# @param admediumtype [String] Limits results to an ad media type (API name).
|
60
|
+
# @param purpose [String] Limits results to a type of link to the advertiser shop.
|
61
|
+
# @param partnership [String] Limits results to either programs to whom the publisher has successfully applied ("direct"), or to those who belong to zanox's publicly available ad pool ("indirect").
|
62
|
+
# @param category [String] Limits results to one of the program's ad media categories. Ad media categories are defined by each advertiser for their program, and can be retrieved using GetAdmediumCategories.
|
63
|
+
# @param adspace [AdSpace, Integer] Limits results to tracking links associated with this ad space.
|
64
|
+
#
|
65
|
+
# @return [Array<AdMedium>]
|
66
|
+
def all(options = {})
|
67
|
+
retval = []
|
68
|
+
current_page = 0
|
69
|
+
options.merge!({ per_page: maximum_per_page })
|
70
|
+
|
71
|
+
begin
|
72
|
+
retval += self.page(current_page, options)
|
73
|
+
current_page += 1
|
74
|
+
end while AdMedium.total > retval.size
|
75
|
+
|
76
|
+
retval
|
77
|
+
end
|
78
|
+
|
79
|
+
# Retrieves the requested page of admedium items dependent on search parameters.
|
80
|
+
#
|
81
|
+
# This is equivalent to the Zanox API method GetAdmedia.
|
82
|
+
# The method documentation can be found under {https://developer.zanox.com/web/guest/publisher-api-2011/get-admedia}.
|
83
|
+
#
|
84
|
+
# Authentication: Requires connect ID.
|
85
|
+
#
|
86
|
+
# @param page [Integer] the page position
|
87
|
+
# @param per_page [Integer] number of items in the result set (API equivalent is items)
|
88
|
+
# @param items [Integer] number of items in the result set (API name)
|
89
|
+
# @param program [Program, Integer] Limits results to a particular program ID.
|
90
|
+
# @param region [String] Limits results to programs from a particular region.
|
91
|
+
# @param format [String] Limits results to an ad media format.
|
92
|
+
# @param admedium_type [String] Limits results to an ad media type (API equivalent is admediumtype).
|
93
|
+
# @param admediumtype [String] Limits results to an ad media type (API name).
|
94
|
+
# @param purpose [String] Limits results to a type of link to the advertiser shop.
|
95
|
+
# @param partnership [String] Limits results to either programs to whom the publisher has successfully applied ("direct"), or to those who belong to zanox's publicly available ad pool ("indirect").
|
96
|
+
# @param category [Category, String] Limits results to one of the program's ad media categories. Ad media categories are defined by each advertiser for their program, and can be retrieved using GetAdmediumCategories.
|
97
|
+
# @param adspace [AdSpace, Integer] Limits results to tracking links associated with this ad space.
|
98
|
+
#
|
99
|
+
# @return [Array<AdSpace>]
|
100
|
+
def page(page = 0, options = {})
|
101
|
+
params = { query: { page: page } }
|
102
|
+
|
103
|
+
per_page = nil
|
104
|
+
per_page = options[:per_page] if per_page.nil?
|
105
|
+
per_page = options[:items] if per_page.nil?
|
106
|
+
per_page = AdMedium.per_page if per_page.nil?
|
107
|
+
params[:query].merge!({ items: per_page })
|
108
|
+
|
109
|
+
program = options[:program]
|
110
|
+
program = program.to_i unless program.nil?
|
111
|
+
|
112
|
+
region = options[:region]
|
113
|
+
|
114
|
+
format = options[:format]
|
115
|
+
|
116
|
+
admedium_type = options[:admedium_type]
|
117
|
+
admedium_type = options[:admediumtype] if admedium_type.nil?
|
118
|
+
admedium_type = nil unless @@admedia_types.include? admedium_type
|
119
|
+
|
120
|
+
purpose = options[:purpose]
|
121
|
+
purpose = nil unless @@admedia_purposes.include? purpose
|
122
|
+
|
123
|
+
partnership = options[:partnership]
|
124
|
+
|
125
|
+
# Limits results to one of the program's ad media categories. Ad media categories are defined by each advertiser for their program, and can be retrieved using GetAdmediumCategories.
|
126
|
+
category = options[:category]
|
127
|
+
category = category.to_i unless category.nil?
|
128
|
+
|
129
|
+
adspace = options[:adspace]
|
130
|
+
adspace = adspace.to_i unless adspace.nil?
|
131
|
+
|
132
|
+
# Build the query on hand of the options received
|
133
|
+
params[:query].merge!({ program: program }) unless program.nil?
|
134
|
+
params[:query].merge!({ region: region }) unless region.nil?
|
135
|
+
params[:query].merge!({ format: format }) unless format.nil?
|
136
|
+
params[:query].merge!({ admediumtype: admedium_type }) unless admedium_type.nil?
|
137
|
+
params[:query].merge!({ purpose: purpose }) unless purpose.nil?
|
138
|
+
params[:query].merge!({ partnership: partnership }) unless partnership.nil?
|
139
|
+
params[:query].merge!({ category: category }) unless category.nil?
|
140
|
+
params[:query].merge!({ adspace: adspace }) unless adspace.nil?
|
141
|
+
|
142
|
+
retval = []
|
143
|
+
|
144
|
+
response = self.connection.get(RESOURCE_PATH, params)
|
145
|
+
|
146
|
+
AdMedium.total = response.fetch('total')
|
147
|
+
|
148
|
+
admedia = []
|
149
|
+
admedia = response.fetch('admediumItems', {}).fetch('admediumItem', []) if AdMedium.total > 0
|
150
|
+
|
151
|
+
admedia.each do |admedium|
|
152
|
+
retval << AdMedium.new(admedium)
|
153
|
+
end
|
154
|
+
|
155
|
+
retval
|
156
|
+
end
|
157
|
+
|
158
|
+
# Returns a single admediumItem, as queried by its ID.
|
159
|
+
#
|
160
|
+
# The use of the trackingLink of the ID is not supported at the moment.
|
161
|
+
#
|
162
|
+
# This is equivalent to the Zanox API method GetAdmedium.
|
163
|
+
# The method documentation can be found under {https://developer.zanox.com/web/guest/publisher-api-2011/get-admedia-admedium}.
|
164
|
+
#
|
165
|
+
# Authentication: Requires connect ID.
|
166
|
+
#
|
167
|
+
# @param id [Integer] the ID of the adspace you want to get.
|
168
|
+
# @param adspace [AdSpace, Integer] if you would like tracking links for only one of your publisher ad spaces, pass its ID in this parameter.
|
169
|
+
#
|
170
|
+
# @return [<AdMedium>]
|
171
|
+
def find(id, options = {})
|
172
|
+
params = {}
|
173
|
+
|
174
|
+
adspace = options[:adspace]
|
175
|
+
adspace = adspace.to_i unless adspace.nil?
|
176
|
+
|
177
|
+
params = { query: { adspace: adspace } } unless adspace.nil?
|
178
|
+
|
179
|
+
response = self.connection.get(RESOURCE_PATH + "/admedium/#{id}", params)
|
180
|
+
admedium = response.fetch('admediumItem', [])
|
181
|
+
|
182
|
+
AdMedium.new(admedium)
|
183
|
+
end
|
184
|
+
|
185
|
+
# A connection instance with AdMediums' relative_path
|
186
|
+
#
|
187
|
+
# @return [Connection]
|
188
|
+
def connection
|
189
|
+
@connection ||= Connection.new(RESOURCE_PATH)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
def initialize(data = {})
|
194
|
+
@id = data.fetch('@id').to_i
|
195
|
+
@name = data.fetch('name')
|
196
|
+
@adrank = data.fetch('adrank')
|
197
|
+
@admedium_type = data.fetch('admediumType')
|
198
|
+
@program = Program.new(data.fetch('program'))
|
199
|
+
# Optionally returned data
|
200
|
+
@title = data.fetch('title', nil)
|
201
|
+
@height = data.fetch('height', nil)
|
202
|
+
@width = data.fetch('width', nil)
|
203
|
+
@format = data.fetch('format', nil)
|
204
|
+
@format = Format.new(@format) unless @format.nil?
|
205
|
+
@code = data.fetch('code', nil)
|
206
|
+
@description = data.fetch('description', nil)
|
207
|
+
@instruction = data.fetch('instruction', nil)
|
208
|
+
@purpose = data.fetch('purpose', nil)
|
209
|
+
@category = data.fetch('category', nil)
|
210
|
+
@category = Category.new(@category) unless @category.nil?
|
211
|
+
@group = data.fetch('group', nil)
|
212
|
+
@tags = data.fetch('tags', nil)
|
213
|
+
@tracking_links = TrackingLink.fetch(data.fetch('trackingLinks', {})['trackingLink'])
|
214
|
+
end
|
215
|
+
|
216
|
+
# Returns the admediumItems' ID as integer representation
|
217
|
+
#
|
218
|
+
# @return [Integer]
|
219
|
+
def to_i
|
220
|
+
@id
|
221
|
+
end
|
222
|
+
|
223
|
+
attr_accessor :id, :name, :adrank, :admedium_type, :program,
|
224
|
+
:title, :height, :width, :format, :code,
|
225
|
+
:description, :instruction, :purpose, :category,
|
226
|
+
:group, :tags, :tracking_links
|
227
|
+
|
228
|
+
# make API names available
|
229
|
+
alias admediumType admedium_type
|
230
|
+
alias trackingLinks tracking_links
|
231
|
+
end
|
232
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
module ZanoxPublisher
|
2
|
+
# AdSpaces
|
3
|
+
#
|
4
|
+
# Access and modify your AdSpace information
|
5
|
+
#
|
6
|
+
# @attr [Integer] id The profileItem's identifer from Zanox
|
7
|
+
# @attr [String] name The name of your ad space
|
8
|
+
# @attr [String] url The url of your ad space
|
9
|
+
# @attr [String] description The description for your ad space
|
10
|
+
# @attr [String] adspace_type The type of ad space
|
11
|
+
# @attr [Integer] visitors The number of visitors to your ad space
|
12
|
+
# @attr [Integer] impressions The number of impressions of your ad space
|
13
|
+
# @attr [String] scope The scope of your ad space
|
14
|
+
# @attr [Array<String>] regions The regions for the ad space
|
15
|
+
# @attr [Array<Category>] categories The categories of your ad space
|
16
|
+
# @attr [String] language The language of your ad space
|
17
|
+
# @attr [Integer] check_number The check number for this ad space
|
18
|
+
class AdSpace < Base
|
19
|
+
RESOURCE_PATH = '/adspaces'
|
20
|
+
|
21
|
+
ADSPACE_TYPE_ENUM = %w(website email searchengine)
|
22
|
+
ADSPACE_SCOPE_ENUM = %w(private business)
|
23
|
+
|
24
|
+
class << self
|
25
|
+
# Retrieves all adspace items related to the publisher account.
|
26
|
+
#
|
27
|
+
# This is equivalent to the Zanox API method GetAdspaces.
|
28
|
+
# The method documentation can be found under {https://developer.zanox.com/web/guest/publisher-api-2011/get-adspaces}.
|
29
|
+
#
|
30
|
+
# Authentication: Requires signature.
|
31
|
+
#
|
32
|
+
# This can require multiple requests, as internally every page is pulled.
|
33
|
+
# The ZanoxPublisher::AdSpace.page function can be used to better control the requests made.
|
34
|
+
#
|
35
|
+
# @return [Array<AdSpace>]
|
36
|
+
def all
|
37
|
+
retval = []
|
38
|
+
current_page = 0
|
39
|
+
|
40
|
+
begin
|
41
|
+
retval += self.page(current_page, { per_page: maximum_per_page })
|
42
|
+
current_page += 1
|
43
|
+
end while AdSpace.total > retval.size
|
44
|
+
|
45
|
+
retval
|
46
|
+
end
|
47
|
+
|
48
|
+
# Retrieves the requested page of adspace items related to the publisher account.
|
49
|
+
#
|
50
|
+
# This is equivalent to the Zanox API method GetAdspaces.
|
51
|
+
# The method documentation can be found under {https://developer.zanox.com/web/guest/publisher-api-2011/get-adspaces}.
|
52
|
+
#
|
53
|
+
# Authentication: Requires signature.
|
54
|
+
#
|
55
|
+
# @param page [Integer] the page position
|
56
|
+
# @param per_page [Integer] number of items in the result set (API equivalent is items)
|
57
|
+
# @param items [Integer] number of items in the result set (API option name)
|
58
|
+
#
|
59
|
+
# @example
|
60
|
+
# ZanoxPublisher::AdSpace.page(1, per_page: 50) #=> [<AdSpace...>]
|
61
|
+
#
|
62
|
+
# @example
|
63
|
+
# ZanoxPublisher::AdSpace.page(2) #=> [<AdSpace...>]
|
64
|
+
#
|
65
|
+
# @example
|
66
|
+
# ZanoxPublisher::AdSpace.page #=> [<AdSpace...>]
|
67
|
+
#
|
68
|
+
# @return [Array<AdSpace>]
|
69
|
+
def page(page = 0, options = {})
|
70
|
+
params = { query: { page: page } }
|
71
|
+
|
72
|
+
per_page = nil
|
73
|
+
per_page = options[:per_page] if per_page.nil?
|
74
|
+
per_page = options[:items] if per_page.nil?
|
75
|
+
per_page = AdSpace.per_page if per_page.nil?
|
76
|
+
params[:query].merge!({ items: per_page })
|
77
|
+
|
78
|
+
retval = []
|
79
|
+
|
80
|
+
response = self.connection.signature_get(RESOURCE_PATH, params)
|
81
|
+
|
82
|
+
AdSpace.total = response.fetch('total')
|
83
|
+
adspaces = response.fetch('adspaceItems', []).fetch('adspaceItem', [])
|
84
|
+
|
85
|
+
adspaces.each do |adspace|
|
86
|
+
retval << AdSpace.new(adspace)
|
87
|
+
end
|
88
|
+
|
89
|
+
retval
|
90
|
+
end
|
91
|
+
|
92
|
+
# Returns a single adspaceItem, as queried by its ID.
|
93
|
+
#
|
94
|
+
# This is equivalent to the Zanox API method GetAdspace.
|
95
|
+
# The method documentation can be found under {https://developer.zanox.com/web/guest/publisher-api-2011/get-adspaces-adspace}.
|
96
|
+
#
|
97
|
+
# Authentication: Requires signature.
|
98
|
+
#
|
99
|
+
# @param id [Integer] the ID of the adspace you want to get
|
100
|
+
#
|
101
|
+
# @return [<AdSpace>]
|
102
|
+
def find(id)
|
103
|
+
response = self.connection.signature_get(RESOURCE_PATH + "/adspace/#{id}")
|
104
|
+
adspace = response.fetch('adspaceItem', []).first
|
105
|
+
|
106
|
+
AdSpace.new(adspace)
|
107
|
+
end
|
108
|
+
|
109
|
+
# A connection instance with AdSpaces' relative_path
|
110
|
+
#
|
111
|
+
# @return [Connection]
|
112
|
+
def connection
|
113
|
+
@connection ||= Connection.new(RESOURCE_PATH)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# TODO: POST {https://developer.zanox.com/web/guest/publisher-api-2011/post-adspaces-adspace}
|
118
|
+
# TODO: PUT {https://developer.zanox.com/web/guest/publisher-api-2011/put-adspaces-adspace}
|
119
|
+
# TODO: DELETE {https://developer.zanox.com/web/guest/publisher-api-2011/delete-adspaces-adspace}
|
120
|
+
#
|
121
|
+
def initialize(data = {})
|
122
|
+
@id = data.fetch('@id').to_i
|
123
|
+
|
124
|
+
# Depending on short or long representation of object
|
125
|
+
if data.fetch('$', nil).nil?
|
126
|
+
@name = data.fetch('name')
|
127
|
+
@url = data.fetch('url')
|
128
|
+
@description = data.fetch('description')
|
129
|
+
@adspace_type = data.fetch('adspaceType')
|
130
|
+
@visitors = data.fetch('visitors')
|
131
|
+
@impressions = data.fetch('impressions')
|
132
|
+
@scope = data.fetch('scope', nil)
|
133
|
+
@regions = data.fetch('regions', []).first
|
134
|
+
@regions = @regions.fetch('region') unless @regions.nil?
|
135
|
+
@regions = [@regions] if @regions.is_a? String
|
136
|
+
@categories = Category.fetch(data['categories'])
|
137
|
+
@language = data.fetch('language')
|
138
|
+
@check_number = data.fetch('checkNumber')
|
139
|
+
else
|
140
|
+
@name = data.fetch('$')
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# Returns the adspaceItems' ID as integer representation
|
145
|
+
#
|
146
|
+
# @return [Integer]
|
147
|
+
def to_i
|
148
|
+
@id
|
149
|
+
end
|
150
|
+
|
151
|
+
attr_accessor :id, :name, :url, :description, :adspace_type,
|
152
|
+
:visitors, :impressions, :scope, :regions,
|
153
|
+
:categories, :language, :check_number
|
154
|
+
|
155
|
+
# make API names available
|
156
|
+
alias adspaceType adspace_type
|
157
|
+
alias checkNumber check_number
|
158
|
+
end
|
159
|
+
end
|