google-adwords-api 0.9.3 → 0.10.0

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 (213) hide show
  1. data/ChangeLog +4 -0
  2. data/README +4 -4
  3. data/examples/{v201209 → v201309}/account_management/create_account.rb +9 -1
  4. data/examples/{v201209 → v201309}/account_management/get_account_alerts.rb +9 -1
  5. data/examples/{v201209 → v201309}/account_management/get_account_changes.rb +9 -1
  6. data/examples/{v201209 → v201309}/account_management/get_account_hierarchy.rb +9 -1
  7. data/examples/v201309/advanced_operations/add_ad_group_bid_modifier.rb +105 -0
  8. data/examples/v201309/advanced_operations/add_click_to_download_ad.rb +137 -0
  9. data/examples/v201309/advanced_operations/add_site_links.rb +244 -0
  10. data/examples/v201309/advanced_operations/create_and_attach_shared_keyword_set.rb +147 -0
  11. data/examples/v201309/advanced_operations/find_and_remove_criteria_from_shared_set.rb +181 -0
  12. data/examples/{v201209/adwords_for_video/get_video_campaign_criteria.rb → v201309/advanced_operations/get_ad_group_bid_modifiers.rb} +30 -23
  13. data/examples/v201309/advanced_operations/upload_offline_conversions.rb +117 -0
  14. data/examples/v201309/advanced_operations/use_shared_bidding_strategy.rb +163 -0
  15. data/examples/{v201209 → v201309}/basic_operations/add_ad_groups.rb +28 -21
  16. data/examples/{v201209 → v201309}/basic_operations/add_campaigns.rb +18 -15
  17. data/examples/{v201209 → v201309}/basic_operations/add_keywords.rb +9 -1
  18. data/examples/{v201209 → v201309}/basic_operations/add_text_ads.rb +9 -1
  19. data/examples/{v201209 → v201309}/basic_operations/delete_ad.rb +9 -1
  20. data/examples/{v201209 → v201309}/basic_operations/delete_ad_group.rb +9 -1
  21. data/examples/{v201209 → v201309}/basic_operations/delete_campaign.rb +9 -1
  22. data/examples/{v201209 → v201309}/basic_operations/delete_keyword.rb +9 -1
  23. data/examples/{v201209 → v201309}/basic_operations/get_ad_groups.rb +9 -1
  24. data/examples/{v201209 → v201309}/basic_operations/get_campaigns.rb +9 -1
  25. data/examples/{v201209 → v201309}/basic_operations/get_campaigns_with_awql.rb +9 -1
  26. data/examples/{v201209 → v201309}/basic_operations/get_keywords.rb +9 -1
  27. data/examples/{v201209 → v201309}/basic_operations/get_text_ads.rb +9 -1
  28. data/examples/{v201209 → v201309}/basic_operations/pause_ad.rb +9 -1
  29. data/examples/{v201209 → v201309}/basic_operations/update_ad_group.rb +9 -1
  30. data/examples/{v201209 → v201309}/basic_operations/update_campaign.rb +9 -1
  31. data/examples/{v201209 → v201309}/basic_operations/update_keyword.rb +21 -10
  32. data/examples/{v201209 → v201309}/campaign_management/add_experiment.rb +9 -1
  33. data/examples/{v201209 → v201309}/campaign_management/add_keywords_in_bulk.rb +10 -2
  34. data/examples/{v201209 → v201309}/campaign_management/add_location_extension.rb +9 -1
  35. data/examples/{v201209 → v201309}/campaign_management/add_location_extension_override.rb +9 -1
  36. data/examples/{v201209 → v201309}/campaign_management/get_all_disapproved_ads.rb +21 -13
  37. data/examples/{v201209 → v201309}/campaign_management/get_all_disapproved_ads_with_awql.rb +17 -8
  38. data/examples/{v201209 → v201309}/campaign_management/promote_experiment.rb +9 -1
  39. data/examples/{v201209 → v201309}/campaign_management/set_ad_parameters.rb +9 -1
  40. data/examples/{v201209 → v201309}/campaign_management/set_criterion_bid_modifier.rb +11 -5
  41. data/examples/{v201209 → v201309}/campaign_management/validate_text_ad.rb +9 -1
  42. data/examples/{v201209 → v201309}/error_handling/handle_captcha_challenge.rb +1 -1
  43. data/examples/{v201209 → v201309}/error_handling/handle_partial_failures.rb +9 -1
  44. data/examples/{v201209 → v201309}/error_handling/handle_policy_violation_error.rb +9 -1
  45. data/examples/{v201209 → v201309}/error_handling/handle_two_factor_authorization_error.rb +1 -1
  46. data/examples/{v201209 → v201309}/misc/get_all_images_and_videos.rb +9 -1
  47. data/examples/{v201209/misc/use_oauth2.rb → v201309/misc/setup_oauth2.rb} +17 -26
  48. data/examples/{v201209 → v201309}/misc/upload_image.rb +9 -1
  49. data/examples/{v201209 → v201309}/misc/use_oauth2_jwt.rb +1 -1
  50. data/examples/{v201209 → v201309}/optimization/estimate_keyword_traffic.rb +9 -1
  51. data/examples/{v201209 → v201309}/optimization/get_keyword_bid_simulations.rb +9 -1
  52. data/examples/{v201209 → v201309}/optimization/get_keyword_ideas.rb +17 -1
  53. data/examples/{v201209 → v201309}/optimization/get_placement_ideas.rb +9 -1
  54. data/examples/{v201209 → v201309}/remarketing/add_audience.rb +11 -3
  55. data/examples/{v201209 → v201309}/remarketing/add_conversion_tracker.rb +9 -2
  56. data/examples/{v201209 → v201309}/reporting/download_criteria_report.rb +9 -1
  57. data/examples/{v201209 → v201309}/reporting/download_criteria_report_with_awql.rb +9 -1
  58. data/examples/{v201209 → v201309}/reporting/get_campaign_stats.rb +9 -1
  59. data/examples/{v201209 → v201309}/reporting/get_report_fields.rb +9 -1
  60. data/examples/{v201209 → v201309}/reporting/parallel_report_download.rb +9 -1
  61. data/examples/{v201209 → v201309}/targeting/add_campaign_targeting_criteria.rb +10 -5
  62. data/examples/{v201209 → v201309}/targeting/add_demographic_targeting_criteria.rb +9 -1
  63. data/examples/{v201209 → v201309}/targeting/get_campaign_targeting_criteria.rb +9 -1
  64. data/examples/{v201209 → v201309}/targeting/get_targetable_languages_and_carriers.rb +9 -1
  65. data/examples/{v201209 → v201309}/targeting/lookup_location.rb +9 -1
  66. data/lib/adwords_api/api_config.rb +57 -55
  67. data/lib/adwords_api/{v201209 → v201309}/ad_group_ad_service.rb +7 -7
  68. data/lib/adwords_api/v201309/ad_group_ad_service_registry.rb +46 -0
  69. data/lib/adwords_api/{v201209 → v201309}/ad_group_bid_modifier_service.rb +6 -6
  70. data/lib/adwords_api/v201309/ad_group_bid_modifier_service_registry.rb +46 -0
  71. data/lib/adwords_api/{v201209 → v201309}/ad_group_criterion_service.rb +7 -7
  72. data/lib/adwords_api/v201309/ad_group_criterion_service_registry.rb +46 -0
  73. data/lib/adwords_api/v201309/ad_group_feed_service.rb +38 -0
  74. data/lib/adwords_api/v201309/ad_group_feed_service_registry.rb +46 -0
  75. data/lib/adwords_api/{v201209 → v201309}/ad_group_service.rb +7 -7
  76. data/lib/adwords_api/v201309/ad_group_service_registry.rb +46 -0
  77. data/lib/adwords_api/{v201209 → v201309}/ad_param_service.rb +7 -7
  78. data/lib/adwords_api/v201309/ad_param_service_registry.rb +46 -0
  79. data/lib/adwords_api/v201309/adwords_user_list_service.rb +38 -0
  80. data/lib/adwords_api/v201309/adwords_user_list_service_registry.rb +46 -0
  81. data/lib/adwords_api/{v201209 → v201309}/alert_service.rb +7 -7
  82. data/lib/adwords_api/v201309/alert_service_registry.rb +46 -0
  83. data/lib/adwords_api/{v201209/managed_customer_service.rb → v201309/bidding_strategy_service.rb} +9 -9
  84. data/lib/adwords_api/v201309/bidding_strategy_service_registry.rb +46 -0
  85. data/lib/adwords_api/{v201209 → v201309}/budget_order_service.rb +7 -7
  86. data/lib/adwords_api/v201309/budget_order_service_registry.rb +46 -0
  87. data/lib/adwords_api/{v201209 → v201309}/budget_service.rb +7 -7
  88. data/lib/adwords_api/v201309/budget_service_registry.rb +46 -0
  89. data/lib/adwords_api/{v201209 → v201309}/campaign_ad_extension_service.rb +7 -7
  90. data/lib/adwords_api/v201309/campaign_ad_extension_service_registry.rb +46 -0
  91. data/lib/adwords_api/{v201209 → v201309}/campaign_criterion_service.rb +7 -7
  92. data/lib/adwords_api/v201309/campaign_criterion_service_registry.rb +46 -0
  93. data/lib/adwords_api/v201309/campaign_feed_service.rb +38 -0
  94. data/lib/adwords_api/v201309/campaign_feed_service_registry.rb +46 -0
  95. data/lib/adwords_api/{v201209 → v201309}/campaign_service.rb +7 -7
  96. data/lib/adwords_api/v201309/campaign_service_registry.rb +46 -0
  97. data/lib/adwords_api/v201309/campaign_shared_set_service.rb +38 -0
  98. data/lib/adwords_api/v201309/campaign_shared_set_service_registry.rb +47 -0
  99. data/lib/adwords_api/{v201209 → v201309}/constant_data_service.rb +7 -7
  100. data/lib/adwords_api/v201309/constant_data_service_registry.rb +46 -0
  101. data/lib/adwords_api/{v201209 → v201309}/conversion_tracker_service.rb +7 -7
  102. data/lib/adwords_api/v201309/conversion_tracker_service_registry.rb +46 -0
  103. data/lib/adwords_api/{v201209 → v201309}/customer_service.rb +7 -7
  104. data/lib/adwords_api/v201309/customer_service_registry.rb +46 -0
  105. data/lib/adwords_api/{v201209 → v201309}/customer_sync_service.rb +7 -7
  106. data/lib/adwords_api/v201309/customer_sync_service_registry.rb +47 -0
  107. data/lib/adwords_api/{v201209 → v201309}/data_service.rb +7 -7
  108. data/lib/adwords_api/v201309/data_service_registry.rb +46 -0
  109. data/lib/adwords_api/{v201209 → v201309}/experiment_service.rb +7 -7
  110. data/lib/adwords_api/v201309/experiment_service_registry.rb +46 -0
  111. data/lib/adwords_api/{v201209/user_list_service.rb → v201309/feed_item_service.rb} +9 -9
  112. data/lib/adwords_api/v201309/feed_item_service_registry.rb +46 -0
  113. data/lib/adwords_api/v201309/feed_mapping_service.rb +38 -0
  114. data/lib/adwords_api/v201309/feed_mapping_service_registry.rb +46 -0
  115. data/lib/adwords_api/v201309/feed_service.rb +38 -0
  116. data/lib/adwords_api/v201309/feed_service_registry.rb +46 -0
  117. data/lib/adwords_api/{v201209 → v201309}/geo_location_service.rb +7 -7
  118. data/lib/adwords_api/v201309/geo_location_service_registry.rb +46 -0
  119. data/lib/adwords_api/{v201209 → v201309}/location_criterion_service.rb +7 -7
  120. data/lib/adwords_api/v201309/location_criterion_service_registry.rb +46 -0
  121. data/lib/adwords_api/v201309/managed_customer_service.rb +50 -0
  122. data/lib/adwords_api/v201309/managed_customer_service_registry.rb +46 -0
  123. data/lib/adwords_api/{v201209 → v201309}/media_service.rb +7 -7
  124. data/lib/adwords_api/v201309/media_service_registry.rb +46 -0
  125. data/lib/adwords_api/{v201209 → v201309}/mutate_job_service.rb +7 -7
  126. data/lib/adwords_api/v201309/mutate_job_service_registry.rb +46 -0
  127. data/lib/adwords_api/v201309/offline_conversion_feed_service.rb +34 -0
  128. data/lib/adwords_api/v201309/offline_conversion_feed_service_registry.rb +46 -0
  129. data/lib/adwords_api/{v201209 → v201309}/report_definition_service.rb +7 -7
  130. data/lib/adwords_api/v201309/report_definition_service_registry.rb +46 -0
  131. data/lib/adwords_api/v201309/shared_criterion_service.rb +38 -0
  132. data/lib/adwords_api/v201309/shared_criterion_service_registry.rb +47 -0
  133. data/lib/adwords_api/v201309/shared_set_service.rb +38 -0
  134. data/lib/adwords_api/v201309/shared_set_service_registry.rb +47 -0
  135. data/lib/adwords_api/{v201209 → v201309}/targeting_idea_service.rb +7 -7
  136. data/lib/adwords_api/v201309/targeting_idea_service_registry.rb +46 -0
  137. data/lib/adwords_api/{v201209 → v201309}/traffic_estimator_service.rb +7 -7
  138. data/lib/adwords_api/{v201209 → v201309}/traffic_estimator_service_registry.rb +5 -5
  139. data/lib/adwords_api/version.rb +1 -1
  140. data/test/adwords_api/test_adwords_api.rb +1 -1
  141. data/test/adwords_api/test_api_config.rb +8 -8
  142. data/test/adwords_api/test_report_utils.rb +1 -1
  143. data/test/bugs/test_issue_00000031.rb +2 -2
  144. data/test/bugs/test_issue_00000063.rb +6 -6
  145. data/test/templates/v201302/basic_operations_get_campaigns.def +1 -1
  146. data/test/templates/v201302/misc_use_oauth2_jwt.def +1 -1
  147. data/test/templates/v201306/basic_operations_get_campaigns.def +1 -1
  148. data/test/templates/v201306/misc_use_oauth2_jwt.def +1 -1
  149. data/test/templates/{v201209 → v201309}/basic_operations_get_campaigns.def +7 -7
  150. data/test/templates/v201309/misc_use_oauth2_jwt.def +131 -0
  151. metadata +416 -430
  152. data/examples/v201209/account_management/get_client_customer_id.rb +0 -88
  153. data/examples/v201209/account_management/get_client_unit_usage.rb +0 -90
  154. data/examples/v201209/adwords_for_video/add_video_campaign.rb +0 -103
  155. data/examples/v201209/adwords_for_video/find_videos.rb +0 -92
  156. data/examples/v201209/adwords_for_video/get_keyword_criteria.rb +0 -101
  157. data/examples/v201209/adwords_for_video/get_targeting_groups.rb +0 -93
  158. data/examples/v201209/adwords_for_video/get_video_campaign_stats.rb +0 -126
  159. data/examples/v201209/adwords_for_video/get_video_campaigns.rb +0 -94
  160. data/examples/v201209/campaign_management/set_campaign_enhanced.rb +0 -89
  161. data/lib/adwords_api/v201209/ad_extension_override_service.rb +0 -38
  162. data/lib/adwords_api/v201209/ad_extension_override_service_registry.rb +0 -46
  163. data/lib/adwords_api/v201209/ad_group_ad_service_registry.rb +0 -46
  164. data/lib/adwords_api/v201209/ad_group_bid_modifier_service_registry.rb +0 -46
  165. data/lib/adwords_api/v201209/ad_group_criterion_service_registry.rb +0 -46
  166. data/lib/adwords_api/v201209/ad_group_service_registry.rb +0 -46
  167. data/lib/adwords_api/v201209/ad_param_service_registry.rb +0 -46
  168. data/lib/adwords_api/v201209/alert_service_registry.rb +0 -46
  169. data/lib/adwords_api/v201209/budget_order_service_registry.rb +0 -46
  170. data/lib/adwords_api/v201209/budget_service_registry.rb +0 -46
  171. data/lib/adwords_api/v201209/campaign_ad_extension_service_registry.rb +0 -46
  172. data/lib/adwords_api/v201209/campaign_criterion_service_registry.rb +0 -46
  173. data/lib/adwords_api/v201209/campaign_service_registry.rb +0 -46
  174. data/lib/adwords_api/v201209/constant_data_service_registry.rb +0 -46
  175. data/lib/adwords_api/v201209/conversion_tracker_service_registry.rb +0 -46
  176. data/lib/adwords_api/v201209/customer_service_registry.rb +0 -46
  177. data/lib/adwords_api/v201209/customer_sync_service_registry.rb +0 -47
  178. data/lib/adwords_api/v201209/data_service_registry.rb +0 -46
  179. data/lib/adwords_api/v201209/experiment_service_registry.rb +0 -46
  180. data/lib/adwords_api/v201209/geo_location_service_registry.rb +0 -46
  181. data/lib/adwords_api/v201209/info_service.rb +0 -34
  182. data/lib/adwords_api/v201209/info_service_registry.rb +0 -46
  183. data/lib/adwords_api/v201209/location_criterion_service_registry.rb +0 -46
  184. data/lib/adwords_api/v201209/managed_customer_service_registry.rb +0 -46
  185. data/lib/adwords_api/v201209/media_service_registry.rb +0 -46
  186. data/lib/adwords_api/v201209/mutate_job_service_registry.rb +0 -46
  187. data/lib/adwords_api/v201209/report_definition_service_registry.rb +0 -46
  188. data/lib/adwords_api/v201209/targeting_idea_service_registry.rb +0 -46
  189. data/lib/adwords_api/v201209/user_list_service_registry.rb +0 -46
  190. data/lib/adwords_api/v201209/video_ad_service.rb +0 -38
  191. data/lib/adwords_api/v201209/video_ad_service_registry.rb +0 -46
  192. data/lib/adwords_api/v201209/video_campaign_criterion_service.rb +0 -38
  193. data/lib/adwords_api/v201209/video_campaign_criterion_service_registry.rb +0 -47
  194. data/lib/adwords_api/v201209/video_campaign_service.rb +0 -38
  195. data/lib/adwords_api/v201209/video_campaign_service_registry.rb +0 -46
  196. data/lib/adwords_api/v201209/video_service.rb +0 -42
  197. data/lib/adwords_api/v201209/video_service_registry.rb +0 -46
  198. data/lib/adwords_api/v201209/video_targeting_group_criterion_service.rb +0 -38
  199. data/lib/adwords_api/v201209/video_targeting_group_criterion_service_registry.rb +0 -46
  200. data/lib/adwords_api/v201209/video_targeting_group_service.rb +0 -38
  201. data/lib/adwords_api/v201209/video_targeting_group_service_registry.rb +0 -46
  202. data/test/examples/v201209/test_account_management.rb +0 -60
  203. data/test/examples/v201209/test_basic_operations.rb +0 -177
  204. data/test/examples/v201209/test_campaign_management.rb +0 -124
  205. data/test/examples/v201209/test_error_handling.rb +0 -63
  206. data/test/examples/v201209/test_misc.rb +0 -39
  207. data/test/examples/v201209/test_optimization.rb +0 -63
  208. data/test/examples/v201209/test_remarketing.rb +0 -39
  209. data/test/examples/v201209/test_reporting.rb +0 -84
  210. data/test/examples/v201209/test_targeting.rb +0 -60
  211. data/test/examples/v201209/utils.rb +0 -261
  212. data/test/suite_exampletests_v201209.rb +0 -37
  213. data/test/suite_exampletests_v201306.rb +0 -37
