google-adx-buyer-api 0.4.6 → 0.4.7

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 (41) hide show
  1. data/ChangeLog +5 -0
  2. data/README +35 -24
  3. data/examples/{v201206 → v201306}/account_management/get_account_changes.rb +9 -1
  4. data/examples/{v201206 → v201306}/basic_operations/add_ad_group.rb +19 -11
  5. data/examples/{v201206 → v201306}/basic_operations/add_campaign.rb +27 -14
  6. data/examples/{v201206 → v201306}/basic_operations/add_placements.rb +9 -1
  7. data/examples/{v201206 → v201306}/basic_operations/add_thirdparty_redirect_ad.rb +16 -6
  8. data/examples/{v201206 → v201306}/basic_operations/delete_ad.rb +9 -1
  9. data/examples/{v201206 → v201306}/basic_operations/delete_ad_group.rb +9 -1
  10. data/examples/{v201206 → v201306}/basic_operations/delete_campaign.rb +9 -1
  11. data/examples/{v201206 → v201306}/basic_operations/delete_placement.rb +9 -1
  12. data/examples/{v201206 → v201306}/basic_operations/get_ad_groups.rb +9 -1
  13. data/examples/{v201206 → v201306}/basic_operations/get_campaigns.rb +9 -1
  14. data/examples/{v201206 → v201306}/basic_operations/get_placements.rb +9 -1
  15. data/examples/{v201206 → v201306}/basic_operations/get_thirdparty_redirect_ads.rb +9 -1
  16. data/examples/{v201206 → v201306}/basic_operations/pause_ad.rb +9 -1
  17. data/examples/{v201206 → v201306}/basic_operations/update_ad_group.rb +9 -1
  18. data/examples/{v201206 → v201306}/basic_operations/update_campaign.rb +9 -1
  19. data/examples/{v201206 → v201306}/basic_operations/update_placement.rb +15 -7
  20. data/examples/{v201206 → v201306}/campaign_management/add_placements_in_bulk.rb +10 -2
  21. data/examples/{v201206 → v201306}/campaign_management/get_all_disapproved_ads.rb +10 -2
  22. data/examples/{v201206 → v201306}/error_handling/handle_captcha_challenge.rb +1 -1
  23. data/examples/{v201206 → v201306}/error_handling/handle_partial_failures.rb +9 -1
  24. data/examples/{v201206 → v201306}/error_handling/handle_policy_violation_error.rb +9 -1
  25. data/examples/{v201206 → v201306}/error_handling/handle_two_factor_authorization_error.rb +3 -2
  26. data/examples/{v201206 → v201306}/misc/get_all_images_and_videos.rb +12 -5
  27. data/examples/v201306/misc/setup_oauth2.rb +88 -0
  28. data/examples/{v201206 → v201306}/misc/upload_image.rb +20 -10
  29. data/examples/{v201206/misc/use_oauth.rb → v201306/misc/use_oauth2_jwt.rb} +20 -24
  30. data/examples/{v201206 → v201306}/optimization/get_placement_ideas.rb +10 -4
  31. data/examples/{v201206 → v201306}/remarketing/add_audience.rb +38 -26
  32. data/examples/{v201206 → v201306}/remarketing/add_conversion_tracker.rb +17 -6
  33. data/examples/{v201206 → v201306}/reporting/download_criteria_report.rb +9 -1
  34. data/examples/{v201206 → v201306}/reporting/get_campaign_stats.rb +9 -1
  35. data/examples/{v201206 → v201306}/reporting/get_report_fields.rb +9 -1
  36. data/examples/{v201206 → v201306}/targeting/add_campaign_targeting_criteria.rb +10 -5
  37. data/examples/{v201206 → v201306}/targeting/get_campaign_targeting_criteria.rb +9 -1
  38. data/examples/{v201206 → v201306}/targeting/get_targetable_languages_and_carriers.rb +16 -4
  39. data/examples/{v201206 → v201306}/targeting/lookup_location.rb +9 -1
  40. metadata +41 -41
  41. data/examples/v201206/reporting/parallel_report_download.rb +0 -159
