google-adx-buyer-api 0.4.3 → 0.4.4

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.
Files changed (40) hide show
  1. data/ChangeLog +4 -0
  2. data/README +3 -3
  3. data/examples/v201209/account_management/get_account_changes.rb +137 -0
  4. data/examples/v201209/basic_operations/add_ad_group.rb +88 -0
  5. data/examples/v201209/basic_operations/add_campaign.rb +105 -0
  6. data/examples/v201209/basic_operations/add_placements.rb +99 -0
  7. data/examples/v201209/basic_operations/add_thirdparty_redirect_ad.rb +126 -0
  8. data/examples/v201209/basic_operations/delete_ad.rb +80 -0
  9. data/examples/{v201206/reporting/download_defined_report.rb → v201209/basic_operations/delete_ad_group.rb} +21 -12
  10. data/examples/v201209/basic_operations/delete_campaign.rb +77 -0
  11. data/examples/v201209/basic_operations/delete_placement.rb +86 -0
  12. data/examples/v201209/basic_operations/get_ad_groups.rb +80 -0
  13. data/examples/v201209/basic_operations/get_campaigns.rb +77 -0
  14. data/examples/v201209/basic_operations/get_placements.rb +92 -0
  15. data/examples/v201209/basic_operations/get_thirdparty_redirect_ads.rb +100 -0
  16. data/examples/v201209/basic_operations/pause_ad.rb +81 -0
  17. data/examples/v201209/basic_operations/update_ad_group.rb +76 -0
  18. data/examples/v201209/basic_operations/update_campaign.rb +79 -0
  19. data/examples/v201209/basic_operations/update_placement.rb +94 -0
  20. data/examples/v201209/campaign_management/add_placements_in_bulk.rb +151 -0
  21. data/examples/v201209/campaign_management/get_all_disapproved_ads.rb +92 -0
  22. data/examples/v201209/error_handling/handle_captcha_challenge.rb +93 -0
  23. data/examples/v201209/error_handling/handle_partial_failures.rb +117 -0
  24. data/examples/v201209/error_handling/handle_policy_violation_error.rb +138 -0
  25. data/examples/v201209/error_handling/handle_two_factor_authorization_error.rb +87 -0
  26. data/examples/v201209/misc/get_all_images_and_videos.rb +101 -0
  27. data/examples/v201209/misc/upload_image.rb +87 -0
  28. data/examples/v201209/misc/use_oauth.rb +97 -0
  29. data/examples/v201209/optimization/get_placement_ideas.rb +106 -0
  30. data/examples/v201209/remarketing/add_audience.rb +111 -0
  31. data/examples/v201209/remarketing/add_conversion_tracker.rb +93 -0
  32. data/examples/v201209/reporting/download_criteria_report.rb +79 -0
  33. data/examples/v201209/reporting/get_campaign_stats.rb +105 -0
  34. data/examples/{v201206/reporting/get_defined_reports.rb → v201209/reporting/get_report_fields.rb} +13 -17
  35. data/examples/v201209/reporting/parallel_report_download.rb +159 -0
  36. data/examples/v201209/targeting/add_campaign_targeting_criteria.rb +110 -0
  37. data/examples/v201209/targeting/get_campaign_targeting_criteria.rb +104 -0
  38. data/examples/v201209/targeting/get_targetable_languages_and_carriers.rb +82 -0
  39. data/examples/v201209/targeting/lookup_location.rb +104 -0
  40. metadata +89 -34
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.sgomes@gmail.com (Sérgio Gomes)
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 retrieves URLs that have content keywords related to a given
22
+ # website.
23
+ #
24
+ # Tags: TargetingIdeaService.get
25
+
26
+ require 'adwords_api'
27
+ require 'adwords_api/utils'
28
+
29
+ def get_placement_ideas(url)
30
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
31
+ # when called without parameters.
32
+ adwords = AdwordsApi::Api.new
33
+
34
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
35
+ # the configuration file or provide your own logger:
36
+ # adwords.logger = Logger.new('adwords_xml.log')
37
+
38
+ targeting_idea_srv = adwords.service(:TargetingIdeaService, API_VERSION)
39
+
40
+ # Construct selector.
41
+ selector = {
42
+ :idea_type => 'PLACEMENT',
43
+ :request_type => 'IDEAS',
44
+ :requested_attribute_types => ['CRITERION'],
45
+ :search_parameters => [{
46
+ # The 'xsi_type' field allows you to specify the xsi:type of the object
47
+ # being created. It's only necessary when you must provide an explicit
48
+ # type that the client library can't infer.
49
+ :xsi_type => 'RelatedToUrlSearchParameter',
50
+ :urls => [url],
51
+ :include_sub_urls => false
52
+ }],
53
+ :paging => {
54
+ :start_index => 0,
55
+ :number_results => PAGE_SIZE
56
+ }
57
+ }
58
+
59
+ # Define initial values.
60
+ offset = 0
61
+ results = []
62
+
63
+ begin
64
+ # Perform request.
65
+ page = targeting_idea_srv.get(selector)
66
+ results += page[:entries] if page and page[:entries]
67
+
68
+ # Prepare next page request.
69
+ offset += PAGE_SIZE
70
+ selector[:paging][:start_index] = offset
71
+ end while offset < page[:total_num_entries]
72
+
73
+ # Display results.
74
+ results.each do |result|
75
+ data = AdwordsApi::Utils.map(result[:data])
76
+ placement = data['CRITERION'][:value]
77
+ puts "Related placement found at URL [%s]" % placement[:url]
78
+ end
79
+ puts "Total URLs found with keywords related to keywords at [%s]: %d." %
80
+ [url, results.length]
81
+ end
82
+
83
+ if __FILE__ == $0
84
+ API_VERSION = :v201209
85
+ PAGE_SIZE = 100
86
+
87
+ begin
88
+ url = 'INSERT_PLACEMENT_URL_HERE'
89
+ get_placement_ideas(url)
90
+
91
+ # HTTP errors.
92
+ rescue AdsCommon::Errors::HttpError => e
93
+ puts "HTTP Error: %s" % e
94
+
95
+ # API errors.
96
+ rescue AdwordsApi::Errors::ApiException => e
97
+ puts "Message: %s" % e.message
98
+ puts 'Errors:'
99
+ e.errors.each_with_index do |error, index|
100
+ puts "\tError [%d]:" % (index + 1)
101
+ error.each do |field, value|
102
+ puts "\t\t%s: %s" % [field, value]
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.sgomes@gmail.com (Sérgio Gomes)
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 a user list (a.k.a. Audience) and shows
22
+ # its associated conversion tracker code snippet.
23
+ #
24
+ # Tags: UserListService.mutate, ConversionTrackerService.get
25
+
26
+ require 'adwords_api'
27
+
28
+ def add_audience()
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
+ user_list_srv = adwords.service(:UserListService, API_VERSION)
38
+ conv_tracker_srv = adwords.service(:ConversionTrackerService, API_VERSION)
39
+
40
+ # Prepare for adding remarketing user list.
41
+ name = "Mars cruise customers #%d" % (Time.new.to_f * 1000).to_i
42
+ operation = {
43
+ :operator => 'ADD',
44
+ :operand => {
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 => 'RemarketingUserList',
49
+ :name => name,
50
+ :description => 'A list of mars cruise customers in the last year',
51
+ :status => 'OPEN',
52
+ :membership_life_span => 365,
53
+ :conversion_types => [{:name => name}],
54
+ # Optional field.
55
+ :status => 'OPEN'
56
+ }
57
+ }
58
+
59
+ # Add user list.
60
+ response = user_list_srv.mutate([operation])
61
+ user_list = response[:value].first
62
+
63
+ # Get conversion snippets.
64
+ if user_list and user_list[:conversion_types]
65
+ conversion_ids = user_list[:conversion_types].map {|type| type[:id]}
66
+ selector = {
67
+ # We're actually interested in the 'Snippet' field, which is returned
68
+ # automatically.
69
+ :fields => ['Id'],
70
+ :predicates => [
71
+ {:field => 'Id', :operator => 'IN', :values => conversion_ids}
72
+ ]
73
+ }
74
+ conv_tracker_response = conv_tracker_srv.get(selector)
75
+ if conv_tracker_response and conv_tracker_response[:entries]
76
+ conversions = conv_tracker_response[:entries]
77
+ end
78
+ end
79
+ puts "User list with name '%s' and ID %d was added." %
80
+ [user_list[:name], user_list[:id]]
81
+ # Display user list associated conversion code snippets.
82
+ if conversions
83
+ conversions.each do |conversion|
84
+ puts "Conversion type code snipped associated to the list:\n\t\t%s\n" %
85
+ conversion[:snippet]
86
+ end
87
+ end
88
+ end
89
+
90
+ if __FILE__ == $0
91
+ API_VERSION = :v201209
92
+
93
+ begin
94
+ add_audience()
95
+
96
+ # HTTP errors.
97
+ rescue AdsCommon::Errors::HttpError => e
98
+ puts "HTTP Error: %s" % e
99
+
100
+ # API errors.
101
+ rescue AdwordsApi::Errors::ApiException => e
102
+ puts "Message: %s" % e.message
103
+ puts 'Errors:'
104
+ e.errors.each_with_index do |error, index|
105
+ puts "\tError [%d]:" % (index + 1)
106
+ error.each do |field, value|
107
+ puts "\t\t%s: %s" % [field, value]
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.sgomes@gmail.com (Sérgio Gomes)
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 add an AdWords conversion tracker.
22
+ #
23
+ # Tags: ConversionTrackerService.mutate
24
+
25
+ require 'adwords_api'
26
+
27
+ def add_conversion_tracker()
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
+ conv_tracker_srv = adwords.service(:ConversionTrackerService, API_VERSION)
37
+
38
+ # Prepare for adding conversion.
39
+ operation = {
40
+ :operator => 'ADD',
41
+ :operand => {
42
+ # The 'xsi_type' field allows you to specify the xsi:type of the object
43
+ # being created. It's only necessary when you must provide an explicit
44
+ # type that the client library can't infer.
45
+ :xsi_type => 'AdWordsConversionTracker',
46
+ :name => "Earth to Mars Cruises Conversion #%d" %
47
+ (Time.new.to_f * 1000).to_i,
48
+ :category => 'DEFAULT',
49
+ :markup_language => 'HTML',
50
+ :http_protocol => 'HTTP',
51
+ :text_format => 'HIDDEN',
52
+ # Optional fields:
53
+ :status => 'ENABLED',
54
+ :viewthrough_lookback_window => 15,
55
+ :viewthrough_conversion_de_dup_search => true,
56
+ :is_product_ads_chargeable => true,
57
+ :product_ads_chargeable_conversion_window => 15,
58
+ :conversion_page_language => 'en',
59
+ :background_color => '#0000FF',
60
+ :user_revenue_value => 'someJavascriptVariable'
61
+ }
62
+ }
63
+
64
+ # Add conversion.
65
+ response = conv_tracker_srv.mutate([operation])
66
+ conversion = response[:value].first
67
+ puts ("Conversion with ID %d, name '%s', status '%s' and category '%s'" +
68
+ " was added.") % [conversion[:id], conversion[:name],
69
+ conversion[:status], conversion[:category]]
70
+ end
71
+
72
+ if __FILE__ == $0
73
+ API_VERSION = :v201209
74
+
75
+ begin
76
+ add_conversion_tracker()
77
+
78
+ # HTTP errors.
79
+ rescue AdsCommon::Errors::HttpError => e
80
+ puts "HTTP Error: %s" % e
81
+
82
+ # API errors.
83
+ rescue AdwordsApi::Errors::ApiException => e
84
+ puts "Message: %s" % e.message
85
+ puts 'Errors:'
86
+ e.errors.each_with_index do |error, index|
87
+ puts "\tError [%d]:" % (index + 1)
88
+ error.each do |field, value|
89
+ puts "\t\t%s: %s" % [field, value]
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,79 @@
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 gets and downloads an Ad Hoc report from a XML report definition.
22
+
23
+ require 'adwords_api'
24
+
25
+ def download_criteria_report(file_name)
26
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
27
+ # when called without parameters.
28
+ adwords = AdwordsApi::Api.new
29
+
30
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
31
+ # the configuration file or provide your own logger:
32
+ # adwords.logger = Logger.new('adwords_xml.log')
33
+
34
+ # Get report utilities for the version.
35
+ report_utils = adwords.report_utils(API_VERSION)
36
+
37
+ # Define report definition. You can also pass your own XML text as a string.
38
+ report_definition = {
39
+ :selector => {
40
+ :fields => ['CampaignId', 'AdGroupId', 'Id', 'Criteria', 'CriteriaType',
41
+ 'Impressions', 'Clicks', 'Cost'],
42
+ # Predicates are optional.
43
+ :predicates => {
44
+ :field => 'Status',
45
+ :operator => 'IN',
46
+ :values => ['ACTIVE', 'PAUSED']
47
+ }
48
+ },
49
+ :report_name => 'Last 7 days CRITERIA_PERFORMANCE_REPORT',
50
+ :report_type => 'CRITERIA_PERFORMANCE_REPORT',
51
+ :download_format => 'CSV',
52
+ :date_range_type => 'LAST_7_DAYS',
53
+ # Enable to get rows with zero impressions.
54
+ :include_zero_impressions => false
55
+ }
56
+
57
+ # Download report, using "download_report_as_file" utility method.
58
+ # To retrieve the report as return value, use "download_report" method.
59
+ report_utils.download_report_as_file(report_definition, file_name)
60
+ puts "Report was downloaded to '%s'." % file_name
61
+ end
62
+
63
+ if __FILE__ == $0
64
+ API_VERSION = :v201209
65
+
66
+ begin
67
+ # File name to write report to.
68
+ file_name = 'INSERT_OUTPUT_FILE_NAME_HERE'
69
+ download_criteria_report(file_name)
70
+
71
+ # HTTP errors.
72
+ rescue AdsCommon::Errors::HttpError => e
73
+ puts "HTTP Error: %s" % e
74
+
75
+ # API errors.
76
+ rescue AdwordsApi::Errors::ReportError => e
77
+ puts "Reporting Error: %s" % e.message
78
+ end
79
+ end
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
+ #
6
+ # Copyright:: Copyright 2012, 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 gets various statistics for campaigns that received at least one
22
+ # impression during the last week. To get campaigns, run get_campaigns.rb.
23
+ #
24
+ # Tags: CampaignService.get
25
+
26
+ require 'adwords_api'
27
+ require 'date'
28
+
29
+ def get_campaign_stats()
30
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
31
+ # when called without parameters.
32
+ adwords = AdwordsApi::Api.new
33
+
34
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
35
+ # the configuration file or provide your own logger:
36
+ # adwords.logger = Logger.new('adwords_xml.log')
37
+
38
+ campaign_srv = adwords.service(:CampaignService, API_VERSION)
39
+
40
+ # Prepare start and end date for the last week.
41
+ start_date = DateTime.parse((Date.today - 7).to_s).strftime("%Y%m%d")
42
+ end_date = DateTime.parse((Date.today - 1).to_s).strftime("%Y%m%d")
43
+
44
+ # Get all the campaigns for this account.
45
+ selector = {
46
+ :fields => ['Id', 'Name', 'Impressions', 'Clicks', 'Cost', 'Ctr'],
47
+ :predicates => [
48
+ {:field => 'Impressions', :operator => 'GREATER_THAN', :values => [0]}
49
+ ],
50
+ :date_range => {:min => start_date, :max => end_date},
51
+ :paging => {
52
+ :start_index => 0,
53
+ :number_results => PAGE_SIZE
54
+ }
55
+ }
56
+
57
+ # Set initial values.
58
+ offset, page = 0, {}
59
+
60
+ begin
61
+ page = campaign_srv.get(selector)
62
+ if page[:entries]
63
+ page[:entries].each do |campaign|
64
+ puts ("Campaign with ID %d, name '%s' had the following stats during" +
65
+ " the last week: ") % [campaign[:id], campaign[:name]]
66
+ stats = campaign[:campaign_stats]
67
+ puts "\tImpressions: %d" % stats[:impressions]
68
+ puts "\tClicks: %d" % stats[:clicks]
69
+ puts "\tCost: %.2f" % (stats[:cost][:micro_amount] / 1000000)
70
+ puts "\tCTR: %.2f%%" % (stats[:ctr] * 100)
71
+ end
72
+ # Increment values to request the next page.
73
+ offset += PAGE_SIZE
74
+ selector[:paging][:start_index] = offset
75
+ end
76
+ end while page[:total_num_entries] > offset
77
+
78
+ if page.include?(:total_num_entries)
79
+ puts "Total number of campaigns found: %d." % [page[:total_num_entries]]
80
+ end
81
+ end
82
+
83
+ if __FILE__ == $0
84
+ API_VERSION = :v201209
85
+ PAGE_SIZE = 500
86
+
87
+ begin
88
+ get_campaign_stats()
89
+
90
+ # HTTP errors.
91
+ rescue AdsCommon::Errors::HttpError => e
92
+ puts "HTTP Error: %s" % e
93
+
94
+ # API errors.
95
+ rescue AdwordsApi::Errors::ApiException => e
96
+ puts "Message: %s" % e.message
97
+ puts 'Errors:'
98
+ e.errors.each_with_index do |error, index|
99
+ puts "\tError [%d]:" % (index + 1)
100
+ error.each do |field, value|
101
+ puts "\t\t%s: %s" % [field, value]
102
+ end
103
+ end
104
+ end
105
+ end