data/ChangeLog CHANGED
@@ -1,3 +1,7 @@
1
+ 0.10.0:
2
+ - Support and examples for v201309.
3
+ - Removed deprecated API version v201209.
4
+
1
5
  0.9.3:
2
6
  - Updated examples to use OAuth2 by default.
3
7
  - Require google-ads-common 0.9.3 or later from now on.
data/README CHANGED
@@ -3,9 +3,9 @@
3
3
  Welcome to the next generation Google-developed Ruby client library for the
4
4
  AdWords and DoubleClick Ad Exchange Buyer API!
5
5
 
6
- It contains full support for v201209, v201302 and v201306, with full stubs, and
7
- a simplified programming interface that lets you handle everything in native
8
- Ruby collections.
6
+ It contains full support for all API services with full stubs, and a simplified
7
+ programming interface that lets you handle everything in native Ruby
8
+ collections.
9
9
 
10
10
 
11
11
  = Docs for Users
@@ -63,7 +63,7 @@ To obtain OAuth2 client credentials, follow instructions on the wiki:
63
63
 
64
64
  Once the library instance is create, specify which service you're looking to
65
65
  use, and which version:
66
- campaign_srv = adwords.service(:CampaignService, :v201306)
66
+ campaign_srv = adwords.service(:CampaignService, :v201309)
67
67
 