@@ -68,12 +68,20 @@ def get_placements(ad_group_id)
68
68
  end
69
69
 
70
70
  if __FILE__ == $0
71
- API_VERSION = :v201206
71
+ API_VERSION = :v201306
72
72
 
73
73
  begin
74
74
  ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
75
75
  get_placements(ad_group_id)
76
76
 
77
+ # Authorization error.
78
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
79
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
80
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
81
+ "to retrieve and store OAuth2 tokens."
82
+ puts "See this wiki page for more details:\n\n " +
83
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
84
+
77
85
  # HTTP errors.
78
86
  rescue AdsCommon::Errors::HttpError => e
79
87
  puts "HTTP Error: %s" % e
@@ -76,12 +76,20 @@ def get_all_ads(ad_group_id)
76
76
  end
77
77
 
78
78
  if __FILE__ == $0
79
- API_VERSION = :v201206
79
+ API_VERSION = :v201306
80
80
 
81
81
  begin
82
82
  ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
83
83
  get_all_ads(ad_group_id)
84
84
 
85
+ # Authorization error.
86
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
87
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
88
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
89
+ "to retrieve and store OAuth2 tokens."
90
+ puts "See this wiki page for more details:\n\n " +
91
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
92
+
85
93
  # HTTP errors.
86
94
  rescue AdsCommon::Errors::HttpError => e
87
95
  puts "HTTP Error: %s" % e
@@ -56,13 +56,21 @@ def pause_ad(ad_group_id, ad_id)
56
56
  end
57
57
 
58
58
  if __FILE__ == $0
59
- API_VERSION = :v201206
59
+ API_VERSION = :v201306
60
60
 
61
61
  begin
62
62
  ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
63
63
  ad_id = 'INSERT_AD_ID_HERE'.to_i
64
64
  pause_ad(ad_group_id, ad_id)
65
65
 
66
+ # Authorization error.
67
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
68
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
69
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
70
+ "to retrieve and store OAuth2 tokens."
71
+ puts "See this wiki page for more details:\n\n " +
72
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
73
+
66
74
  # HTTP errors.
67
75
  rescue AdsCommon::Errors::HttpError => e
68
76
  puts "HTTP Error: %s" % e
@@ -52,12 +52,20 @@ def update_ad_group(ad_group_id)
52
52
  end
53
53
 
54
54
  if __FILE__ == $0
55
- API_VERSION = :v201206
55
+ API_VERSION = :v201306
56
56
 
57
57
  begin
58
58
  ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
59
59
  update_ad_group(ad_group_id)
60
60
 
61
+ # Authorization error.
62
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
63
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
64
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
65
+ "to retrieve and store OAuth2 tokens."
66
+ puts "See this wiki page for more details:\n\n " +
67
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
68
+
61
69
  # HTTP errors.
62
70
  rescue AdsCommon::Errors::HttpError => e
63
71
  puts "HTTP Error: %s" % e
@@ -55,12 +55,20 @@ def update_campaign(campaign_id)
55
55
  end
56
56
 
57
57
  if __FILE__ == $0
58
- API_VERSION = :v201206
58
+ API_VERSION = :v201306
59
59
 
60
60
  begin
61
61
  campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
62
62
  update_campaign(campaign_id)
63
63
 
64
+ # Authorization error.
65
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
66
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
67
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
68
+ "to retrieve and store OAuth2 tokens."
69
+ puts "See this wiki page for more details:\n\n " +
70
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
71
+
64
72
  # HTTP errors.
65
73
  rescue AdsCommon::Errors::HttpError => e
66
74
  puts "HTTP Error: %s" % e
@@ -49,13 +49,13 @@ def update_placement(ad_group_id, placement_id)
49
49
  :criterion => {
50
50
  :id => placement_id
51
51
  },
52
- :bids => {
53
- :xsi_type => 'ManualCPMAdGroupCriterionBids',
54
- :max_cpm => {
55
- :amount => {
56
- :micro_amount => 1000000
52
+ :bidding_strategy_configuration => {
53
+ :bids => [
54
+ {
55
+ :xsi_type => 'CpmBid',
56
+ :bid => {:micro_amount => 1000000}
57
57
  }
58
- }
58
+ ]
59
59
  }
60
60
  }
61
61
  }
