blurb 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.circleci/config.yml +2 -1
- data/.gitignore +1 -0
- data/.travis.yml +2 -2
- data/README.md +39 -37
- data/bin/console +1 -0
- data/blurb.gemspec +8 -5
- data/lib/blurb.rb +19 -25
- data/lib/blurb/account.rb +108 -0
- data/lib/blurb/base_class.rb +8 -0
- data/lib/blurb/campaign_requests.rb +23 -0
- data/lib/blurb/client.rb +12 -0
- data/lib/blurb/profile.rb +140 -6
- data/lib/blurb/{report.rb → report_requests.rb} +50 -64
- data/lib/blurb/request.rb +81 -0
- data/lib/blurb/request_collection.rb +99 -0
- data/lib/blurb/request_collection_with_campaign_type.rb +12 -0
- data/lib/blurb/snapshot_requests.rb +36 -0
- data/lib/blurb/suggested_keyword_requests.rb +61 -0
- metadata +73 -16
- data/lib/blurb/ad_group.rb +0 -40
- data/lib/blurb/base_resource.rb +0 -172
- data/lib/blurb/bid_recommendation.rb +0 -24
- data/lib/blurb/campaign.rb +0 -38
- data/lib/blurb/keyword.rb +0 -51
- data/lib/blurb/snapshot.rb +0 -35
- data/lib/blurb/suggested_keyword.rb +0 -39
- data/lib/blurb/version.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 308f8f046233821f03d87749c7bbbc5bd99d440b471f526bfffc82e50e187d07
|
4
|
+
data.tar.gz: 8e5c1636d1a129af2c21daf33fb10d2397da31b9dafafd8abdf924495c1c6775
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e7350f33658327c5a11e81835de61b2e68a141e812d335fcddab777ea3c36f3ae90bb36756c14656233106e9514bf3742e0a32d9d5ac1d90a89ab946e4c7878
|
7
|
+
data.tar.gz: 82bda34380cb304a6422fea70f0af6e14832c71a4c8339407fd192064799725fce1344baae64b915211b28064f8ae89ee1afca7217320ccc443392848c716688
|
data/.circleci/config.yml
CHANGED
@@ -6,7 +6,7 @@ version: 2
|
|
6
6
|
jobs:
|
7
7
|
build:
|
8
8
|
docker:
|
9
|
-
- image: circleci/ruby:2.
|
9
|
+
- image: circleci/ruby:2.6.2
|
10
10
|
|
11
11
|
steps:
|
12
12
|
- checkout
|
@@ -21,6 +21,7 @@ jobs:
|
|
21
21
|
- run:
|
22
22
|
name: install dependencies
|
23
23
|
command: |
|
24
|
+
gem install bundler -v 2.0.2
|
24
25
|
bundle install --jobs=4 --retry=3 --path vendor/bundle
|
25
26
|
|
26
27
|
- save_cache:
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -83,50 +83,56 @@ You can find your profiles by making the following Blurb call.
|
|
83
83
|
|
84
84
|
This will return a JSON payload of profile information for your account. You can then select the profile ID you want to use.
|
85
85
|
|
86
|
-
## Blurb Values Setup
|
87
|
-
Before using the Blurb API wrapper you need to set your API values. Simply do that by initializing the Blurb values to your API values.
|
88
|
-
If you are using Rails, see below.
|
89
86
|
|
90
|
-
|
91
|
-
|
92
|
-
Blurb.client_id = "<YOUR_CLIENT_ID>"
|
93
|
-
Blurb.client_secret = "<YOUR_CLIENT_SECRET>"
|
94
|
-
Blurb.refresh_token = "<YOUR_REFRESH_TOKEN>"
|
95
|
-
```
|
87
|
+
|
88
|
+
|
96
89
|
|
97
90
|
## Rails Integration
|
98
91
|
|
99
|
-
|
100
|
-
Create a file called config/initializers/blurb.rb and setup the following values
|
92
|
+
When creating a new resource object, you may pass in a hash containing your api keys and tokens. Utilizing this approach allows you to dynamically toggle accounts and or regions with you application.
|
101
93
|
|
102
94
|
```ruby
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
95
|
+
authorization_hash = {
|
96
|
+
client_id: 'my_client_id',
|
97
|
+
profile_id: 'my_profile_id',
|
98
|
+
client_secret: 'client_secret',
|
99
|
+
refresh_token: 'refresh_token',
|
100
|
+
region: 'my_region'
|
101
|
+
}
|
102
|
+
|
103
|
+
blurb_instance = Blurb::Keyword.new(authorization_hash)
|
107
104
|
```
|
108
105
|
|
109
|
-
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
If you only plan on using Blurb for one api account and region you can setup the Amazon API keys and tokens in an initializer script.
|
111
|
+
Create a file called config/initializers/blurb.rb and setup the following values
|
110
112
|
|
111
113
|
```ruby
|
112
114
|
Blurb.profile_id = ENV["YOUR_PROFILE_ID_VAR"]
|
113
115
|
Blurb.client_id = ENV["YOUR_CLIENT_ID_VAR"]
|
114
116
|
Blurb.client_secret = ENV["YOUR_CLIENT_SECRET_VAR"]
|
115
117
|
Blurb.refresh_token = ENV["YOUR_REFRESH_TOKEN_VAR"]
|
118
|
+
Blurb.region = ENV["YOUR_REGION_VAR"]
|
116
119
|
```
|
117
120
|
|
118
|
-
|
119
|
-
|
120
|
-
## API Environments
|
121
|
-
|
122
|
-
By default Blurb will run API calls to the Amazon Advertising API production environment.
|
123
|
-
If you are under development and want to test out the API to see what it can do, you can set
|
124
|
-
the following Blurb property to use the API test environment.
|
121
|
+
Now, you no longer need to pass in an authorization hash when initializing the resource object.
|
125
122
|
|
126
123
|
```ruby
|
127
|
-
|
124
|
+
blurb_instance = Blurb::Keyword.new()
|
128
125
|
```
|
129
126
|
|
127
|
+
### Valid Region Codes
|
128
|
+
|
129
|
+
Region Code | Region | Notes
|
130
|
+
--- | --- | ---
|
131
|
+
TEST | Sandbox Environment | All marketplaces
|
132
|
+
NA | North America | Covers US and CA marketplaces
|
133
|
+
EU | Europe | Covers UK, FR, IT, ES, and DE marketplaces
|
134
|
+
FE | Far East | Cover JP and AU marketplaces
|
135
|
+
|
130
136
|
## Usage
|
131
137
|
|
132
138
|
All API calls have been setup as closely as possible to REST Resource calls.
|
@@ -138,19 +144,6 @@ For example, to use the keywords resource object:
|
|
138
144
|
blurb_instance = Blurb::Keyword.new()
|
139
145
|
```
|
140
146
|
|
141
|
-
Optionally, you may pass in a set of account credentials to override the default API keys and tokens
|
142
|
-
|
143
|
-
```ruby
|
144
|
-
authorization_hash = {
|
145
|
-
client_id: 'my_client_id',
|
146
|
-
profile_id: 'my_profile_id',
|
147
|
-
client_secret: 'client_secret',
|
148
|
-
refresh_token: 'refresh_token'
|
149
|
-
}
|
150
|
-
|
151
|
-
blurb_instance = Blurb::Keyword.new(authorization_hash)
|
152
|
-
```
|
153
|
-
|
154
147
|
In calls that require 'campaign_type' as a parameter, you must pass in either 'sp' for sponsored products or 'hsa' for sponsored brands (formerly known as headline search ads).
|
155
148
|
|
156
149
|
NOTE: Not all API endpoints are currently supported by Blurb. Over time we will get more
|
@@ -380,6 +373,15 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
380
373
|
|
381
374
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
382
375
|
|
376
|
+
In order to run the rspec test suite, you will need the following variables in a .env file:
|
377
|
+
|
378
|
+
```
|
379
|
+
PROFILE_ID
|
380
|
+
CLIENT_ID
|
381
|
+
CLIENT_SECRET
|
382
|
+
REFRESH_TOKEN
|
383
|
+
```
|
384
|
+
|
383
385
|
## Contributing
|
384
386
|
|
385
387
|
Bug reports and pull requests are welcome on GitHub at https://github.com/iserve-products/blurb. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
data/bin/console
CHANGED
@@ -5,6 +5,7 @@ require "blurb"
|
|
5
5
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
require 'dotenv/load'
|
8
9
|
|
9
10
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
11
|
# require "pry"
|
data/blurb.gemspec
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'blurb/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
7
6
|
spec.name = "blurb"
|
8
|
-
spec.version =
|
9
|
-
spec.authors = ["dlbunker"]
|
10
|
-
spec.email = ["
|
7
|
+
spec.version = "0.4.0"
|
8
|
+
spec.authors = ["dlbunker", "eamigo13"]
|
9
|
+
spec.email = ["evan@pattern.com"]
|
11
10
|
|
12
11
|
spec.summary = %q{Ruby gem for the Amazon Advertising API}
|
13
12
|
spec.description = %q{Amazon released a new Advertising API in 2017. This gem will integrate and allow you to make API calls to Amazon.}
|
@@ -30,12 +29,16 @@ Gem::Specification.new do |spec|
|
|
30
29
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
30
|
spec.require_paths = ["lib"]
|
32
31
|
|
33
|
-
spec.add_development_dependency "bundler", "~>
|
32
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
34
33
|
spec.add_development_dependency "rake", "~> 10.0"
|
35
34
|
spec.add_development_dependency "rspec", "~> 3.0"
|
36
35
|
spec.add_development_dependency "rspec_junit_formatter", "~> 0.3.0"
|
36
|
+
spec.add_development_dependency "dotenv"
|
37
|
+
spec.add_development_dependency "byebug"
|
38
|
+
spec.add_development_dependency "faker", "~> 2.1.0"
|
37
39
|
|
38
40
|
spec.add_runtime_dependency "rest-client", "~> 2.0"
|
39
41
|
spec.add_runtime_dependency "oauth2", "~> 1.4.0"
|
42
|
+
spec.add_runtime_dependency "activesupport"
|
40
43
|
|
41
44
|
end
|
data/lib/blurb.rb
CHANGED
@@ -1,32 +1,26 @@
|
|
1
|
-
require "
|
2
|
-
require "
|
1
|
+
require "blurb/account"
|
2
|
+
require "blurb/client"
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
class Blurb
|
5
|
+
attr_accessor :client, :account
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
def self.default_account
|
19
|
-
{
|
20
|
-
client_secret: self.client_secret,
|
21
|
-
client_id: self.client_id,
|
22
|
-
refresh_token: self.refresh_token,
|
23
|
-
profile_id: self.profile_id,
|
24
|
-
eu_env: self.eu_env
|
25
|
-
}
|
7
|
+
def initialize(
|
8
|
+
# Default to env variables
|
9
|
+
client_id: ENV["BLURB_CLIENT_ID"],
|
10
|
+
client_secret: ENV["BLURB_CLIENT_SECRET"],
|
11
|
+
refresh_token: ENV["BLURB_REFRESH_TOKEN"],
|
12
|
+
region: ENV["BLURB_REGION"],
|
13
|
+
profile_id: ENV["BLURB_PROFILE_ID"] # profile_id can be left nil
|
14
|
+
)
|
15
|
+
@client = Client.new(client_id: client_id, client_secret: client_secret)
|
16
|
+
@account = Account.new(refresh_token: refresh_token, region: region, client: @client, profile_id: profile_id)
|
26
17
|
end
|
27
18
|
|
28
|
-
|
29
|
-
|
19
|
+
def profiles
|
20
|
+
@account.profiles
|
30
21
|
end
|
31
22
|
|
23
|
+
def active_profile
|
24
|
+
@account.active_profile
|
25
|
+
end
|
32
26
|
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require "oauth2"
|
2
|
+
require "blurb/client"
|
3
|
+
require "blurb/profile"
|
4
|
+
|
5
|
+
class Blurb
|
6
|
+
class Account < BaseClass
|
7
|
+
attr_accessor :refresh_token, :api_url, :client, :profiles, :active_profile
|
8
|
+
|
9
|
+
API_URLS = {
|
10
|
+
"TEST" => "https://advertising-api-test.amazon.com",
|
11
|
+
"NA" => "https://advertising-api.amazon.com",
|
12
|
+
"EU" => "https://advertising-api-eu.amazon.com",
|
13
|
+
"FE" => "https://advertising-api-fe.amazon.com"
|
14
|
+
}
|
15
|
+
|
16
|
+
def initialize(refresh_token:, region:, client:, profile_id: nil)
|
17
|
+
@refresh_token = refresh_token
|
18
|
+
@api_url = API_URLS[region]
|
19
|
+
@client = client
|
20
|
+
@token_refreshed_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) # current time
|
21
|
+
@authorization_token = retrieve_token
|
22
|
+
initialize_profiles(profile_id)
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize_profiles(profile_id=nil)
|
26
|
+
@profiles = []
|
27
|
+
if profile_id
|
28
|
+
@profiles << Profile.new(
|
29
|
+
profile_id: profile_id,
|
30
|
+
account: self
|
31
|
+
)
|
32
|
+
else
|
33
|
+
amazon_profiles = profile_list()
|
34
|
+
amazon_profiles.each do |p|
|
35
|
+
@profiles << Profile.new(
|
36
|
+
profile_id: p[:profile_id],
|
37
|
+
account: self
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
@active_profile = @profiles.first
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_active_profile(profile_id)
|
45
|
+
@active_profile = get_profile(profile_id)
|
46
|
+
end
|
47
|
+
|
48
|
+
def get_profile(profile_id)
|
49
|
+
@profiles.find{ |p| p.profile_id == profile_id }
|
50
|
+
end
|
51
|
+
|
52
|
+
def profile_list
|
53
|
+
profile_request("/v2/profiles")
|
54
|
+
end
|
55
|
+
|
56
|
+
def retrieve_profile(profile_id)
|
57
|
+
profile_request("/v2/profiles/#{profile_id}")
|
58
|
+
end
|
59
|
+
|
60
|
+
def retrieve_token
|
61
|
+
current_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
62
|
+
elapsed_time = current_time - @token_refreshed_at
|
63
|
+
|
64
|
+
# refresh the token if it's been over an hour
|
65
|
+
if @authorization_token.nil? || elapsed_time >= 3600 # 1 hour #Look at using amazons expires_inblurb/
|
66
|
+
response = authorization_client.request(:post, "/auth/o2/token",
|
67
|
+
{
|
68
|
+
body: {
|
69
|
+
grant_type: "refresh_token",
|
70
|
+
client_id: @client.client_id,
|
71
|
+
refresh_token: @refresh_token,
|
72
|
+
client_secret: @client.client_secret
|
73
|
+
}
|
74
|
+
}
|
75
|
+
)
|
76
|
+
|
77
|
+
@authorization_token = JSON.parse(response.body)['access_token']
|
78
|
+
@token_refreshed_at = current_time
|
79
|
+
end
|
80
|
+
|
81
|
+
return @authorization_token
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def profile_request(api_path)
|
87
|
+
request = Request.new(
|
88
|
+
url: "#{@api_url}#{api_path}",
|
89
|
+
request_type: :get,
|
90
|
+
headers: {
|
91
|
+
"Authorization" => "Bearer #{retrieve_token()}",
|
92
|
+
"Content-Type" => "application/json",
|
93
|
+
"Amazon-Advertising-API-ClientId" => @client.client_id
|
94
|
+
}
|
95
|
+
)
|
96
|
+
|
97
|
+
request.make_request
|
98
|
+
end
|
99
|
+
|
100
|
+
def authorization_client
|
101
|
+
return OAuth2::Client.new(
|
102
|
+
"",
|
103
|
+
"",
|
104
|
+
:site => "https://api.amazon.com"
|
105
|
+
)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'blurb/request_collection_with_campaign_type'
|
2
|
+
|
3
|
+
class Blurb
|
4
|
+
class CampaignRequests < RequestCollectionWithCampaignType
|
5
|
+
def create_bulk(create_array)
|
6
|
+
create_array = map_campaign_payload(create_array)
|
7
|
+
super(create_array)
|
8
|
+
end
|
9
|
+
|
10
|
+
def update_bulk(update_array)
|
11
|
+
update_array = map_campaign_payload(update_array)
|
12
|
+
super(update_array)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def map_campaign_payload(payload)
|
18
|
+
campaign_type_string = "sponsoredProducts" if @campaign_type == CAMPAIGN_TYPE_CODES[:sp]
|
19
|
+
campaign_type_string = "sponsoredBrands" if @campaign_type == CAMPAIGN_TYPE_CODES[:sb]
|
20
|
+
payload.each{ |p| p[:campaign_type] = campaign_type_string }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/blurb/client.rb
ADDED
data/lib/blurb/profile.rb
CHANGED
@@ -1,12 +1,146 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require "blurb/account"
|
2
|
+
require "blurb/campaign_requests"
|
3
|
+
require "blurb/snapshot_requests"
|
4
|
+
require "blurb/report_requests"
|
5
|
+
require "blurb/request_collection"
|
6
|
+
require "blurb/request_collection_with_campaign_type"
|
7
|
+
require "blurb/suggested_keyword_requests"
|
3
8
|
|
4
|
-
|
5
|
-
|
9
|
+
class Blurb
|
10
|
+
class Profile < BaseClass
|
11
|
+
|
12
|
+
attr_accessor(
|
13
|
+
:account,
|
14
|
+
:ad_groups,
|
15
|
+
:campaign_negative_keywords,
|
16
|
+
:portfolios,
|
17
|
+
:product_ads,
|
18
|
+
:profile_id,
|
19
|
+
:suggested_keywords,
|
20
|
+
)
|
21
|
+
|
22
|
+
def initialize(profile_id:, account:)
|
23
|
+
@profile_id = profile_id
|
24
|
+
@account = account
|
25
|
+
|
26
|
+
@sp_campaigns = CampaignRequests.new(
|
27
|
+
headers: headers_hash,
|
28
|
+
base_url: @account.api_url,
|
29
|
+
resource: "campaigns",
|
30
|
+
campaign_type: CAMPAIGN_TYPE_CODES[:sp]
|
31
|
+
)
|
32
|
+
@sb_campaigns = CampaignRequests.new(
|
33
|
+
headers: headers_hash,
|
34
|
+
base_url: @account.api_url,
|
35
|
+
resource: "campaigns",
|
36
|
+
campaign_type: CAMPAIGN_TYPE_CODES[:sb]
|
37
|
+
)
|
38
|
+
@sp_keywords = RequestCollectionWithCampaignType.new(
|
39
|
+
headers: headers_hash,
|
40
|
+
base_url: @account.api_url,
|
41
|
+
resource: "keywords",
|
42
|
+
campaign_type: CAMPAIGN_TYPE_CODES[:sp]
|
43
|
+
)
|
44
|
+
@sb_keywords = RequestCollectionWithCampaignType.new(
|
45
|
+
headers: headers_hash,
|
46
|
+
base_url: @account.api_url,
|
47
|
+
resource: "keywords",
|
48
|
+
campaign_type: CAMPAIGN_TYPE_CODES[:sb]
|
49
|
+
)
|
50
|
+
@sp_snapshots = SnapshotRequests.new(
|
51
|
+
headers: headers_hash,
|
52
|
+
base_url: @account.api_url,
|
53
|
+
campaign_type: CAMPAIGN_TYPE_CODES[:sp]
|
54
|
+
)
|
55
|
+
@sb_snapshots = SnapshotRequests.new(
|
56
|
+
headers: headers_hash,
|
57
|
+
base_url: @account.api_url,
|
58
|
+
campaign_type: CAMPAIGN_TYPE_CODES[:sb]
|
59
|
+
)
|
60
|
+
@sp_reports = ReportRequests.new(
|
61
|
+
headers: headers_hash,
|
62
|
+
base_url: @account.api_url,
|
63
|
+
campaign_type: CAMPAIGN_TYPE_CODES[:sp]
|
64
|
+
)
|
65
|
+
@sb_reports = ReportRequests.new(
|
66
|
+
headers: headers_hash,
|
67
|
+
base_url: @account.api_url,
|
68
|
+
campaign_type: CAMPAIGN_TYPE_CODES[:sb]
|
69
|
+
)
|
70
|
+
@ad_groups = RequestCollection.new(
|
71
|
+
headers: headers_hash,
|
72
|
+
base_url: "#{@account.api_url}/v2/sp/adGroups"
|
73
|
+
)
|
74
|
+
@product_ads = RequestCollection.new(
|
75
|
+
headers: headers_hash,
|
76
|
+
base_url: "#{account.api_url}/v2/sp/productAds"
|
77
|
+
)
|
78
|
+
@sp_negative_keywords = RequestCollectionWithCampaignType.new(
|
79
|
+
headers: headers_hash,
|
80
|
+
base_url: @account.api_url,
|
81
|
+
resource: 'negativeKeywords',
|
82
|
+
campaign_type: CAMPAIGN_TYPE_CODES[:sp]
|
83
|
+
)
|
84
|
+
@sb_negative_keywords = RequestCollectionWithCampaignType.new(
|
85
|
+
headers: headers_hash,
|
86
|
+
base_url: @account.api_url,
|
87
|
+
resource: 'negativeKeywords',
|
88
|
+
campaign_type: CAMPAIGN_TYPE_CODES[:sb]
|
89
|
+
)
|
90
|
+
@campaign_negative_keywords = RequestCollection.new(
|
91
|
+
headers: headers_hash,
|
92
|
+
base_url: "#{@account.api_url}/v2/sp/campaignNegativeKeywords"
|
93
|
+
)
|
94
|
+
@portfolios = RequestCollection.new(
|
95
|
+
headers: headers_hash,
|
96
|
+
base_url: "#{@account.api_url}/v2/portfolios"
|
97
|
+
)
|
98
|
+
@suggested_keywords = SuggestedKeywordRequests.new(
|
99
|
+
headers: headers_hash,
|
100
|
+
base_url: "#{@account.api_url}/v2/sp"
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
def campaigns(campaign_type)
|
105
|
+
return @sp_campaigns if campaign_type == :sp
|
106
|
+
return @sb_campaigns if campaign_type == :sb || campaign_type == :hsa
|
107
|
+
end
|
108
|
+
|
109
|
+
def keywords(campaign_type)
|
110
|
+
return @sp_keywords if campaign_type == :sp
|
111
|
+
return @sb_keywords if campaign_type == :sb || campaign_type == :hsa
|
112
|
+
end
|
113
|
+
|
114
|
+
def negative_keywords(campaign_type)
|
115
|
+
return @sp_negative_keywords if campaign_type == :sp
|
116
|
+
return @sb_negative_keywords if campaign_type == :sb || campaign_type == :hsa
|
6
117
|
end
|
7
118
|
|
8
|
-
def
|
9
|
-
|
119
|
+
def snapshots(campaign_type)
|
120
|
+
return @sp_snapshots if campaign_type == :sp
|
121
|
+
return @sb_snapshots if campaign_type == :sb || campaign_type == :hsa
|
122
|
+
end
|
123
|
+
|
124
|
+
def reports(campaign_type)
|
125
|
+
return @sp_reports if campaign_type == :sp
|
126
|
+
return @sb_reports if campaign_type == :sb || campaign_type == :hsa
|
127
|
+
end
|
128
|
+
|
129
|
+
def profile_details
|
130
|
+
@account.retrieve_profile(@profile_id)
|
131
|
+
end
|
132
|
+
|
133
|
+
def headers_hash(opts = {})
|
134
|
+
headers_hash = {
|
135
|
+
"Authorization" => "Bearer #{@account.retrieve_token()}",
|
136
|
+
"Content-Type" => "application/json",
|
137
|
+
"Amazon-Advertising-API-Scope" => @profile_id,
|
138
|
+
"Amazon-Advertising-API-ClientId" => @account.client.client_id
|
139
|
+
}
|
140
|
+
|
141
|
+
headers_hash["Content-Encoding"] = "gzip" if opts[:gzip]
|
142
|
+
|
143
|
+
return headers_hash
|
10
144
|
end
|
11
145
|
end
|
12
146
|
end
|