68
68
  and you should now be able to just use the API methods in the object you were
69
69
  returned:
@@ -64,11 +64,19 @@ def create_account()
64
64
  end
65
65
 
66
66
  if __FILE__ == $0
67
- API_VERSION = :v201209
67
+ API_VERSION = :v201309
68
68
 
69
69
  begin
70
70
  create_account()
71
71
 
72
+ # Authorization error.
73
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
74
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
75
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
76
+ "to retrieve and store OAuth2 tokens."
77
+ puts "See this wiki page for more details:\n\n " +
78
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
79
+
72
80
  # HTTP errors.
73
81
  rescue AdsCommon::Errors::HttpError => e
74
82
  puts "HTTP Error: %s" % e
@@ -90,12 +90,20 @@ def get_account_alerts()
90
90
  end
91
91
 
92
92
  if __FILE__ == $0
93
- API_VERSION = :v201209
93
+ API_VERSION = :v201309
94
94
  PAGE_SIZE = 500
95
95
 
96
96
  begin
97
97
  get_account_alerts()
98
98
 
99
+ # Authorization error.
100
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
101
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
102
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
103
+ "to retrieve and store OAuth2 tokens."
104
+ puts "See this wiki page for more details:\n\n " +
105
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
106
+
99
107
  # HTTP errors.
