google-adwords-api 0.14.0 → 0.14.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/ChangeLog +6 -0
- data/examples/v201406/advanced_operations/add_text_ad_with_upgraded_urls.rb +1 -1
- data/examples/v201406/basic_operations/add_ad_groups.rb +6 -4
- data/examples/v201409/advanced_operations/add_ad_customizer.rb +1 -1
- data/examples/v201409/advanced_operations/add_click_to_download_ad.rb +3 -3
- data/examples/v201409/advanced_operations/add_site_links.rb +8 -8
- data/examples/v201409/advanced_operations/add_text_ad_with_upgraded_urls.rb +3 -3
- data/examples/v201409/basic_operations/add_ad_groups.rb +6 -4
- data/examples/v201409/basic_operations/add_keywords.rb +1 -1
- data/examples/v201409/basic_operations/add_text_ads.rb +2 -2
- data/examples/v201409/campaign_management/set_ad_parameters.rb +1 -1
- data/examples/v201409/campaign_management/validate_text_ad.rb +1 -1
- data/examples/v201409/error_handling/handle_policy_violation_error.rb +1 -1
- data/examples/v201409/migration/upgrade_ad_url.rb +97 -0
- data/examples/v201409/reporting/download_criteria_report.rb +1 -1
- data/lib/adwords_api/api_config.rb +0 -8
- data/lib/adwords_api/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OTUyMDFjMzdlOGJkYmQxMjlkNzkwMjczNmM0Y2QwY2Q3YjA2MWMwNw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ODI5YmY2Mzc3YjYyNjk0ZDQwMzI5NjA4YWRmMTZhODc5OGIyZDAyZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NjEzMTUwZjQyNmJlMWFiMGJhYzZjZWU0MGRmYTkzMjJiMGMwZmViZjQxMDJk
|
10
|
+
NWJiYmVkZmU1ZjcyZjhhYjNhY2ZkY2UxMTJkNzUwNWEyYjIyOTE3YWQzMTRk
|
11
|
+
YjBhZTU5MjA2ZTMzNTEwZDkxNGY0NDA0NjVkMWRmZDUwNmQ0NzI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NGMwZTdhZjA1MWY1ZDA3ZGM3N2ZmZjc2NTE2OWVmZjFmYzdkNDkyZWMwZTYw
|
14
|
+
YTY1ZDFkMzZlMDk3M2E0NWNmNjFhZDk5Y2M5M2YxNzEzY2ZjN2Q5YTlmMDk2
|
15
|
+
YThiNTMwYjg4MzhhOTViNWZkMDY0YjRlZTRkMjcwMTI0ZGI1NjM=
|
data/ChangeLog
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
0.14.1:
|
2
|
+
- Corrected the comments and settings regarding target_all in add_ad_groups
|
3
|
+
examples.
|
4
|
+
- Added new example for migrating to Upgraded URLs.
|
5
|
+
- Updated examples to reference final URLs.
|
6
|
+
|
1
7
|
0.14.0:
|
2
8
|
- Removed deprecated API version v201402.
|
3
9
|
- Removed support for returnMoneyInMicros header.
|
@@ -62,7 +62,7 @@ def add_text_ad_with_upgraded_urls(ad_group_id)
|
|
62
62
|
# Specify a tracking URL for 3rd party tracking provider. You may specify
|
63
63
|
# one at customer, campaign, ad group, ad, criterion, or feed item levels.
|
64
64
|
:tracking_url_template => 'http://tracker.example.com/' +
|
65
|
-
'?
|
65
|
+
'?season={_season}&promocode={_promocode}&u={lpurl}',
|
66
66
|
:url_custom_parameters => tracking_url_parameters,
|
67
67
|
# Specify a list of final URLs. This field cannot be set if :url field
|
68
68
|
# is set. This may be specified at ad, criterion, and feed item levels.
|
@@ -53,22 +53,24 @@ def add_ad_groups(campaign_id)
|
|
53
53
|
]
|
54
54
|
},
|
55
55
|
:settings => [
|
56
|
-
#
|
56
|
+
# Targeting restriction settings - these settings only affect serving
|
57
57
|
# for the Display Network.
|
58
58
|
{
|
59
59
|
:xsi_type => 'TargetingSetting',
|
60
60
|
:details => [
|
61
61
|
# Restricting to serve ads that match your ad group placements.
|
62
|
+
# This is equivalent to choosing "Target and bid" in the UI.
|
62
63
|
{
|
63
64
|
:xsi_type => 'TargetingSettingDetail',
|
64
65
|
:criterion_type_group => 'PLACEMENT',
|
65
|
-
:target_all =>
|
66
|
+
:target_all => false
|
66
67
|
},
|
67
|
-
# Using your ad group verticals only for bidding.
|
68
|
+
# Using your ad group verticals only for bidding. This is equivalent
|
69
|
+
# to choosing "Bid only" in the UI.
|
68
70
|
{
|
69
71
|
:xsi_type => 'TargetingSettingDetail',
|
70
72
|
:criterion_type_group => 'VERTICAL',
|
71
|
-
:target_all =>
|
73
|
+
:target_all => true
|
72
74
|
}
|
73
75
|
]
|
74
76
|
}
|
@@ -203,7 +203,7 @@ def add_ad_customizer(ad_group_ids)
|
|
203
203
|
:headline => 'Luxury Cruise to {=CustomizerFeed.Name}',
|
204
204
|
:description1 => 'Only {=CustomizerFeed.Price}',
|
205
205
|
:description2 => 'Offer ends in {=countdown(CustomizerFeed.Date)}!',
|
206
|
-
:
|
206
|
+
:final_urls => ['http://www.example.com'],
|
207
207
|
:display_url => 'www.example.com'
|
208
208
|
}
|
209
209
|
|
@@ -75,8 +75,8 @@ def add_click_to_download_ad(ad_group_id)
|
|
75
75
|
:xsi_type => 'TemplateAd',
|
76
76
|
:name => 'Ad for demo game',
|
77
77
|
:template_id => 353,
|
78
|
-
:
|
79
|
-
'http://play.google.com/store/apps/details?id=com.example.demogame',
|
78
|
+
:final_urls =>
|
79
|
+
['http://play.google.com/store/apps/details?id=com.example.demogame'],
|
80
80
|
:display_url => 'play.google.com',
|
81
81
|
:template_elements => [ad_data]
|
82
82
|
}
|
@@ -96,7 +96,7 @@ def add_click_to_download_ad(ad_group_id)
|
|
96
96
|
if response and response[:value]
|
97
97
|
response[:value].each do |ad|
|
98
98
|
puts "Added new click-to-download ad to ad group ID %d with url '%s'." %
|
99
|
-
[ad[:ad][:id], ad[:ad][:
|
99
|
+
[ad[:ad][:id], ad[:ad][:final_urls[0]]]
|
100
100
|
end
|
101
101
|
else
|
102
102
|
raise StandardError, 'No ads were added.'
|
@@ -60,24 +60,24 @@ def add_site_links(campaign_id)
|
|
60
60
|
# Attribute of type STRING.
|
61
61
|
link_text_feed_attribute_id = feed[:attributes][0][:id]
|
62
62
|
# Attribute of type URL.
|
63
|
-
|
63
|
+
final_url_feed_attribute_id = feed[:attributes][1][:id]
|
64
64
|
# Attribute of type STRING.
|
65
65
|
line_1_feed_attribute_id = feed[:attributes][2][:id]
|
66
66
|
#Attribute of type STRING.
|
67
67
|
line_2_feed_attribute_id = feed[:attributes][3][:id]
|
68
68
|
puts "Feed with name '%s' and ID %d was added with" %
|
69
69
|
[feed[:name], feed[:id]]
|
70
|
-
puts "\tText attribute ID %d and URL attribute ID %d " +
|
70
|
+
puts "\tText attribute ID %d and Final URL attribute ID %d " +
|
71
71
|
"and Line 1 attribute ID %d and Line 2 attribute ID %d." % [
|
72
72
|
link_text_feed_attribute_id,
|
73
|
-
|
73
|
+
final_url_feed_attribute_id,
|
74
74
|
line_1_feed_attribute_id,
|
75
75
|
line_2_feed_attribute_id
|
76
76
|
]
|
77
77
|
|
78
78
|
sitelinks_data[:feed_id] = feed[:id]
|
79
79
|
sitelinks_data[:link_text_feed_id] = link_text_feed_attribute_id
|
80
|
-
sitelinks_data[:
|
80
|
+
sitelinks_data[:final_url_feed_id] = final_url_feed_attribute_id
|
81
81
|
sitelinks_data[:line_1_feed_id] = line_1_feed_attribute_id
|
82
82
|
sitelinks_data[:line_2_feed_id] = line_2_feed_attribute_id
|
83
83
|
else
|
@@ -133,7 +133,7 @@ def add_site_links(campaign_id)
|
|
133
133
|
:string_value => item[:text]
|
134
134
|
},
|
135
135
|
{
|
136
|
-
:feed_attribute_id => sitelinks_data[:
|
136
|
+
:feed_attribute_id => sitelinks_data[:final_url_feed_id],
|
137
137
|
:string_value => item[:url]
|
138
138
|
},
|
139
139
|
{
|
@@ -173,8 +173,8 @@ def add_site_links(campaign_id)
|
|
173
173
|
:field_id => PLACEHOLDER_FIELD_SITELINK_LINK_TEXT
|
174
174
|
},
|
175
175
|
{
|
176
|
-
:feed_attribute_id => sitelinks_data[:
|
177
|
-
:field_id =>
|
176
|
+
:feed_attribute_id => sitelinks_data[:final_url_feed_id],
|
177
|
+
:field_id => PLACEHOLDER_FIELD_SITELINK_FINAL_URL
|
178
178
|
},
|
179
179
|
{
|
180
180
|
:feed_attribute_id => sitelinks_data[:line_1_feed_id],
|
@@ -271,7 +271,7 @@ if __FILE__ == $0
|
|
271
271
|
# https://developers.google.com/adwords/api/docs/appendix/placeholders
|
272
272
|
PLACEHOLDER_SITELINKS = 1
|
273
273
|
PLACEHOLDER_FIELD_SITELINK_LINK_TEXT = 1
|
274
|
-
|
274
|
+
PLACEHOLDER_FIELD_SITELINK_FINAL_URL = 5
|
275
275
|
PLACEHOLDER_FIELD_SITELINK_LINE_1_TEXT = 3
|
276
276
|
PLACEHOLDER_FIELD_SITELINK_LINE_2_TEXT = 4
|
277
277
|
|
@@ -18,8 +18,8 @@
|
|
18
18
|
# See the License for the specific language governing permissions and
|
19
19
|
# limitations under the License.
|
20
20
|
#
|
21
|
-
# This example adds a text ad that uses
|
22
|
-
#
|
21
|
+
# This code example adds a text ad that uses advanced features of upgraded
|
22
|
+
# URLs.
|
23
23
|
#
|
24
24
|
# Tags: AdGroupAdService.mutate
|
25
25
|
|
@@ -62,7 +62,7 @@ def add_text_ad_with_upgraded_urls(ad_group_id)
|
|
62
62
|
# Specify a tracking URL for 3rd party tracking provider. You may specify
|
63
63
|
# one at customer, campaign, ad group, ad, criterion, or feed item levels.
|
64
64
|
:tracking_url_template => 'http://tracker.example.com/' +
|
65
|
-
'?
|
65
|
+
'?season={_season}&promocode={_promocode}&u={lpurl}',
|
66
66
|
:url_custom_parameters => tracking_url_parameters,
|
67
67
|
# Specify a list of final URLs. This field cannot be set if :url field
|
68
68
|
# is set. This may be specified at ad, criterion, and feed item levels.
|
@@ -53,22 +53,24 @@ def add_ad_groups(campaign_id)
|
|
53
53
|
]
|
54
54
|
},
|
55
55
|
:settings => [
|
56
|
-
#
|
56
|
+
# Targeting restriction settings - these settings only affect serving
|
57
57
|
# for the Display Network.
|
58
58
|
{
|
59
59
|
:xsi_type => 'TargetingSetting',
|
60
60
|
:details => [
|
61
61
|
# Restricting to serve ads that match your ad group placements.
|
62
|
+
# This is equivalent to choosing "Target and bid" in the UI.
|
62
63
|
{
|
63
64
|
:xsi_type => 'TargetingSettingDetail',
|
64
65
|
:criterion_type_group => 'PLACEMENT',
|
65
|
-
:target_all =>
|
66
|
+
:target_all => false
|
66
67
|
},
|
67
|
-
# Using your ad group verticals only for bidding.
|
68
|
+
# Using your ad group verticals only for bidding. This is equivalent
|
69
|
+
# to choosing "Bid only" in the UI.
|
68
70
|
{
|
69
71
|
:xsi_type => 'TargetingSettingDetail',
|
70
72
|
:criterion_type_group => 'VERTICAL',
|
71
|
-
:target_all =>
|
73
|
+
:target_all => true
|
72
74
|
}
|
73
75
|
]
|
74
76
|
}
|
@@ -51,7 +51,7 @@ def add_keywords(ad_group_id)
|
|
51
51
|
},
|
52
52
|
# Optional fields:
|
53
53
|
:user_status => 'PAUSED',
|
54
|
-
:
|
54
|
+
:final_urls => ['http://example.com/mars']
|
55
55
|
},
|
56
56
|
{:xsi_type => 'BiddableAdGroupCriterion',
|
57
57
|
:ad_group_id => ad_group_id,
|
@@ -46,7 +46,7 @@ def add_text_ads(ad_group_id)
|
|
46
46
|
:headline => 'Luxury Cruise to Mars',
|
47
47
|
:description1 => 'Visit the Red Planet in style.',
|
48
48
|
:description2 => 'Low-gravity fun for everyone!',
|
49
|
-
:
|
49
|
+
:final_urls => ['http://www.example.com'],
|
50
50
|
:display_url => 'www.example.com'
|
51
51
|
},
|
52
52
|
{
|
@@ -54,7 +54,7 @@ def add_text_ads(ad_group_id)
|
|
54
54
|
:headline => 'Luxury Cruise to Mars',
|
55
55
|
:description1 => 'Enjoy your stay at Red Planet.',
|
56
56
|
:description2 => 'Buy your tickets now!',
|
57
|
-
:
|
57
|
+
:final_urls => ['http://www.example.com'],
|
58
58
|
:display_url => 'www.example.com'
|
59
59
|
}
|
60
60
|
]
|
@@ -50,7 +50,7 @@ def set_ad_parameters(ad_group_id, criterion_id)
|
|
50
50
|
:headline => 'Luxury Mars Cruises',
|
51
51
|
:description1 => 'Low-gravity fun for {param1:cheap}.',
|
52
52
|
:description2 => 'Only {param2:a few} seats left!',
|
53
|
-
:
|
53
|
+
:final_urls => ['http://www.example.com'],
|
54
54
|
:display_url => 'www.example.com'
|
55
55
|
}
|
56
56
|
}
|
@@ -49,7 +49,7 @@ def validate_text_ad(ad_group_id)
|
|
49
49
|
:headline => 'Luxury Cruise to Mars',
|
50
50
|
:description1 => 'Visit the Red Planet in style.',
|
51
51
|
:description2 => 'Low-gravity fun for everyone!',
|
52
|
-
:
|
52
|
+
:final_urls => ['http://www.example.com'],
|
53
53
|
:display_url => 'www.example.com'
|
54
54
|
}
|
55
55
|
}
|
@@ -50,7 +50,7 @@ def handle_policy_violation_error(ad_group_id)
|
|
50
50
|
:headline => 'Mars Cruise!!!',
|
51
51
|
:description1 => 'Visit the Red Planet in style.',
|
52
52
|
:description2 => 'Low-gravity fun for everyone!',
|
53
|
-
:
|
53
|
+
:final_urls => ['http://www.example.com'],
|
54
54
|
:display_url => 'www.example.com',
|
55
55
|
}
|
56
56
|
}
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Encoding: utf-8
|
3
|
+
#
|
4
|
+
# Author:: api.mcloonan@gmail.com (Michael Cloonan)
|
5
|
+
#
|
6
|
+
# Copyright:: Copyright 2015, Google Inc. All Rights Reserved.
|
7
|
+
#
|
8
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
17
|
+
# implied.
|
18
|
+
# See the License for the specific language governing permissions and
|
19
|
+
# limitations under the License.
|
20
|
+
#
|
21
|
+
# This code example upgrades an ad to use upgraded URLs.
|
22
|
+
#
|
23
|
+
# Tags: AdGroupAdService.get, AdGroupAdService.upgradeUrl
|
24
|
+
|
25
|
+
require 'adwords_api'
|
26
|
+
|
27
|
+
def upgrade_ad_url(ad_group_id, ad_id)
|
28
|
+
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
29
|
+
# when called without parameters.
|
30
|
+
adwords = AdwordsApi::Api.new
|
31
|
+
|
32
|
+
# To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
|
33
|
+
# the configuration file or provide your own logger:
|
34
|
+
# adwords.logger = Logger.new('adwords_xml.log')
|
35
|
+
|
36
|
+
ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
|
37
|
+
|
38
|
+
selector = {
|
39
|
+
:fields => ['Id', 'Url'],
|
40
|
+
:predicates => [
|
41
|
+
{:field => 'AdGroupId', :operator => 'EQUALS', :values => [ad_group_id]},
|
42
|
+
{:field => 'Id', :operator => 'EQUALS', :values => [ad_id]}
|
43
|
+
]
|
44
|
+
}
|
45
|
+
|
46
|
+
page = ad_group_ad_srv.get(selector)
|
47
|
+
ad_group_ad = page[:entries][0] if page[:entries]
|
48
|
+
|
49
|
+
raise StandardError, "Ad not found." if ad_group_ad.nil?
|
50
|
+
|
51
|
+
ad_url_upgrade = {
|
52
|
+
:ad_id => ad_group_ad[:ad][:id],
|
53
|
+
:final_url => ad_group_ad[:ad][:url]
|
54
|
+
}
|
55
|
+
|
56
|
+
response = ad_group_ad_srv.upgrade_url([ad_url_upgrade])
|
57
|
+
if response
|
58
|
+
ad_group_ad = response.first
|
59
|
+
puts "Ad with ID %d and destination url '%s' was upgraded." %
|
60
|
+
[ad_group_ad[:id], ad_group_ad[:final_urls].first]
|
61
|
+
else
|
62
|
+
raise StandardError, 'failed to upgrade ads.'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
if __FILE__ == $0
|
67
|
+
API_VERSION = :v201409
|
68
|
+
|
69
|
+
begin
|
70
|
+
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
71
|
+
ad_id = 'INSERT_AD_ID_HERE'.to_i
|
72
|
+
upgrade_ad_url(ad_group_id, ad_id)
|
73
|
+
|
74
|
+
# Authorization error.
|
75
|
+
rescue AdsCommon::Errors::OAuth2VerificationRequired => e
|
76
|
+
puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
|
77
|
+
"OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
|
78
|
+
"to retrieve and store OAuth2 tokens."
|
79
|
+
puts "See this wiki page for more details:\n\n " +
|
80
|
+
'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
|
81
|
+
|
82
|
+
# HTTP errors.
|
83
|
+
rescue AdsCommon::Errors::HttpError => e
|
84
|
+
puts "HTTP Error: %s" % e
|
85
|
+
|
86
|
+
# API errors.
|
87
|
+
rescue AdwordsApi::Errors::ApiException => e
|
88
|
+
puts "Message: %s" % e.message
|
89
|
+
puts 'Errors:'
|
90
|
+
e.errors.each_with_index do |error, index|
|
91
|
+
puts "\tError [%d]:" % (index + 1)
|
92
|
+
error.each do |field, value|
|
93
|
+
puts "\t\t%s: %s" % [field, value]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -38,7 +38,7 @@ def download_criteria_report(file_name)
|
|
38
38
|
report_definition = {
|
39
39
|
:selector => {
|
40
40
|
:fields => ['CampaignId', 'AdGroupId', 'Id', 'Criteria', 'CriteriaType',
|
41
|
-
'Impressions', 'Clicks', 'Cost'],
|
41
|
+
'FinalUrls', 'Impressions', 'Clicks', 'Cost'],
|
42
42
|
# Predicates are optional.
|
43
43
|
:predicates => {
|
44
44
|
:field => 'Status',
|
@@ -250,14 +250,6 @@ module AdwordsApi
|
|
250
250
|
@@subdir_config
|
251
251
|
end
|
252
252
|
|
253
|
-
def self.client_login_config(key)
|
254
|
-
raise AdsCommon::Errors::AuthError,
|
255
|
-
"ClientLogin is not supported. " +
|
256
|
-
"Please use OAuth2 instead. See here for details:\n\t\t" +
|
257
|
-
"https://developers.google.com/adwords/api/" +
|
258
|
-
"docs/guides/authentication"
|
259
|
-
end
|
260
|
-
|
261
253
|
def self.default_config_filename
|
262
254
|
DEFAULT_CONFIG_FILENAME
|
263
255
|
end
|
data/lib/adwords_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-adwords-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danial Klimkin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-ads-common
|
@@ -153,6 +153,7 @@ files:
|
|
153
153
|
- examples/v201409/error_handling/handle_partial_failures.rb
|
154
154
|
- examples/v201409/error_handling/handle_policy_violation_error.rb
|
155
155
|
- examples/v201409/error_handling/handle_two_factor_authorization_error.rb
|
156
|
+
- examples/v201409/migration/upgrade_ad_url.rb
|
156
157
|
- examples/v201409/misc/create_ad_words_session_without_properties_file.rb
|
157
158
|
- examples/v201409/misc/get_all_images_and_videos.rb
|
158
159
|
- examples/v201409/misc/setup_oauth2.rb
|