google-adwords-api 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. data/ChangeLog +3 -0
  2. data/README +3 -3
  3. data/examples/v201206/basic_operations/add_campaigns.rb +7 -2
  4. data/examples/v201209/account_management/create_account.rb +84 -0
  5. data/examples/v201209/account_management/get_account_alerts.rb +111 -0
  6. data/examples/v201209/account_management/get_account_changes.rb +137 -0
  7. data/examples/v201209/account_management/get_account_hierarchy.rb +92 -0
  8. data/examples/v201209/account_management/get_client_customer_id.rb +85 -0
  9. data/examples/v201209/account_management/get_client_unit_usage.rb +87 -0
  10. data/examples/v201209/basic_operations/add_ad_groups.rb +136 -0
  11. data/examples/v201209/basic_operations/add_campaigns.rb +159 -0
  12. data/examples/v201209/basic_operations/add_keywords.rb +108 -0
  13. data/examples/v201209/basic_operations/add_text_ads.rb +105 -0
  14. data/examples/v201209/basic_operations/delete_ad.rb +85 -0
  15. data/examples/v201209/basic_operations/delete_ad_group.rb +102 -0
  16. data/examples/v201209/basic_operations/delete_campaign.rb +103 -0
  17. data/examples/v201209/basic_operations/delete_keyword.rb +90 -0
  18. data/examples/v201209/basic_operations/get_ad_groups.rb +98 -0
  19. data/examples/v201209/basic_operations/get_campaigns.rb +93 -0
  20. data/examples/v201209/basic_operations/get_campaigns_with_awql.rb +85 -0
  21. data/examples/v201209/basic_operations/get_keywords.rb +104 -0
  22. data/examples/v201209/basic_operations/get_text_ads.rb +106 -0
  23. data/examples/v201209/basic_operations/pause_ad.rb +84 -0
  24. data/examples/v201209/basic_operations/update_ad_group.rb +81 -0
  25. data/examples/v201209/basic_operations/update_campaign.rb +82 -0
  26. data/examples/v201209/basic_operations/update_keyword.rb +99 -0
  27. data/examples/v201209/campaign_management/add_experiment.rb +158 -0
  28. data/examples/v201209/campaign_management/add_keywords_in_bulk.rb +150 -0
  29. data/examples/v201209/campaign_management/add_location_extension.rb +117 -0
  30. data/examples/v201209/campaign_management/add_location_extension_override.rb +83 -0
  31. data/examples/v201209/campaign_management/get_all_disapproved_ads.rb +93 -0
  32. data/examples/v201209/campaign_management/get_all_disapproved_ads_with_awql.rb +84 -0
  33. data/examples/v201209/campaign_management/promote_experiment.rb +77 -0
  34. data/examples/v201209/campaign_management/set_ad_parameters.rb +114 -0
  35. data/examples/v201209/campaign_management/validate_text_ad.rb +106 -0
  36. data/examples/v201209/error_handling/handle_captcha_challenge.rb +93 -0
  37. data/examples/v201209/error_handling/handle_partial_failures.rb +126 -0
  38. data/examples/v201209/error_handling/handle_policy_violation_error.rb +137 -0
  39. data/examples/v201209/error_handling/handle_two_factor_authorization_error.rb +87 -0
  40. data/examples/v201209/misc/get_all_images_and_videos.rb +100 -0
  41. data/examples/v201209/misc/upload_image.rb +89 -0
  42. data/examples/v201209/misc/use_oauth.rb +100 -0
  43. data/examples/v201209/misc/use_oauth2.rb +97 -0
  44. data/examples/v201209/optimization/estimate_keyword_traffic.rb +129 -0
  45. data/examples/v201209/optimization/get_keyword_bid_simulations.rb +92 -0
  46. data/examples/v201209/optimization/get_keyword_ideas.rb +114 -0
  47. data/examples/v201209/optimization/get_placement_ideas.rb +104 -0
  48. data/examples/v201209/remarketing/add_audience.rb +115 -0
  49. data/examples/v201209/remarketing/add_conversion_tracker.rb +97 -0
  50. data/examples/v201209/reporting/download_criteria_report.rb +79 -0
  51. data/examples/v201209/reporting/download_criteria_report_with_awql.rb +78 -0
  52. data/examples/v201209/reporting/get_campaign_stats.rb +105 -0
  53. data/examples/v201209/reporting/get_report_fields.rb +71 -0
  54. data/examples/v201209/reporting/parallel_report_download.rb +160 -0
  55. data/examples/v201209/targeting/add_campaign_targeting_criteria.rb +118 -0
  56. data/examples/v201209/targeting/add_demographic_targeting_criteria.rb +108 -0
  57. data/examples/v201209/targeting/get_campaign_targeting_criteria.rb +102 -0
  58. data/examples/v201209/targeting/get_targetable_languages_and_carriers.rb +86 -0
  59. data/examples/v201209/targeting/lookup_location.rb +104 -0
  60. data/lib/adwords_api/api_config.rb +64 -5
  61. data/lib/adwords_api/errors.rb +15 -0
  62. data/lib/adwords_api/report_utils.rb +30 -11
  63. data/lib/adwords_api/v201209/ad_extension_override_service.rb +38 -0
  64. data/lib/adwords_api/v201209/ad_extension_override_service_registry.rb +46 -0
  65. data/lib/adwords_api/v201209/ad_group_ad_service.rb +42 -0
  66. data/lib/adwords_api/v201209/ad_group_ad_service_registry.rb +46 -0
  67. data/lib/adwords_api/v201209/ad_group_criterion_service.rb +42 -0
  68. data/lib/adwords_api/v201209/ad_group_criterion_service_registry.rb +46 -0
  69. data/lib/adwords_api/v201209/ad_group_service.rb +42 -0
  70. data/lib/adwords_api/v201209/ad_group_service_registry.rb +46 -0
  71. data/lib/adwords_api/v201209/ad_param_service.rb +38 -0
  72. data/lib/adwords_api/v201209/ad_param_service_registry.rb +46 -0
  73. data/lib/adwords_api/v201209/alert_service.rb +34 -0
  74. data/lib/adwords_api/v201209/alert_service_registry.rb +46 -0
  75. data/lib/adwords_api/v201209/budget_order_service.rb +42 -0
  76. data/lib/adwords_api/v201209/budget_order_service_registry.rb +46 -0
  77. data/lib/adwords_api/v201209/budget_service.rb +38 -0
  78. data/lib/adwords_api/v201209/budget_service_registry.rb +46 -0
  79. data/lib/adwords_api/v201209/campaign_ad_extension_service.rb +38 -0
  80. data/lib/adwords_api/v201209/campaign_ad_extension_service_registry.rb +46 -0
  81. data/lib/adwords_api/v201209/campaign_criterion_service.rb +42 -0
  82. data/lib/adwords_api/v201209/campaign_criterion_service_registry.rb +46 -0
  83. data/lib/adwords_api/v201209/campaign_service.rb +42 -0
  84. data/lib/adwords_api/v201209/campaign_service_registry.rb +46 -0
  85. data/lib/adwords_api/v201209/constant_data_service.rb +62 -0
  86. data/lib/adwords_api/v201209/constant_data_service_registry.rb +46 -0
  87. data/lib/adwords_api/v201209/conversion_tracker_service.rb +38 -0
  88. data/lib/adwords_api/v201209/conversion_tracker_service_registry.rb +46 -0
  89. data/lib/adwords_api/v201209/customer_service.rb +34 -0
  90. data/lib/adwords_api/v201209/customer_service_registry.rb +46 -0
  91. data/lib/adwords_api/v201209/customer_sync_service.rb +34 -0
  92. data/lib/adwords_api/v201209/customer_sync_service_registry.rb +47 -0
  93. data/lib/adwords_api/v201209/data_service.rb +38 -0
  94. data/lib/adwords_api/v201209/data_service_registry.rb +46 -0
  95. data/lib/adwords_api/v201209/experiment_service.rb +38 -0
  96. data/lib/adwords_api/v201209/experiment_service_registry.rb +46 -0
  97. data/lib/adwords_api/v201209/geo_location_service.rb +34 -0
  98. data/lib/adwords_api/v201209/geo_location_service_registry.rb +46 -0
  99. data/lib/adwords_api/v201209/info_service.rb +34 -0
  100. data/lib/adwords_api/v201209/info_service_registry.rb +46 -0
  101. data/lib/adwords_api/v201209/location_criterion_service.rb +34 -0
  102. data/lib/adwords_api/v201209/location_criterion_service_registry.rb +46 -0
  103. data/lib/adwords_api/v201209/managed_customer_service.rb +38 -0
  104. data/lib/adwords_api/v201209/managed_customer_service_registry.rb +46 -0
  105. data/lib/adwords_api/v201209/media_service.rb +38 -0
  106. data/lib/adwords_api/v201209/media_service_registry.rb +46 -0
  107. data/lib/adwords_api/v201209/mutate_job_service.rb +42 -0
  108. data/lib/adwords_api/v201209/mutate_job_service_registry.rb +46 -0
  109. data/lib/adwords_api/v201209/report_definition_service.rb +34 -0
  110. data/lib/adwords_api/v201209/report_definition_service_registry.rb +46 -0
  111. data/lib/adwords_api/v201209/targeting_idea_service.rb +38 -0
  112. data/lib/adwords_api/v201209/targeting_idea_service_registry.rb +46 -0
  113. data/lib/adwords_api/v201209/traffic_estimator_service.rb +34 -0
  114. data/lib/adwords_api/v201209/traffic_estimator_service_registry.rb +46 -0
  115. data/lib/adwords_api/v201209/user_list_service.rb +38 -0
  116. data/lib/adwords_api/v201209/user_list_service_registry.rb +46 -0
  117. data/lib/adwords_api/version.rb +1 -1
  118. data/test/adwords_api/test_report_utils.rb +94 -6
  119. data/test/examples/v201209/test_account_management.rb +60 -0
  120. data/test/examples/v201209/test_basic_operations.rb +177 -0
  121. data/test/examples/v201209/test_campaign_management.rb +124 -0
  122. data/test/examples/v201209/test_error_handling.rb +63 -0
  123. data/test/examples/v201209/test_misc.rb +45 -0
  124. data/test/examples/v201209/test_optimization.rb +63 -0
  125. data/test/examples/v201209/test_remarketing.rb +39 -0
  126. data/test/examples/v201209/test_reporting.rb +84 -0
  127. data/test/examples/v201209/test_targeting.rb +60 -0
  128. data/test/examples/v201209/utils.rb +238 -0
  129. data/test/suite_exampletests_v201209.rb +37 -0
  130. metadata +123 -2
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
+ #
6
+ # Copyright:: Copyright 2011, 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 example illustrates how to find a client customer ID for a client email.
22
+ # We recommend to use this script as a one off to convert your identifiers to
23
+ # IDs and store them for future use.
24
+ #
25
+ # Tags: InfoService.get
26
+
27
+ require 'adwords_api'
28
+ require 'adwords_api/utils'
29
+
30
+ def get_client_customer_id(client_email)
31
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
32
+ # when called without parameters.
33
+ adwords = AdwordsApi::Api.new
34
+
35
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
36
+ # the configuration file or provide your own logger:
37
+ # adwords.logger = Logger.new('adwords_xml.log')
38
+
39
+ info_srv = adwords.service(:InfoService, API_VERSION)
40
+
41
+ today = Time.new.strftime('%Y%m%d')
42
+ selector = {
43
+ :client_emails => [client_email],
44
+ :api_usage_type => 'UNIT_COUNT_FOR_CLIENTS',
45
+ :include_sub_accounts => true,
46
+ :date_range => {:min => today, :max => today}
47
+ }
48
+
49
+ # Get the information for client email address.
50
+ info = adwords.use_mcc() {info_srv.get(selector)}
51
+
52
+ if info and info[:api_usage_records]
53
+ api_usage_records = info[:api_usage_records]
54
+ api_usage_records.each do |record|
55
+ puts "Found record with client email '%s' and ID %s." %
56
+ [record[:client_email],
57
+ AdwordsApi::Utils.format_id(record[:client_customer_id])]
58
+ end
59
+ end
60
+ end
61
+
62
+ if __FILE__ == $0
63
+ API_VERSION = :v201209
64
+
65
+ begin
66
+ # Email address to find ID for.
67
+ client_email = 'INSERT_EMAIL_ADDRESS_HERE'
68
+ get_client_customer_id(client_email)
69
+
70
+ # HTTP errors.
71
+ rescue AdsCommon::Errors::HttpError => e
72
+ puts "HTTP Error: %s" % e
73
+
74
+ # API errors.
75
+ rescue AdwordsApi::Errors::ApiException => e
76
+ puts "Message: %s" % e.message
77
+ puts 'Errors:'
78
+ e.errors.each_with_index do |error, index|
79
+ puts "\tError [%d]:" % (index + 1)
80
+ error.each do |field, value|
81
+ puts "\t\t%s: %s" % [field, value]
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
+ #
6
+ # Copyright:: Copyright 2011, 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 example illustrates how to retrieve the number of API units usage for a
22
+ # client account for the current month.
23
+ #
24
+ # Tags: InfoService.get
25
+
26
+ require 'adwords_api'
27
+
28
+ def get_client_unit_usage(client_customer_id)
29
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
30
+ # when called without parameters.
31
+ adwords = AdwordsApi::Api.new
32
+
33
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
34
+ # the configuration file or provide your own logger:
35
+ # adwords.logger = Logger.new('adwords_xml.log')
36
+
37
+ info_srv = adwords.service(:InfoService, API_VERSION)
38
+
39
+ start_date = Time.now.strftime('%Y%m01')
40
+ end_date = Time.now.strftime('%Y%m%d')
41
+
42
+ selector = {
43
+ :api_usage_type => 'UNIT_COUNT_FOR_CLIENTS',
44
+ :client_customer_ids => [client_customer_id],
45
+ # Set to true to navigate your entire accounts tree.
46
+ :include_sub_accounts => 1,
47
+ :date_range => {
48
+ :min => start_date,
49
+ :max => end_date
50
+ }
51
+ }
52
+
53
+ # Force to use the MCC credentials.
54
+ adwords.use_mcc do
55
+ # Get the unit info.
56
+ info_srv.get(selector) do |header, response|
57
+ puts "Total number of units consumed from %s to %s is %d." %
58
+ [start_date, end_date, response[:cost]]
59
+ puts "Number of units consumed by this request is %d" % header[:units]
60
+ end
61
+ end
62
+ end
63
+
64
+ if __FILE__ == $0
65
+ API_VERSION = :v201209
66
+
67
+ begin
68
+ # Specify client customer ID for the account to get usage for.
69
+ client_customer_id = 'INSERT_CLIENT_CUSTOMER_ID_HERE'.to_i
70
+ get_client_unit_usage(client_customer_id)
71
+
72
+ # HTTP errors.
73
+ rescue AdsCommon::Errors::HttpError => e
74
+ puts "HTTP Error: %s" % e
75
+
76
+ # API errors.
77
+ rescue AdwordsApi::Errors::ApiException => e
78
+ puts "Message: %s" % e.message
79
+ puts 'Errors:'
80
+ e.errors.each_with_index do |error, index|
81
+ puts "\tError [%d]:" % (index + 1)
82
+ error.each do |field, value|
83
+ puts "\t\t%s: %s" % [field, value]
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
+ #
6
+ # Copyright:: Copyright 2011, 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 example illustrates how to create ad groups. To get a list of existing
22
+ # campaigns run get_campaigns.rb.
23
+ #
24
+ # Tags: AdGroupService.mutate
25
+
26
+ require 'adwords_api'
27
+
28
+ def add_ad_groups(campaign_id)
29
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
30
+ # when called without parameters.
31
+ adwords = AdwordsApi::Api.new
32
+
33
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
34
+ # the configuration file or provide your own logger:
35
+ # adwords.logger = Logger.new('adwords_xml.log')
36
+
37
+ ad_group_srv = adwords.service(:AdGroupService, API_VERSION)
38
+
39
+ ad_groups = [
40
+ {
41
+ :name => "Earth to Mars Cruises #%d" % (Time.new.to_f * 1000).to_i,
42
+ :status => 'ENABLED',
43
+ :campaign_id => campaign_id,
44
+ :bids => {
45
+ # The 'xsi_type' field allows you to specify the xsi:type of the object
46
+ # being created. It's only necessary when you must provide an explicit
47
+ # type that the client library can't infer.
48
+ :xsi_type => 'ManualCPCAdGroupBids',
49
+ :keyword_max_cpc => {
50
+ :amount => {
51
+ :micro_amount => 10000000
52
+ }
53
+ },
54
+ # Optional field.
55
+ :keyword_content_max_cpc => {:amount => {:micro_amount => 2000000}}
56
+ },
57
+ :settings => [
58
+ # Targetting restriction settings - these setting only affect serving
59
+ # for the Display Network.
60
+ {
61
+ :xsi_type => 'TargetingSetting',
62
+ :details => [
63
+ # Restricting to serve ads that match your ad group placements.
64
+ {
65
+ :xsi_type => 'TargetingSettingDetail',
66
+ :criterion_type_group => 'PLACEMENT',
67
+ :target_all => true
68
+ },
69
+ # Using your ad group verticals only for bidding.
70
+ {
71
+ :xsi_type => 'TargetingSettingDetail',
72
+ :criterion_type_group => 'VERTICAL',
73
+ :target_all => false
74
+ }
75
+ ]
76
+ }
77
+ ]
78
+ },
79
+ {
80
+ :name => 'Earth to Pluto Cruises #%d' % (Time.new.to_f * 1000).to_i,
81
+ :status => 'ENABLED',
82
+ :campaign_id => campaign_id,
83
+ :bids => {
84
+ # The 'xsi_type' field allows you to specify the xsi:type of the object
85
+ # being created. It's only necessary when you must provide an explicit
86
+ # type that the client library can't infer.
87
+ :xsi_type => 'ManualCPCAdGroupBids',
88
+ :keyword_max_cpc => {
89
+ :amount => {
90
+ :micro_amount => 10000000
91
+ }
92
+ }
93
+ }
94
+ }
95
+ ]
96
+
97
+ # Prepare operations for adding ad groups.
98
+ operations = ad_groups.map do |ad_group|
99
+ {:operator => 'ADD', :operand => ad_group}
100
+ end
101
+
102
+ # Add ad groups.
103
+ response = ad_group_srv.mutate(operations)
104
+ if response and response[:value]
105
+ response[:value].each do |ad_group|
106
+ puts "Ad group ID %d was successfully added." % ad_group[:id]
107
+ end
108
+ else
109
+ raise StandardError, 'No ad group was added'
110
+ end
111
+ end
112
+
113
+ if __FILE__ == $0
114
+ API_VERSION = :v201209
115
+
116
+ begin
117
+ # Campaign ID to add ad group to.
118
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
119
+ add_ad_groups(campaign_id)
120
+
121
+ # HTTP errors.
122
+ rescue AdsCommon::Errors::HttpError => e
123
+ puts "HTTP Error: %s" % e
124
+
125
+ # API errors.
126
+ rescue AdwordsApi::Errors::ApiException => e
127
+ puts "Message: %s" % e.message
128
+ puts 'Errors:'
129
+ e.errors.each_with_index do |error, index|
130
+ puts "\tError [%d]:" % (index + 1)
131
+ error.each do |field, value|
132
+ puts "\t\t%s: %s" % [field, value]
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
+ #
6
+ # Copyright:: Copyright 2011, 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 example illustrates how to create campaigns.
22
+ #
23
+ # Tags: CampaignService.mutate, BudgetService.mutate
24
+
25
+ require 'adwords_api'
26
+ require 'date'
27
+
28
+ def add_campaigns()
29
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
30
+ # when called without parameters.
31
+ adwords = AdwordsApi::Api.new
32
+
33
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
34
+ # the configuration file or provide your own logger:
35
+ # adwords.logger = Logger.new('adwords_xml.log')
36
+
37
+ budget_srv = adwords.service(:BudgetService, API_VERSION)
38
+ campaign_srv = adwords.service(:CampaignService, API_VERSION)
39
+
40
+ # Create a budget, which can be shared by multiple campaigns.
41
+ budget = {
42
+ :name => 'Interplanetary budget #%d' % (Time.new.to_f * 1000).to_i,
43
+ :amount => {:micro_amount => 50000000},
44
+ :delivery_method => 'STANDARD',
45
+ :period => 'DAILY'
46
+ }
47
+ budget_operation = {:operator => 'ADD', :operand => budget}
48
+
49
+ # Add budget.
50
+ return_budget = budget_srv.mutate([budget_operation])
51
+ budget_id = return_budget[:value].first[:budget_id]
52
+
53
+ # Create campaigns.
54
+ campaigns = [
55
+ {
56
+ :name => "Interplanetary Cruise #%d" % (Time.new.to_f * 1000).to_i,
57
+ :status => 'PAUSED',
58
+ :bidding_strategy => {
59
+ # The 'xsi_type' field allows you to specify the xsi:type of the object
60
+ # being created. It's only necessary when you must provide an explicit
61
+ # type that the client library can't infer.
62
+ :xsi_type => 'ManualCPC'
63
+ },
64
+ # Budget (required) - note only the budget ID is required.
65
+ :budget => {:budget_id => budget_id},
66
+ # Set the campaign network options to Search, Content and Search Network.
67
+ :network_setting => {
68
+ :target_google_search => true,
69
+ :target_search_network => true,
70
+ :target_content_network => true
71
+ },
72
+ # Optional fields:
73
+ :start_date =>
74
+ DateTime.parse((Date.today + 1).to_s).strftime('%Y%m%d'),
75
+ :ad_serving_optimization_status => 'ROTATE',
76
+ :settings => [
77
+ # Display network targeting settings (optional).
78
+ # It can only be enabled, shown only for demonstration purposes.
79
+ # If not set this setting is enabled by default on ADD operations.
80
+ {
81
+ :xsi_type => 'TargetRestrictSetting',
82
+ :use_ad_group => true
83
+ },
84
+ {
85
+ :xsi_type => 'GeoTargetTypeSetting',
86
+ :positive_geo_target_type => 'DONT_CARE',
87
+ :negative_geo_target_type => 'DONT_CARE'
88
+ },
89
+ {
90
+ :xsi_type => 'KeywordMatchSetting',
91
+ :opt_in => true
92
+ }
93
+ ],
94
+ :frequency_cap => {
95
+ :impressions => '5',
96
+ :time_unit => 'DAY',
97
+ :level => 'ADGROUP'
98
+ }
99
+ },
100
+ {
101
+ :name => "Interplanetary Cruise banner #%d" % (Time.new.to_f * 1000).to_i,
102
+ :status => 'PAUSED',
103
+ :bidding_strategy => {
104
+ :xsi_type => 'ManualCPM'
105
+ },
106
+ :budget => {:budget_id => budget_id},
107
+ :settings => [
108
+ {
109
+ :xsi_type => 'KeywordMatchSetting',
110
+ :opt_in => true
111
+ }
112
+ ],
113
+ :network_setting => {
114
+ :target_google_search => false,
115
+ :target_search_network => false,
116
+ :target_content_network => true
117
+ }
118
+ }
119
+ ]
120
+
121
+ # Prepare for adding campaign.
122
+ operations = campaigns.map do |campaign|
123
+ {:operator => 'ADD', :operand => campaign}
124
+ end
125
+
126
+ # Add campaign.
127
+ response = campaign_srv.mutate(operations)
128
+ if response and response[:value]
129
+ response[:value].each do |campaign|
130
+ puts "Campaign with name '%s' and ID %d was added." %
131
+ [campaign[:name], campaign[:id]]
132
+ end
133
+ else
134
+ raise new StandardError, 'No campaigns were added.'
135
+ end
136
+ end
137
+
138
+ if __FILE__ == $0
139
+ API_VERSION = :v201209
140
+
141
+ begin
142
+ add_campaigns()
143
+
144
+ # HTTP errors.
145
+ rescue AdsCommon::Errors::HttpError => e
146
+ puts "HTTP Error: %s" % e
147
+
148
+ # API errors.
149
+ rescue AdwordsApi::Errors::ApiException => e
150
+ puts "Message: %s" % e.message
151
+ puts 'Errors:'
152
+ e.errors.each_with_index do |error, index|
153
+ puts "\tError [%d]:" % (index + 1)
154
+ error.each do |field, value|
155
+ puts "\t\t%s: %s" % [field, value]
156
+ end
157
+ end
158
+ end
159
+ end