100
108
  rescue AdsCommon::Errors::HttpError => e
101
109
  puts "HTTP Error: %s" % e
@@ -114,11 +114,19 @@ def get_account_changes()
114
114
  end
115
115
 
116
116
  if __FILE__ == $0
117
- API_VERSION = :v201209
117
+ API_VERSION = :v201309
118
118
 
119
119
  begin
120
120
  get_account_changes()
121
121
 
122
+ # Authorization error.
123
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
124
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
125
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
126
+ "to retrieve and store OAuth2 tokens."
127
+ puts "See this wiki page for more details:\n\n " +
128
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
129
+
122
130
  # HTTP errors.
123
131
  rescue AdsCommon::Errors::HttpError => e
124
132
  puts "HTTP Error: %s" % e
@@ -72,11 +72,19 @@ def get_account_hierarchy()
72
72
  end
73
73
 
74
74
  if __FILE__ == $0
75
- API_VERSION = :v201209
75
+ API_VERSION = :v201309
76
76
 
77
77
  begin
78
78
  get_account_hierarchy()
79
79
 
80
+ # Authorization error.
81
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
82
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
83
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
84
+ "to retrieve and store OAuth2 tokens."
85
+ puts "See this wiki page for more details:\n\n " +
86
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
87
+
80
88
  # HTTP errors.