@@ -69,13 +69,21 @@ def update_placement(ad_group_id, placement_id)
69
69
  end
70
70
 
71
71
  if __FILE__ == $0
72
- API_VERSION = :v201206
72
+ API_VERSION = :v201306
73
73
 
74
74
  begin
75
75
  ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
76
76
  placement_id = 'INSERT_PLACEMENT_ID_HERE'.to_i
77
77
  update_placement(ad_group_id, placement_id)
78
78
 
79
+ # Authorization error.
80
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
81
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
82
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
83
+ "to retrieve and store OAuth2 tokens."
84
+ puts "See this wiki page for more details:\n\n " +
85
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
86
+
79
87
  # HTTP errors.
80
88
  rescue AdsCommon::Errors::HttpError => e
81
89
  puts "HTTP Error: %s" % e
@@ -64,7 +64,7 @@ def add_placements_in_bulk(ad_group_id)
64
64
  job_id = response[:id]
65
65
  puts "Job ID %d was successfully created." % job_id
66
66
 
67
- # Creating selector to retrive hob status and wait for it to complete.
67
+ # Creating selector to retrive job status and wait for it to complete.
68
68
  selector = {
69
69
  :xsi_type => 'BulkMutateJobSelector',
70
70
  :job_ids => [job_id]
@@ -124,7 +124,7 @@ def add_placements_in_bulk(ad_group_id)
124
124
  end
125
125
 
126
126
  if __FILE__ == $0
127
- API_VERSION = :v201206
127
+ API_VERSION = :v201306
128
128
  RETRY_INTERVAL = 30
129
129
  RETRIES_COUNT = 30
130
130
  PLACEMENT_NUMBER = 100
@@ -133,6 +133,14 @@ if __FILE__ == $0
133
133
  ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
134
134
  add_placements_in_bulk(ad_group_id)
135
135
 
136
+ # Authorization error.
137
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
138
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
139
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
140
+ "to retrieve and store OAuth2 tokens."
141
+ puts "See this wiki page for more details:\n\n " +
142
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
143
+
136
144
  # HTTP errors.
137
145
  rescue AdsCommon::Errors::HttpError => e
138
146
  puts "HTTP Error: %s" % e
@@ -43,7 +43,7 @@ def get_all_disapproved_ads(ad_group_id)
43
43
  :predicates => [
44
44
  {:field => 'AdGroupId', :operator => 'IN', :values => [ad_group_id]},
45
45
  {
46
- :field => 'CreativeApprovalStatus',
46
+ :field => 'AdGroupCreativeApprovalStatus',
47
47
  :operator => 'IN',
48
48
  :values => ['DISAPPROVED']
49
49
  }
@@ -68,12 +68,20 @@ def get_all_disapproved_ads(ad_group_id)
68
68
  end
69
69
 
70
70
  if __FILE__ == $0
71
- API_VERSION = :v201206
71
+ API_VERSION = :v201306
72
72
 
73
73
  begin
74
74
  ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
75
75
  get_all_disapproved_ads(ad_group_id)
76
76
 
77
+ # Authorization error.
78
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
79
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
80
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
81
+ "to retrieve and store OAuth2 tokens."
82
+ puts "See this wiki page for more details:\n\n " +
83
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
84
+
77
85
  # HTTP errors.
78
86
  rescue AdsCommon::Errors::HttpError => e
79
87
  puts "HTTP Error: %s" % e
@@ -69,7 +69,7 @@ def handle_captcha_challenge()
69
69
  end
70
70
 
71
71
  if __FILE__ == $0
72
- API_VERSION = :v201206
72
+ API_VERSION = :v201306
73
73
  MAX_RETRIES = 500
74
74
 
75
75
  begin
@@ -93,12 +93,20 @@ def handle_partial_failures(ad_group_id)
93
93
  end
94
94
 
95
95
  if __FILE__ == $0
96
- API_VERSION = :v201206
96
+ API_VERSION = :v201306
97
97
 
98
98
  begin
99
99
  ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
100
100
  handle_partial_failures(ad_group_id)
101
101
 
102
+ # Authorization error.
103
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
104
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
105
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
106
+ "to retrieve and store OAuth2 tokens."
107
+ puts "See this wiki page for more details:\n\n " +
108
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
109
+
102
110
  # HTTP errors.
103
111
  rescue AdsCommon::Errors::HttpError => e
104
112
  puts "HTTP Error: %s" % e
@@ -114,12 +114,20 @@ def handle_policy_violation_error(ad_group_id)
114
114
  end
115
115
 
116
116
  if __FILE__ == $0
117
- API_VERSION = :v201206
117
+ API_VERSION = :v201306
118
118
 
119
119
  begin
120
120
  ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
121
121
  handle_policy_violation_error(ad_group_id)
122
122
 
123
+ # Authorization error.
124
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
125
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
126
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
127
+ "to retrieve and store OAuth2 tokens."
128
+ puts "See this wiki page for more details:\n\n " +
129
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
130
+
123
131
  # HTTP errors.
124
132
  rescue AdsCommon::Errors::HttpError => e
125
133
  puts "HTTP Error: %s" % e
@@ -29,7 +29,8 @@ def handle_two_factor_authorization_error()
29
29
  :method => 'ClientLogin',
30
30
  :email => '2steptester@gmail.com',
31
31
  :password => 'testaccount',
32
- :user_agent => 'Ruby 2 Factor Sample'
32
+ :user_agent => 'Ruby 2 Factor Sample',
33
+ :developer_token => 'qwerty'
33
34
  },
34
35
  :service => {
35
36
  :environment => 'PRODUCTION'
@@ -64,7 +65,7 @@ def handle_two_factor_authorization_error()
64
65
  end
65
66
 
66
67
  if __FILE__ == $0
67
- API_VERSION = :v201206
68
+ API_VERSION = :v201306
68
69
 
69
70
  begin
70
71
  handle_two_factor_authorization_error()
@@ -25,7 +25,6 @@
25
25
  # Tags: MediaService.get
26
26
 
27
27
  require 'adwords_api'
28
- require 'adwords_api/utils'
29
28
 
30
29
  def get_all_images_and_videos()
31
30
  # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
@@ -60,10 +59,10 @@ def get_all_images_and_videos()
60
59
  page = media_srv.get(selector)
61
60
  if page[:entries]
62
61
  page[:entries].each do |entry|
63
- dimensions = AdwordsApi::Utils.map(entry[:dimensions])
62
+ full_dimensions = entry[:dimensions]['FULL']
64
63
  puts "Entry ID %d with dimensions %dx%d and MIME type is '%s'" %
65
- [entry[:media_id], dimensions['FULL'][:height],
66
- dimensions['FULL'][:width], entry[:mime_type]]
64
+ [entry[:media_id], full_dimensions[:height],
65
+ full_dimensions[:width], entry[:mime_type]]
67
66
  end
68
67
  # Increment values to request the next page.
69
68
  offset += PAGE_SIZE
@@ -77,12 +76,20 @@ def get_all_images_and_videos()
77
76
  end
78
77
 
79
78
  if __FILE__ == $0
80
- API_VERSION = :v201206
79
+ API_VERSION = :v201306
81
80
  PAGE_SIZE = 500
82
81
 
83
82
  begin
84
83
  get_all_images_and_videos()
85
84
 
85
+ # Authorization error.
86
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
87
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
88
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
89
+ "to retrieve and store OAuth2 tokens."
90
+ puts "See this wiki page for more details:\n\n " +
91
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
92
+
86
93
  # HTTP errors.
87
94
  rescue AdsCommon::Errors::HttpError => e
88
95
  puts "HTTP Error: %s" % e
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
+ #
6
+ # Copyright:: Copyright 2013, 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 set up OAuth2.0 authentication credentials.
22
+ #
23
+ # Tags: CampaignService.get
24
+
25
+ require 'adwords_api'
26
+
27
+ def setup_oauth2()
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
+ # You can call authorize explicitely to obtain the access token. Otherwise, it
37
+ # will be invoked automatically on the first API call.
38
+ # There are two ways to provide verification code, first one is via the block:
39
+ token = adwords.authorize() do |auth_url|
40
+ puts "Hit Auth error, please navigate to URL:\n\t%s" % auth_url
41
+ print 'log in and type the verification code: '
42
+ verification_code = gets.chomp
43
+ verification_code
44
+ end
45
+ if token
46
+ print "\nWould you like to update your adwords_api.yml to save " +
47
+ "OAuth2 crdentials? (y/N): "
48
+ response = gets.chomp
49
+ if ('y'.casecmp(response) == 0) or ('yes'.casecmp(response) == 0)
50
+ adwords.save_oauth2_token(token)
51
+ puts 'OAuth2 token is now saved to ~/adwords_api.yml and will be ' +
52
+ 'automatically used by the library.'
53
+ end
54
+ end
55
+
56
+ # Alternatively, you can provide one within the parameters:
57
+ #token = adwords.authorize({:oauth2_verification_code => verification_code})
58
+
59
+ # Note, 'token' is a Hash. Its value is not used in this example. If you need
60
+ # to be able to access the API in offline mode, with no user present, you
61
+ # should persist it to be used in subsequent invocations like this:
62
+ #adwords.authorize({:oauth2_token => token})
63
+
64
+ # No exception thrown - we are good to make a request.
65
+ end
66
+
67
+ if __FILE__ == $0
68
+ API_VERSION = :v201306
69
+
70
+ begin
71
+ setup_oauth2()
72
+
73
+ # HTTP errors.
74
+ rescue AdsCommon::Errors::HttpError => e
75
+ puts "HTTP Error: %s" % e
76
+
77
+ # API errors.
78
+ rescue AdwordsApi::Errors::ApiException => e
79
+ puts "Message: %s" % e.message
80
+ puts 'Errors:'
81
+ e.errors.each_with_index do |error, index|
82
+ puts "\tError [%d]:" % (index + 1)
83
+ error.each do |field, value|
84
+ puts "\t\t%s: %s" % [field, value]
85
+ end
86
+ end
87
+ end
88
+ end
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # Encoding: utf-8
3
3
  #
4
- # Author:: api.sgomes@gmail.com (Sérgio Gomes)
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
5
  #
6
6
  # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
7
7
  #
@@ -18,13 +18,11 @@
18
18
  # See the License for the specific language governing permissions and
19
19
  # limitations under the License.
20
20
  #
21
- # This example uploads an image. To get images, run
22
- # get_all_images_and_videos.rb.
21
+ # This example uploads an image. To get images, run get_all_images.rb.
23
22
  #
24
23
  # Tags: MediaService.upload
25
24
 
26
25
  require 'adwords_api'
27
- require 'adwords_api/utils'
28
26
  require 'base64'
29
27
 
30
28
  def upload_image()
@@ -56,19 +54,31 @@ def upload_image()
56
54
 
57
55
  # Upload image.
58
56
  response = media_srv.upload([image])
59
- ret_image = response.first
60
- dimensions = AdwordsApi::Utils.map(ret_image[:dimensions])
61
- puts "Image with id #{ret_image[:media_id]}, dimensions " +
62
- "#{dimensions['FULL'][:height]}x#{dimensions['FULL'][:width]} " +
63
- "and MIME type \"#{ret_image[:mime_type]}\" uploaded successfully."
57
+ if response and !response.empty?
58
+ ret_image = response.first
59
+ full_dimensions = ret_image[:dimensions]['FULL']
60
+ puts ("Image with ID %d, dimensions %dx%d and MIME type '%s' uploaded " +
61
+ "successfully.") % [ret_image[:media_id], full_dimensions[:height],
62
+ full_dimensions[:width], ret_image[:mime_type]]
63
+ else
64
+ puts 'No images uploaded.'
65
+ end
64
66
  end
65
67
 
66
68
  if __FILE__ == $0
67
- API_VERSION = :v201206
69
+ API_VERSION = :v201306
68
70
 
69
71
  begin
70
72
  upload_image()
71
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
+
72
82
  # HTTP errors.
73
83
  rescue AdsCommon::Errors::HttpError => e
74
84
  puts "HTTP Error: %s" % e