google-adwords-api 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +4 -0
- data/README +2 -1
- data/examples/v201109/account_management/create_account.rb +2 -2
- data/examples/v201109/account_management/get_account_alerts.rb +3 -3
- data/examples/v201109/account_management/get_account_changes.rb +2 -2
- data/examples/v201109/account_management/get_account_hierarchy.rb +2 -2
- data/examples/v201109/account_management/get_client_customer_id.rb +6 -8
- data/examples/v201109/account_management/get_client_unit_usage.rb +6 -7
- data/examples/v201109/basic_operations/add_ad_groups.rb +111 -0
- data/examples/v201109/basic_operations/add_campaigns.rb +125 -0
- data/examples/v201109/basic_operations/add_keywords.rb +16 -11
- data/examples/v201109/basic_operations/add_text_ads.rb +23 -19
- data/examples/v201109/basic_operations/delete_ad.rb +7 -7
- data/examples/v201109/basic_operations/delete_ad_group.rb +7 -7
- data/examples/v201109/basic_operations/delete_campaign.rb +7 -7
- data/examples/v201109/basic_operations/delete_keyword.rb +7 -7
- data/examples/v201109/basic_operations/get_ad_groups.rb +7 -7
- data/examples/v201109/basic_operations/get_campaigns.rb +3 -3
- data/examples/v201109/basic_operations/get_keywords.rb +7 -7
- data/examples/v201109/basic_operations/get_text_ads.rb +7 -7
- data/examples/v201109/basic_operations/pause_ad.rb +7 -7
- data/examples/v201109/basic_operations/update_ad_group.rb +6 -6
- data/examples/v201109/basic_operations/update_campaign.rb +6 -6
- data/examples/v201109/basic_operations/update_keyword.rb +7 -7
- data/examples/v201109/campaign_management/add_experiment.rb +14 -9
- data/examples/v201109/campaign_management/add_keywords_in_bulk.rb +5 -5
- data/examples/v201109/campaign_management/add_location_extension.rb +13 -7
- data/examples/v201109/campaign_management/add_location_extension_override.rb +7 -7
- data/examples/v201109/campaign_management/get_all_disapproved_ads.rb +6 -6
- data/examples/v201109/campaign_management/promote_experiment.rb +5 -6
- data/examples/v201109/campaign_management/set_ad_parameters.rb +8 -8
- data/examples/v201109/campaign_management/validate_text_ad.rb +7 -9
- data/examples/v201109/error_handling/handle_captcha_challenge.rb +3 -4
- data/examples/v201109/error_handling/handle_partial_failures.rb +5 -6
- data/examples/v201109/error_handling/handle_policy_violation_error.rb +5 -6
- data/examples/v201109/error_handling/handle_two_factor_authorization_error.rb +2 -2
- data/examples/v201109/misc/get_all_images_and_videos.rb +3 -3
- data/examples/v201109/misc/upload_image.rb +2 -2
- data/examples/v201109/misc/use_oauth.rb +3 -3
- data/examples/v201109/optimization/estimate_keyword_traffic.rb +2 -2
- data/examples/v201109/optimization/get_keyword_bid_simulations.rb +6 -7
- data/examples/v201109/optimization/get_keyword_ideas.rb +6 -7
- data/examples/v201109/optimization/get_placement_ideas.rb +6 -7
- data/examples/v201109/remarketing/add_audience.rb +5 -3
- data/examples/v201109/remarketing/add_conversion_tracker.rb +12 -3
- data/examples/v201109/reporting/download_criteria_report.rb +7 -8
- data/examples/v201109/reporting/download_defined_report.rb +6 -7
- data/examples/v201109/reporting/get_campaign_stats.rb +105 -0
- data/examples/v201109/reporting/get_defined_reports.rb +2 -2
- data/examples/v201109/reporting/get_report_fields.rb +6 -7
- data/examples/v201109/reporting/parallel_report_download.rb +8 -8
- data/examples/v201109/targeting/add_campaign_targeting_criteria.rb +5 -6
- data/examples/v201109/targeting/get_campaign_targeting_criteria.rb +7 -8
- data/examples/v201109/targeting/get_targetable_languages_and_carriers.rb +2 -2
- data/examples/v201109/targeting/lookup_location.rb +2 -2
- data/lib/adwords_api/version.rb +1 -1
- data/test/examples/v201109/test_account_management.rb +60 -0
- data/test/examples/v201109/test_basic_operations.rb +172 -0
- data/test/examples/v201109/test_campaign_management.rb +116 -0
- data/test/examples/v201109/test_error_handling.rb +63 -0
- data/test/examples/v201109/test_misc.rb +45 -0
- data/test/examples/v201109/test_optimization.rb +63 -0
- data/test/examples/v201109/test_remarketing.rb +39 -0
- data/test/examples/v201109/test_reporting.rb +89 -0
- data/test/examples/v201109/test_targeting.rb +60 -0
- data/test/examples/v201109/utils.rb +239 -0
- data/test/suite_exampletests.rb +31 -0
- metadata +18 -6
- data/examples/v201109/basic_operations/add_ad_group.rb +0 -89
- data/examples/v201109/basic_operations/add_campaign.rb +0 -99
@@ -25,9 +25,7 @@
|
|
25
25
|
|
26
26
|
require 'adwords_api'
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
def update_keyword()
|
28
|
+
def update_keyword(ad_group_id, criterion_id)
|
31
29
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
32
30
|
# when called without parameters.
|
33
31
|
adwords = AdwordsApi::Api.new
|
@@ -39,9 +37,6 @@ def update_keyword()
|
|
39
37
|
ad_group_criterion_srv =
|
40
38
|
adwords.service(:AdGroupCriterionService, API_VERSION)
|
41
39
|
|
42
|
-
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
43
|
-
criterion_id = 'INSERT_CRITERION_ID_HERE'.to_i
|
44
|
-
|
45
40
|
# Prepare for updating a keyword.
|
46
41
|
operation = {
|
47
42
|
:operator => 'SET',
|
@@ -78,8 +73,13 @@ def update_keyword()
|
|
78
73
|
end
|
79
74
|
|
80
75
|
if __FILE__ == $0
|
76
|
+
API_VERSION = :v201109
|
77
|
+
|
81
78
|
begin
|
82
|
-
|
79
|
+
# IDs of a criterion to update and its ad group.
|
80
|
+
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
81
|
+
criterion_id = 'INSERT_CRITERION_ID_HERE'.to_i
|
82
|
+
update_keyword(ad_group_id, criterion_id)
|
83
83
|
|
84
84
|
# HTTP errors.
|
85
85
|
rescue AdsCommon::Errors::HttpError => e
|
@@ -27,10 +27,9 @@
|
|
27
27
|
# Tags: ExperimentService.mutate
|
28
28
|
|
29
29
|
require 'adwords_api'
|
30
|
+
require 'date'
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
def add_experiment()
|
32
|
+
def add_experiment(campaign_id, ad_group_id, criterion_id)
|
34
33
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
35
34
|
# when called without parameters.
|
36
35
|
adwords = AdwordsApi::Api.new
|
@@ -44,10 +43,6 @@ def add_experiment()
|
|
44
43
|
ad_group_criterion_srv =
|
45
44
|
adwords.service(:AdGroupCriterionService, API_VERSION)
|
46
45
|
|
47
|
-
campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
|
48
|
-
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
49
|
-
criterion_id = 'INSERT_CRITERION_ID_HERE'.to_i
|
50
|
-
|
51
46
|
# Prepare for adding experiment.
|
52
47
|
operation = {
|
53
48
|
:operator => 'ADD',
|
@@ -55,7 +50,11 @@ def add_experiment()
|
|
55
50
|
:campaign_id => campaign_id,
|
56
51
|
:name => "Interplanetary Experiment #%d" % (Time.new.to_f * 1000).to_i,
|
57
52
|
:query_percentage => 10,
|
58
|
-
:start_date_time => Time.now.strftime('%Y%m%d %H%M%S')
|
53
|
+
:start_date_time => Time.now.strftime('%Y%m%d %H%M%S'),
|
54
|
+
# Optional fields:
|
55
|
+
:status => 'ACTIVE',
|
56
|
+
:end_date_time =>
|
57
|
+
DateTime.parse((Date.today + 30).to_s).strftime('%Y%m%d %H%M%S')
|
59
58
|
}
|
60
59
|
}
|
61
60
|
|
@@ -132,8 +131,14 @@ def add_experiment()
|
|
132
131
|
end
|
133
132
|
|
134
133
|
if __FILE__ == $0
|
134
|
+
API_VERSION = :v201109
|
135
|
+
|
135
136
|
begin
|
136
|
-
|
137
|
+
# IDs of the required objects.
|
138
|
+
campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
|
139
|
+
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
140
|
+
criterion_id = 'INSERT_CRITERION_ID_HERE'.to_i
|
141
|
+
add_experiment(campaign_id, ad_group_id, criterion_id)
|
137
142
|
|
138
143
|
# HTTP errors.
|
139
144
|
rescue AdsCommon::Errors::HttpError => e
|
@@ -26,11 +26,6 @@
|
|
26
26
|
|
27
27
|
require 'adwords_api'
|
28
28
|
|
29
|
-
API_VERSION = :v201109
|
30
|
-
RETRY_INTERVAL = 30
|
31
|
-
RETRIES_COUNT = 30
|
32
|
-
KEYWORD_NUMBER = 100
|
33
|
-
|
34
29
|
def add_keywords_in_bulk()
|
35
30
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
36
31
|
# when called without parameters.
|
@@ -129,6 +124,11 @@ def add_keywords_in_bulk()
|
|
129
124
|
end
|
130
125
|
|
131
126
|
if __FILE__ == $0
|
127
|
+
API_VERSION = :v201109
|
128
|
+
RETRY_INTERVAL = 30
|
129
|
+
RETRIES_COUNT = 30
|
130
|
+
KEYWORD_NUMBER = 100
|
131
|
+
|
132
132
|
begin
|
133
133
|
add_keywords_in_bulk()
|
134
134
|
|
@@ -25,9 +25,7 @@
|
|
25
25
|
|
26
26
|
require 'adwords_api'
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
def add_location_extension()
|
28
|
+
def add_location_extension(campaign_id)
|
31
29
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
32
30
|
# when called without parameters.
|
33
31
|
adwords = AdwordsApi::Api.new
|
@@ -40,8 +38,6 @@ def add_location_extension()
|
|
40
38
|
adwords.service(:CampaignAdExtensionService, API_VERSION)
|
41
39
|
geo_location_srv = adwords.service(:GeoLocationService, API_VERSION)
|
42
40
|
|
43
|
-
campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
|
44
|
-
|
45
41
|
selector = {
|
46
42
|
:addresses => [
|
47
43
|
{
|
@@ -78,7 +74,13 @@ def add_location_extension()
|
|
78
74
|
:address => location[:address],
|
79
75
|
:geo_point => location[:geo_point],
|
80
76
|
:encoded_location => location[:encoded_location],
|
81
|
-
:source => 'ADWORDS_FRONTEND'
|
77
|
+
:source => 'ADWORDS_FRONTEND',
|
78
|
+
# Optional fields:
|
79
|
+
#:company_name => 'ACME Inc.',
|
80
|
+
#:phone_number => '+1-650-253-0000'
|
81
|
+
}
|
82
|
+
}
|
83
|
+
}
|
82
84
|
end
|
83
85
|
|
84
86
|
# Add location ad extensions.
|
@@ -90,8 +92,12 @@ def add_location_extension()
|
|
90
92
|
end
|
91
93
|
|
92
94
|
if __FILE__ == $0
|
95
|
+
API_VERSION = :v201109
|
96
|
+
|
93
97
|
begin
|
94
|
-
|
98
|
+
# ID of campaign to add location extension to.
|
99
|
+
campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
|
100
|
+
add_location_extension(campaign_id)
|
95
101
|
|
96
102
|
# HTTP errors.
|
97
103
|
rescue AdsCommon::Errors::HttpError => e
|
@@ -26,9 +26,7 @@
|
|
26
26
|
|
27
27
|
require 'adwords_api'
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
def add_location_extension_override()
|
29
|
+
def add_location_extension_override(ad_id, location_extension_id)
|
32
30
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
33
31
|
# when called without parameters.
|
34
32
|
adwords = AdwordsApi::Api.new
|
@@ -40,9 +38,6 @@ def add_location_extension_override()
|
|
40
38
|
ad_ext_override_srv =
|
41
39
|
adwords.service(:AdExtensionOverrideService, API_VERSION)
|
42
40
|
|
43
|
-
ad_id = 'INSERT_AD_ID_HERE'.to_i
|
44
|
-
location_extension_id = 'INSERT_LOCATION_EXTENSION_ID_HERE'.to_i
|
45
|
-
|
46
41
|
# Create operation.
|
47
42
|
operation = {
|
48
43
|
:operator => 'ADD',
|
@@ -62,8 +57,13 @@ def add_location_extension_override()
|
|
62
57
|
end
|
63
58
|
|
64
59
|
if __FILE__ == $0
|
60
|
+
API_VERSION = :v201109
|
61
|
+
|
65
62
|
begin
|
66
|
-
|
63
|
+
# IDs of ad and location extension override to add.
|
64
|
+
ad_id = 'INSERT_AD_ID_HERE'.to_i
|
65
|
+
location_extension_id = 'INSERT_LOCATION_EXTENSION_ID_HERE'.to_i
|
66
|
+
add_location_extension_override(ad_id, location_extension_id)
|
67
67
|
|
68
68
|
# HTTP errors.
|
69
69
|
rescue AdsCommon::Errors::HttpError => e
|
@@ -25,9 +25,7 @@
|
|
25
25
|
|
26
26
|
require 'adwords_api'
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
def get_all_disapproved_ads()
|
28
|
+
def get_all_disapproved_ads(ad_group_id)
|
31
29
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
32
30
|
# when called without parameters.
|
33
31
|
adwords = AdwordsApi::Api.new
|
@@ -38,8 +36,6 @@ def get_all_disapproved_ads()
|
|
38
36
|
|
39
37
|
ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
|
40
38
|
|
41
|
-
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
42
|
-
|
43
39
|
# Get all the disapproved ads for this campaign.
|
44
40
|
selector = {
|
45
41
|
:fields => ['Id', 'DisapprovalReasons'],
|
@@ -72,8 +68,12 @@ def get_all_disapproved_ads()
|
|
72
68
|
end
|
73
69
|
|
74
70
|
if __FILE__ == $0
|
71
|
+
API_VERSION = :v201109
|
72
|
+
|
75
73
|
begin
|
76
|
-
|
74
|
+
# ID of an ad group to get disapproved ads for.
|
75
|
+
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
76
|
+
get_all_disapproved_ads(ad_group_id)
|
77
77
|
|
78
78
|
# HTTP errors.
|
79
79
|
rescue AdsCommon::Errors::HttpError => e
|
@@ -25,9 +25,7 @@
|
|
25
25
|
|
26
26
|
require 'adwords_api'
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
def promote_experiment()
|
28
|
+
def promote_experiment(experiment_id)
|
31
29
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
32
30
|
# when called without parameters.
|
33
31
|
adwords = AdwordsApi::Api.new
|
@@ -38,8 +36,6 @@ def promote_experiment()
|
|
38
36
|
|
39
37
|
experiment_srv = adwords.service(:ExperimentService, API_VERSION)
|
40
38
|
|
41
|
-
experiment_id = 'INSERT_EXPERIMENT_ID_HERE'.to_i
|
42
|
-
|
43
39
|
# Prepare for updating experiment.
|
44
40
|
operation = {
|
45
41
|
:operator => 'SET',
|
@@ -57,8 +53,11 @@ def promote_experiment()
|
|
57
53
|
end
|
58
54
|
|
59
55
|
if __FILE__ == $0
|
56
|
+
API_VERSION = :v201109
|
57
|
+
|
60
58
|
begin
|
61
|
-
|
59
|
+
experiment_id = 'INSERT_EXPERIMENT_ID_HERE'.to_i
|
60
|
+
promote_experiment(experiment_id)
|
62
61
|
|
63
62
|
# HTTP errors.
|
64
63
|
rescue AdsCommon::Errors::HttpError => e
|
@@ -25,9 +25,7 @@
|
|
25
25
|
|
26
26
|
require 'adwords_api'
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
def set_ad_parameters()
|
28
|
+
def set_ad_parameters(ad_group_id, criterion_id)
|
31
29
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
32
30
|
# when called without parameters.
|
33
31
|
adwords = AdwordsApi::Api.new
|
@@ -39,9 +37,6 @@ def set_ad_parameters()
|
|
39
37
|
ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
|
40
38
|
ad_param_srv = adwords.service(:AdParamService, API_VERSION)
|
41
39
|
|
42
|
-
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
43
|
-
criterion_id = 'INSERT_CRITERION_ID_HERE'.to_i
|
44
|
-
|
45
40
|
# Prepare for adding ad.
|
46
41
|
ad_operation = {
|
47
42
|
:operator => 'ADD',
|
@@ -64,7 +59,7 @@ def set_ad_parameters()
|
|
64
59
|
# Add ad.
|
65
60
|
response = ad_group_ad_srv.mutate([ad_operation])
|
66
61
|
ad = response[:value].first[:ad]
|
67
|
-
puts
|
62
|
+
puts "Text ad ID %d was successfully added." % ad[:id]
|
68
63
|
|
69
64
|
# Prepare for setting ad parameters.
|
70
65
|
price_operation = {
|
@@ -93,8 +88,13 @@ def set_ad_parameters()
|
|
93
88
|
end
|
94
89
|
|
95
90
|
if __FILE__ == $0
|
91
|
+
API_VERSION = :v201109
|
92
|
+
|
96
93
|
begin
|
97
|
-
|
94
|
+
# IDs of ad group and criterion to set ad parameter for.
|
95
|
+
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
96
|
+
criterion_id = 'INSERT_CRITERION_ID_HERE'.to_i
|
97
|
+
set_ad_parameters(ad_group_id, criterion_id)
|
98
98
|
|
99
99
|
# HTTP errors.
|
100
100
|
rescue AdsCommon::Errors::HttpError => e
|
@@ -25,9 +25,7 @@
|
|
25
25
|
|
26
26
|
require 'adwords_api'
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
def validate_text_ad()
|
28
|
+
def validate_text_ad(ad_group_id)
|
31
29
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
32
30
|
# when called without parameters.
|
33
31
|
adwords = AdwordsApi::Api.new
|
@@ -38,8 +36,6 @@ def validate_text_ad()
|
|
38
36
|
|
39
37
|
ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
|
40
38
|
|
41
|
-
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
42
|
-
|
43
39
|
# Enable 'validate only' option.
|
44
40
|
adwords.validate_only = true
|
45
41
|
|
@@ -77,18 +73,20 @@ def validate_text_ad()
|
|
77
73
|
response = ad_group_ad_srv.mutate([operation])
|
78
74
|
if response and response[:value]
|
79
75
|
ad = response[:value].first
|
80
|
-
|
81
|
-
[campaign[:name], campaign[:id], campaign[:status]]
|
76
|
+
raise StandardError, ("Unexpected ad creation! Name '%s', ID %d and " +
|
77
|
+
"status '%s'.") % [campaign[:name], campaign[:id], campaign[:status]]
|
82
78
|
end
|
83
79
|
rescue AdwordsApi::Errors::ApiException => e
|
84
80
|
puts "Validation correctly failed with an exception: %s" % e.class
|
85
|
-
raise e
|
86
81
|
end
|
87
82
|
end
|
88
83
|
|
89
84
|
if __FILE__ == $0
|
85
|
+
API_VERSION = :v201109
|
86
|
+
|
90
87
|
begin
|
91
|
-
|
88
|
+
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
89
|
+
validate_text_ad(ad_group_id)
|
92
90
|
|
93
91
|
# HTTP errors.
|
94
92
|
rescue AdsCommon::Errors::HttpError => e
|
@@ -25,10 +25,6 @@
|
|
25
25
|
|
26
26
|
require 'adwords_api'
|
27
27
|
|
28
|
-
API_VERSION = :v201109
|
29
|
-
|
30
|
-
MAX_RETRIES = 500
|
31
|
-
|
32
28
|
def handle_captcha_challenge()
|
33
29
|
# Initialize token variable.
|
34
30
|
logintoken = nil
|
@@ -73,6 +69,9 @@ def handle_captcha_challenge()
|
|
73
69
|
end
|
74
70
|
|
75
71
|
if __FILE__ == $0
|
72
|
+
API_VERSION = :v201109
|
73
|
+
MAX_RETRIES = 500
|
74
|
+
|
76
75
|
begin
|
77
76
|
handle_captcha_challenge()
|
78
77
|
|
@@ -25,9 +25,7 @@
|
|
25
25
|
require 'adwords_api'
|
26
26
|
require 'adwords_api/utils'
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
def handle_partial_failures()
|
28
|
+
def handle_partial_failures(ad_group_id)
|
31
29
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
32
30
|
# when called without parameters.
|
33
31
|
adwords = AdwordsApi::Api.new
|
@@ -39,8 +37,6 @@ def handle_partial_failures()
|
|
39
37
|
ad_group_criterion_srv =
|
40
38
|
adwords.service(:AdGroupCriterionService, API_VERSION)
|
41
39
|
|
42
|
-
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
43
|
-
|
44
40
|
# Set partial failures flag.
|
45
41
|
adwords.partial_failure = true
|
46
42
|
|
@@ -106,8 +102,11 @@ def handle_partial_failures()
|
|
106
102
|
end
|
107
103
|
|
108
104
|
if __FILE__ == $0
|
105
|
+
API_VERSION = :v201109
|
106
|
+
|
109
107
|
begin
|
110
|
-
|
108
|
+
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
109
|
+
handle_partial_failures(ad_group_id)
|
111
110
|
|
112
111
|
# HTTP errors.
|
113
112
|
rescue AdsCommon::Errors::HttpError => e
|
@@ -26,9 +26,7 @@
|
|
26
26
|
require 'adwords_api'
|
27
27
|
require 'adwords_api/utils'
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
def handle_policy_violation_error()
|
29
|
+
def handle_policy_violation_error(ad_group_id)
|
32
30
|
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
33
31
|
# when called without parameters.
|
34
32
|
adwords = AdwordsApi::Api.new
|
@@ -39,8 +37,6 @@ def handle_policy_violation_error()
|
|
39
37
|
|
40
38
|
ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
|
41
39
|
|
42
|
-
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
43
|
-
|
44
40
|
# Create text ad.
|
45
41
|
text_ad_operation = {
|
46
42
|
:operator => 'ADD',
|
@@ -117,8 +113,11 @@ def handle_policy_violation_error()
|
|
117
113
|
end
|
118
114
|
|
119
115
|
if __FILE__ == $0
|
116
|
+
API_VERSION = :v201109
|
117
|
+
|
120
118
|
begin
|
121
|
-
|
119
|
+
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
120
|
+
handle_policy_violation_error(ad_group_id)
|
122
121
|
|
123
122
|
# HTTP errors.
|
124
123
|
rescue AdsCommon::Errors::HttpError => e
|
@@ -22,8 +22,6 @@
|
|
22
22
|
|
23
23
|
require 'adwords_api'
|
24
24
|
|
25
|
-
API_VERSION = :v201109
|
26
|
-
|
27
25
|
def handle_two_factor_authorization_error()
|
28
26
|
# Set up credentials with an account that has 2Factor enabled.
|
29
27
|
config = {
|
@@ -66,6 +64,8 @@ def handle_two_factor_authorization_error()
|
|
66
64
|
end
|
67
65
|
|
68
66
|
if __FILE__ == $0
|
67
|
+
API_VERSION = :v201109
|
68
|
+
|
69
69
|
begin
|
70
70
|
handle_two_factor_authorization_error()
|
71
71
|
|