81
89
  rescue AdsCommon::Errors::HttpError => e
82
90
  puts "HTTP Error: %s" % e
@@ -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 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 add an ad group level mobile bid modifier
22
+ # override for a campaign.
23
+ #
24
+ # Tags: AdGroupBidModifierService.mutate
25
+
26
+ require 'adwords_api'
27
+
28
+ def add_ad_group_bid_modifier(ad_group_id, bid_modifier)
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
+ bid_modifier_srv = adwords.service(:AdGroupBidModifierService, API_VERSION)
38
+
39
+ # Mobile criterion ID.
40
+ criterion_id = 30001
41
+
42
+ # Prepare to add an ad group level override.
43
+ operation = {
44
+ # Use 'ADD' to add a new modifier and 'SET' to update an existing one. A
45
+ # modifier can be removed with the 'REMOVE' operator.
46
+ :operator => 'ADD',
47
+ :operand => {
48
+ :ad_group_id => ad_group_id,
49
+ :criterion => {
50
+ :xsi_type => 'Platform',
51
+ :id => criterion_id
52
+ },
53
+ :bid_modifier => bid_modifier
54
+ }
55
+ }
56
+
57
+ # Add ad group level mobile bid modifier.
58
+ response = bid_modifier_srv.mutate([operation])
59
+ if response and response[:value]
60
+ modifier = response[:value].first
61
+ value = modifier[:bid_modifier] || 'unset'
62
+ puts ('Campaign ID %d, AdGroup ID %d, Criterion ID %d was updated with ' +
63
+ 'ad group level modifier: %s') %
64
+ [modifier[:campaign_id], modifier[:ad_group_id],
65
+ modifier[:criterion][:id], value]
66
+ else
67
+ puts 'No modifiers were added.'
68
+ end
69
+ end
70
+
71
+ if __FILE__ == $0
72
+ API_VERSION = :v201309
73
+
74
+ begin
75
+ # ID of an ad group to add an override for.
76
+ ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
77
+ # Bid modifier to override with.
78
+ bid_modifier = 1.5
79
+
80
+ add_ad_group_bid_modifier(ad_group_id, bid_modifier)
81
+
82
+ # Authorization error.
83
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
84
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
85
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
86
+ "to retrieve and store OAuth2 tokens."
87
+ puts "See this wiki page for more details:\n\n " +
88
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
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
@@ -0,0 +1,137 @@
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 code example creates a click-to-download ad, also known as an app
22
+ # promotion ad to a given ad group. To list ad groups, run get_ad_groups.rb.
23
+ #
24
+ # Tags: AdGroupAdService.mutate
25
+
26
+ require 'adwords_api'
27
+
28
+ def add_click_to_download_ad(ad_group_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_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
38
+
39
+ # Create the template elements for the ad. You can refer to
40
+ # https://developers.google.com/adwords/api/docs/appendix/templateads
41
+ # for the list of available template fields.
42
+ ad_data = {
43
+ :unique_name => 'adData',
44
+ :fields => [
45
+ {
46
+ :name => 'headline',
47
+ :field_text => 'Enjoy your drive in Mars',
48
+ :type => 'TEXT'
49
+ },
50
+ {
51
+ :name => 'description1',
52
+ :field_text => 'Realistic physics simulation',
53
+ :type => 'TEXT'
54
+ },
55
+ {
56
+ :name => 'description2',
57
+ :field_text => 'Race against players online',
58
+ :type => 'TEXT'
59
+ },
60
+ {
61
+ :name => 'appId',
62
+ :field_text => 'com.example.demogame',
63
+ :type => 'TEXT'
64
+ },
65
+ {
66
+ :name => 'appStore',
67
+ :field_text => '2',
68
+ :type => 'ENUM'
69
+ }
70
+ ]
71
+ }
72
+
73
+ # Create click to download ad.
74
+ click_to_download_app_ad = {
75
+ :xsi_type => 'TemplateAd',
76
+ :name => 'Ad for demo game',
77
+ :template_id => 353,
78
+ :url =>
79
+ 'http://play.google.com/store/apps/details?id=com.example.demogame',
80
+ :display_url => 'play.google.com',
81
+ :template_elements => [ad_data]
82
+ }
83
+
84
+ # Create ad group ad.
85
+ ad_group_ad = {
86
+ :ad_group_id => ad_group_id,
87
+ :ad => click_to_download_app_ad,
88
+ # Optional.
89
+ :status => 'PAUSED'
90
+ }
91
+
92
+ # Add ad.
93
+ response = ad_group_ad_srv.mutate([
94
+ {:operator => 'ADD', :operand => ad_group_ad}
95
+ ])
96
+ if response and response[:value]
97
+ response[:value].each do |ad|
98
+ puts "Added new click-to-download ad to ad group ID %d with url '%s'." %
99
+ [ad[:ad][:id], ad[:ad][:url]]
100
+ end
101
+ else
102
+ raise StandardError, 'No ads were added.'
103
+ end
104
+ end
105
+
106
+ if __FILE__ == $0
107
+ API_VERSION = :v201309
108
+
109
+ begin
110
+ # Ad group ID to add text ads to.
111
+ ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
112
+ add_click_to_download_ad(ad_group_id)
113
+
114
+ # Authorization error.
115
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
116
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
117
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
118
+ "to retrieve and store OAuth2 tokens."
119
+ puts "See this wiki page for more details:\n\n " +
120
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
121
+
122
+ # HTTP errors.
123
+ rescue AdsCommon::Errors::HttpError => e
124
+ puts "HTTP Error: %s" % e
125
+
126
+ # API errors.
127
+ rescue AdwordsApi::Errors::ApiException => e
128
+ puts "Message: %s" % e.message
129
+ puts 'Errors:'
130
+ e.errors.each_with_index do |error, index|
131
+ puts "\tError [%d]:" % (index + 1)
132
+ error.each do |field, value|
133
+ puts "\t\t%s: %s" % [field, value]
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,244 @@
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 adds a sitelinks feed and associates it with a campaign.
22
+ #
23
+ # Tags: CampaignFeedService.mutate, FeedItemService.mutate
24
+ # Tags: FeedMappingService.mutate, FeedService.mutate
25
+
26
+ require 'adwords_api'
27
+
28
+ def add_site_links(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
+ feed_srv = adwords.service(:FeedService, API_VERSION)
38
+ feed_item_srv = adwords.service(:FeedItemService, API_VERSION)
39
+ feed_mapping_srv = adwords.service(:FeedMappingService, API_VERSION)
40
+ campaign_feed_srv = adwords.service(:CampaignFeedService, API_VERSION)
41
+
42
+ sitelinks_data = {}
43
+
44
+ # Create site links feed first.
45
+ site_links_feed = {
46
+ :name => 'Feed For Site Links',
47
+ :attributes => [
48
+ {:type => 'STRING', :name => 'Link Text'},
49
+ {:type => 'URL', :name => 'Link URL'}
50
+ ]
51
+ }
52
+
53
+ response = feed_srv.mutate([
54
+ {:operator => 'ADD', :operand => site_links_feed}
55
+ ])
56
+ if response and response[:value]
57
+ feed = response[:value].first
58
+ # Attribute of type STRING.
59
+ link_text_feed_attribute_id = feed[:attributes][0][:id]
60
+ # Attribute of type URL.
61
+ link_url_feed_attribute_id = feed[:attributes][1][:id]
62
+ puts "Feed with name '%s' and ID %d was added with" %
63
+ [feed[:name], feed[:id]]
64
+ puts "\tText attribute ID %d and URL attribute ID %d." %
65
+ [link_text_feed_attribute_id, link_url_feed_attribute_id]
66
+ sitelinks_data[:feed_id] = feed[:id]
67
+ sitelinks_data[:link_text_feed_id] = link_text_feed_attribute_id
68
+ sitelinks_data[:link_url_feed_id] = link_url_feed_attribute_id
69
+ else
70
+ raise new StandardError, 'No feeds were added.'
71
+ end
72
+
73
+ # Create site links feed items.
74
+ items_data = [
75
+ {:text => 'Home', :url => 'http://www.example.com'},
76
+ {:text => 'Stores', :url => 'http://www.example.com/stores'},
77
+ {:text => 'On Sale', :url => 'http://www.example.com/sale'},
78
+ {:text => 'Support', :url => 'http://www.example.com/support'},
79
+ {:text => 'Products', :url => 'http://www.example.com/products'},
80
+ {:text => 'About', :url => 'http://www.example.com/about'}
81
+ ]
82
+
83
+ feed_items = items_data.map do |item|
84
+ {
85
+ :feed_id => sitelinks_data[:feed_id],
86
+ :attribute_values => [
87
+ {
88
+ :feed_attribute_id => sitelinks_data[:link_text_feed_id],
89
+ :string_value => item[:text]
90
+ },
91
+ {
92
+ :feed_attribute_id => sitelinks_data[:link_url_feed_id],
93
+ :string_value => item[:url]
94
+ }
95
+ ]
96
+ }
97
+ end
98
+
99
+ feed_items_operations = feed_items.map do |item|
100
+ {:operator => 'ADD', :operand => item}
101
+ end
102
+
103
+ response = feed_item_srv.mutate(feed_items_operations)
104
+ if response and response[:value]
105
+ sitelinks_data[:feed_item_ids] = []
106
+ response[:value].each do |feed_item|
107
+ puts 'Feed item with ID %d was added.' % feed_item[:feed_item_id]
108
+ sitelinks_data[:feed_item_ids] << feed_item[:feed_item_id]
109
+ end
110
+ else
111
+ raise new StandardError, 'No feed items were added.'
112
+ end
113
+
114
+ # Create site links feed mapping.
115
+ feed_mapping = {
116
+ :placeholder_type => PLACEHOLDER_SITELINKS,
117
+ :feed_id => sitelinks_data[:feed_id],
118
+ :attribute_field_mappings => [
119
+ {
120
+ :feed_attribute_id => sitelinks_data[:link_text_feed_id],
121
+ :field_id => PLACEHOLDER_FIELD_SITELINK_LINK_TEXT
122
+ },
123
+ {
124
+ :feed_attribute_id => sitelinks_data[:link_url_feed_id],
125
+ :field_id => PLACEHOLDER_FIELD_SITELINK_LINK_URL
126
+ }
127
+ ]
128
+ }
129
+
130
+ response = feed_mapping_srv.mutate([
131
+ {:operator => 'ADD', :operand => feed_mapping}
132
+ ])
133
+ if response and response[:value]
134
+ feed_mapping = response[:value].first
135
+ puts ('Feed mapping with ID %d and placeholder type %d was saved for feed' +
136
+ ' with ID %d.') % [
137
+ feed_mapping[:feed_mapping_id],
138
+ feed_mapping[:placeholder_type],
139
+ feed_mapping[:feed_id]
140
+ ]
141
+ else
142
+ raise new StandardError, 'No feed mappings were added.'
143
+ end
144
+
145
+ # Create site links campaign feed.
146
+ operands = sitelinks_data[:feed_item_ids].map do |feed_item_id|
147
+ {
148
+ :xsi_type => 'ConstantOperand',
149
+ :type => 'LONG',
150
+ :long_value => feed_item_id
151
+ }
152
+ end
153
+
154
+ feed_item_function = {
155
+ :operator => 'IN',
156
+ :lhs_operand => [
157
+ {:xsi_type => 'RequestContextOperand', :context_type => 'FEED_ITEM_ID'}
158
+ ],
159
+ :rhs_operand => operands
160
+ }
161
+
162
+ # Optional: to target to a platform, define a function and 'AND' it with the
163
+ # feed item ID link:
164
+ platform_function = {
165
+ :operator => 'EQUALS',
166
+ :lhs_operand => [
167
+ {:xsi_type => 'RequestContextOperand', :context_type => 'DEVICE_PLATFORM'}
168
+ ],
169
+ :rhs_operand => [
170
+ {
171
+ :xsi_type => 'ConstantOperand',
172
+ :type => 'STRING',
173
+ :string_value => 'Mobile'
174
+ }
175
+ ]
176
+ }
177
+ combined_function = {
178
+ :operator => 'AND',
179
+ :lhs_operand => [
180
+ {:xsi_type => 'FunctionOperand', :value => feed_item_function},
181
+ {:xsi_type => 'FunctionOperand', :value => platform_function}
182
+ ]
183
+ }
184
+
185
+ campaign_feed = {
186
+ :feed_id => sitelinks_data[:feed_id],
187
+ :campaign_id => campaign_id,
188
+ :matching_function => combined_function,
189
+ # Specifying placeholder types on the CampaignFeed allows the same feed
190
+ # to be used for different placeholders in different Campaigns.
191
+ :placeholder_types => [PLACEHOLDER_SITELINKS]
192
+ }
193
+
194
+ response = campaign_feed_srv.mutate([
195
+ {:operator => 'ADD', :operand => campaign_feed}
196
+ ])
197
+ if response and response[:value]
198
+ campaign_feed = response[:value].first
199
+ puts 'Campaign with ID %d was associated with feed with ID %d.' %
200
+ [campaign_feed[:campaign_id], campaign_feed[:feed_id]]
201
+ else
202
+ raise new StandardError, 'No campaign feeds were added.'
203
+ end
204
+ end
205
+
206
+ if __FILE__ == $0
207
+ API_VERSION = :v201309
208
+
209
+ # See the Placeholder reference page for a list of all the placeholder types
210
+ # and fields, see:
211
+ # https://developers.google.com/adwords/api/docs/appendix/placeholders
212
+ PLACEHOLDER_SITELINKS = 1
213
+ PLACEHOLDER_FIELD_SITELINK_LINK_TEXT = 1
214
+ PLACEHOLDER_FIELD_SITELINK_LINK_URL = 2
215
+
216
+ begin
217
+ # Campaign ID to add site link to.
218
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
219
+ add_site_links(campaign_id)
220
+
221
+ # Authorization error.
222
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
223
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
224
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
225
+ "to retrieve and store OAuth2 tokens."
226
+ puts "See this wiki page for more details:\n\n " +
227
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
228
+
229
+ # HTTP errors.
230
+ rescue AdsCommon::Errors::HttpError => e
231
+ puts "HTTP Error: %s" % e
232
+
233
+ # API errors.
234
+ rescue AdwordsApi::Errors::ApiException => e
235
+ puts "Message: %s" % e.message
236
+ puts 'Errors:'
237
+ e.errors.each_with_index do |error, index|
238
+ puts "\tError [%d]:" % (index + 1)
239
+ error.each do |field, value|
240
+ puts "\t\t%s: %s" % [field, value]
241
+ end
242
+ end
243
+ end
244
+ end