google-adwords-api 0.16.1 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (343) hide show
  1. checksums.yaml +8 -8
  2. data/ChangeLog +6 -1
  3. data/README.md +1 -1
  4. data/examples/v201502/account_management/create_account.rb +1 -1
  5. data/examples/v201502/account_management/get_account_hierarchy.rb +1 -1
  6. data/examples/v201502/reporting/parallel_report_download.rb +1 -1
  7. data/examples/v201506/account_management/create_account.rb +1 -1
  8. data/examples/v201506/account_management/get_account_hierarchy.rb +1 -1
  9. data/examples/v201506/reporting/parallel_report_download.rb +1 -1
  10. data/examples/v201509/account_management/create_account.rb +88 -0
  11. data/examples/v201509/account_management/get_account_changes.rb +139 -0
  12. data/examples/v201509/account_management/get_account_hierarchy.rb +94 -0
  13. data/examples/v201509/advanced_operations/add_ad_customizers.rb +184 -0
  14. data/examples/v201509/advanced_operations/add_ad_group_bid_modifier.rb +101 -0
  15. data/examples/v201509/advanced_operations/add_click_to_download_ad.rb +133 -0
  16. data/examples/v201509/advanced_operations/add_html5_ad.rb +137 -0
  17. data/examples/v201509/advanced_operations/add_text_ad_with_upgraded_urls.rb +134 -0
  18. data/examples/v201509/advanced_operations/create_and_attach_shared_keyword_set.rb +141 -0
  19. data/examples/v201509/advanced_operations/find_and_remove_criteria_from_shared_set.rb +174 -0
  20. data/examples/v201509/advanced_operations/get_ad_group_bid_modifiers.rb +102 -0
  21. data/examples/v201509/advanced_operations/upload_offline_conversions.rb +113 -0
  22. data/examples/v201509/advanced_operations/use_shared_bidding_strategy.rb +147 -0
  23. data/examples/v201509/basic_operations/add_ad_groups.rb +140 -0
  24. data/examples/v201509/basic_operations/add_campaigns.rb +139 -0
  25. data/examples/v201509/basic_operations/add_keywords.rb +114 -0
  26. data/examples/v201509/basic_operations/add_text_ads.rb +109 -0
  27. data/examples/v201509/basic_operations/get_ad_groups.rb +102 -0
  28. data/examples/v201509/basic_operations/get_campaigns.rb +97 -0
  29. data/examples/v201509/basic_operations/get_campaigns_with_awql.rb +89 -0
  30. data/examples/v201509/basic_operations/get_keywords.rb +109 -0
  31. data/examples/v201509/basic_operations/get_text_ads.rb +110 -0
  32. data/examples/v201509/basic_operations/pause_ad.rb +88 -0
  33. data/examples/v201509/basic_operations/remove_ad.rb +89 -0
  34. data/examples/v201509/basic_operations/remove_ad_group.rb +85 -0
  35. data/examples/v201509/basic_operations/remove_campaign.rb +87 -0
  36. data/examples/v201509/basic_operations/remove_keyword.rb +94 -0
  37. data/examples/v201509/basic_operations/update_ad_group.rb +85 -0
  38. data/examples/v201509/basic_operations/update_campaign.rb +86 -0
  39. data/examples/v201509/basic_operations/update_keyword.rb +106 -0
  40. data/examples/v201509/campaign_management/add_campaign_labels.rb +82 -0
  41. data/examples/v201509/campaign_management/add_complete_campaigns_using_batch_job.rb +362 -0
  42. data/examples/v201509/campaign_management/add_experiment.rb +162 -0
  43. data/examples/v201509/campaign_management/add_keywords_in_bulk.rb +153 -0
  44. data/examples/v201509/campaign_management/get_all_disapproved_ads.rb +97 -0
  45. data/examples/v201509/campaign_management/get_all_disapproved_ads_with_awql.rb +89 -0
  46. data/examples/v201509/campaign_management/get_campaigns_by_label.rb +108 -0
  47. data/examples/v201509/campaign_management/promote_experiment.rb +81 -0
  48. data/examples/v201509/campaign_management/set_ad_parameters.rb +118 -0
  49. data/examples/v201509/campaign_management/set_criterion_bid_modifier.rb +104 -0
  50. data/examples/v201509/campaign_management/validate_text_ad.rb +110 -0
  51. data/examples/v201509/error_handling/handle_partial_failures.rb +130 -0
  52. data/examples/v201509/error_handling/handle_policy_violation_error.rb +141 -0
  53. data/examples/v201509/extensions/add_google_my_business_location_extensions.rb +193 -0
  54. data/examples/v201509/extensions/add_site_links.rb +164 -0
  55. data/examples/v201509/extensions/add_site_links_using_feeds.rb +281 -0
  56. data/examples/v201509/migration/migrate_to_extension_settings.rb +386 -0
  57. data/examples/v201509/migration/upgrade_ad_url.rb +93 -0
  58. data/examples/v201509/misc/get_all_images_and_videos.rb +104 -0
  59. data/examples/v201509/misc/setup_oauth2.rb +84 -0
  60. data/examples/v201509/misc/upload_image.rb +93 -0
  61. data/examples/v201509/misc/upload_media_bundle.rb +90 -0
  62. data/examples/v201509/misc/use_oauth2_jwt.rb +93 -0
  63. data/examples/v201509/misc/use_runtime_config.rb +92 -0
  64. data/examples/v201509/optimization/estimate_keyword_traffic.rb +146 -0
  65. data/examples/v201509/optimization/get_keyword_bid_simulations.rb +95 -0
  66. data/examples/v201509/optimization/get_keyword_ideas.rb +126 -0
  67. data/examples/v201509/remarketing/add_audience.rb +118 -0
  68. data/examples/v201509/remarketing/add_conversion_tracker.rb +98 -0
  69. data/examples/v201509/remarketing/add_crm_based_user_list.rb +121 -0
  70. data/examples/v201509/remarketing/add_rule_based_user_lists.rb +167 -0
  71. data/examples/v201509/reporting/download_criteria_report.rb +92 -0
  72. data/examples/v201509/reporting/download_criteria_report_with_awql.rb +93 -0
  73. data/examples/v201509/reporting/get_report_fields.rb +75 -0
  74. data/examples/v201509/reporting/parallel_report_download.rb +166 -0
  75. data/examples/v201509/shopping_campaigns/add_product_partition_tree.rb +267 -0
  76. data/examples/v201509/shopping_campaigns/add_product_scope.rb +129 -0
  77. data/examples/v201509/shopping_campaigns/add_shopping_campaign.rb +129 -0
  78. data/examples/v201509/shopping_campaigns/get_product_category_taxonomy.rb +115 -0
  79. data/examples/v201509/targeting/add_campaign_targeting_criteria.rb +180 -0
  80. data/examples/v201509/targeting/add_demographic_targeting_criteria.rb +112 -0
  81. data/examples/v201509/targeting/get_campaign_targeting_criteria.rb +106 -0
  82. data/examples/v201509/targeting/get_targetable_languages_and_carriers.rb +89 -0
  83. data/examples/v201509/targeting/lookup_location.rb +108 -0
  84. data/lib/adwords_api/api_config.rb +91 -4
  85. data/lib/adwords_api/batch_job_utils.rb +234 -0
  86. data/lib/adwords_api/errors.rb +3 -0
  87. data/lib/adwords_api/report_utils.rb +22 -6
  88. data/lib/adwords_api/v201502/account_label_service.rb +9 -1
  89. data/lib/adwords_api/v201502/account_label_service_registry.rb +1 -1
  90. data/lib/adwords_api/v201502/ad_customizer_feed_service.rb +9 -1
  91. data/lib/adwords_api/v201502/ad_customizer_feed_service_registry.rb +1 -1
  92. data/lib/adwords_api/v201502/ad_group_ad_service.rb +21 -1
  93. data/lib/adwords_api/v201502/ad_group_ad_service_registry.rb +2 -2
  94. data/lib/adwords_api/v201502/ad_group_bid_modifier_service.rb +13 -1
  95. data/lib/adwords_api/v201502/ad_group_bid_modifier_service_registry.rb +1 -1
  96. data/lib/adwords_api/v201502/ad_group_criterion_service.rb +17 -1
  97. data/lib/adwords_api/v201502/ad_group_criterion_service_registry.rb +1 -1
  98. data/lib/adwords_api/v201502/ad_group_extension_setting_service.rb +13 -1
  99. data/lib/adwords_api/v201502/ad_group_extension_setting_service_registry.rb +2 -2
  100. data/lib/adwords_api/v201502/ad_group_feed_service.rb +13 -1
  101. data/lib/adwords_api/v201502/ad_group_feed_service_registry.rb +1 -1
  102. data/lib/adwords_api/v201502/ad_group_service.rb +17 -1
  103. data/lib/adwords_api/v201502/ad_group_service_registry.rb +2 -2
  104. data/lib/adwords_api/v201502/ad_param_service.rb +9 -1
  105. data/lib/adwords_api/v201502/ad_param_service_registry.rb +1 -1
  106. data/lib/adwords_api/v201502/adwords_user_list_service.rb +9 -1
  107. data/lib/adwords_api/v201502/adwords_user_list_service_registry.rb +1 -1
  108. data/lib/adwords_api/v201502/bidding_strategy_service.rb +13 -1
  109. data/lib/adwords_api/v201502/bidding_strategy_service_registry.rb +1 -1
  110. data/lib/adwords_api/v201502/budget_order_service.rb +13 -1
  111. data/lib/adwords_api/v201502/budget_order_service_registry.rb +1 -1
  112. data/lib/adwords_api/v201502/budget_service.rb +13 -1
  113. data/lib/adwords_api/v201502/budget_service_registry.rb +1 -1
  114. data/lib/adwords_api/v201502/campaign_criterion_service.rb +13 -1
  115. data/lib/adwords_api/v201502/campaign_criterion_service_registry.rb +1 -1
  116. data/lib/adwords_api/v201502/campaign_extension_setting_service.rb +13 -1
  117. data/lib/adwords_api/v201502/campaign_extension_setting_service_registry.rb +2 -2
  118. data/lib/adwords_api/v201502/campaign_feed_service.rb +13 -1
  119. data/lib/adwords_api/v201502/campaign_feed_service_registry.rb +1 -1
  120. data/lib/adwords_api/v201502/campaign_service.rb +17 -1
  121. data/lib/adwords_api/v201502/campaign_service_registry.rb +2 -2
  122. data/lib/adwords_api/v201502/campaign_shared_set_service.rb +9 -1
  123. data/lib/adwords_api/v201502/campaign_shared_set_service_registry.rb +1 -1
  124. data/lib/adwords_api/v201502/constant_data_service.rb +37 -1
  125. data/lib/adwords_api/v201502/constant_data_service_registry.rb +1 -1
  126. data/lib/adwords_api/v201502/conversion_tracker_service.rb +13 -1
  127. data/lib/adwords_api/v201502/conversion_tracker_service_registry.rb +1 -1
  128. data/lib/adwords_api/v201502/customer_extension_setting_service.rb +13 -1
  129. data/lib/adwords_api/v201502/customer_extension_setting_service_registry.rb +2 -2
  130. data/lib/adwords_api/v201502/customer_feed_service.rb +13 -1
  131. data/lib/adwords_api/v201502/customer_feed_service_registry.rb +1 -1
  132. data/lib/adwords_api/v201502/customer_service.rb +9 -1
  133. data/lib/adwords_api/v201502/customer_service_registry.rb +1 -1
  134. data/lib/adwords_api/v201502/customer_sync_service.rb +5 -1
  135. data/lib/adwords_api/v201502/customer_sync_service_registry.rb +1 -1
  136. data/lib/adwords_api/v201502/data_service.rb +25 -1
  137. data/lib/adwords_api/v201502/data_service_registry.rb +1 -1
  138. data/lib/adwords_api/v201502/experiment_service.rb +9 -1
  139. data/lib/adwords_api/v201502/experiment_service_registry.rb +1 -1
  140. data/lib/adwords_api/v201502/feed_item_service.rb +13 -1
  141. data/lib/adwords_api/v201502/feed_item_service_registry.rb +1 -1
  142. data/lib/adwords_api/v201502/feed_mapping_service.rb +13 -1
  143. data/lib/adwords_api/v201502/feed_mapping_service_registry.rb +1 -1
  144. data/lib/adwords_api/v201502/feed_service.rb +13 -1
  145. data/lib/adwords_api/v201502/feed_service_registry.rb +1 -1
  146. data/lib/adwords_api/v201502/geo_location_service.rb +5 -1
  147. data/lib/adwords_api/v201502/geo_location_service_registry.rb +1 -1
  148. data/lib/adwords_api/v201502/label_service.rb +13 -1
  149. data/lib/adwords_api/v201502/label_service_registry.rb +1 -1
  150. data/lib/adwords_api/v201502/location_criterion_service.rb +9 -1
  151. data/lib/adwords_api/v201502/location_criterion_service_registry.rb +2 -2
  152. data/lib/adwords_api/v201502/managed_customer_service.rb +25 -1
  153. data/lib/adwords_api/v201502/managed_customer_service_registry.rb +1 -1
  154. data/lib/adwords_api/v201502/media_service.rb +13 -1
  155. data/lib/adwords_api/v201502/media_service_registry.rb +1 -1
  156. data/lib/adwords_api/v201502/mutate_job_service.rb +13 -1
  157. data/lib/adwords_api/v201502/mutate_job_service_registry.rb +2 -2
  158. data/lib/adwords_api/v201502/offline_conversion_feed_service.rb +5 -1
  159. data/lib/adwords_api/v201502/offline_conversion_feed_service_registry.rb +1 -1
  160. data/lib/adwords_api/v201502/report_definition_service.rb +5 -1
  161. data/lib/adwords_api/v201502/report_definition_service_registry.rb +1 -1
  162. data/lib/adwords_api/v201502/shared_criterion_service.rb +9 -1
  163. data/lib/adwords_api/v201502/shared_criterion_service_registry.rb +1 -1
  164. data/lib/adwords_api/v201502/shared_set_service.rb +9 -1
  165. data/lib/adwords_api/v201502/shared_set_service_registry.rb +1 -1
  166. data/lib/adwords_api/v201502/targeting_idea_service.rb +5 -1
  167. data/lib/adwords_api/v201502/targeting_idea_service_registry.rb +2 -2
  168. data/lib/adwords_api/v201502/traffic_estimator_service.rb +5 -1
  169. data/lib/adwords_api/v201502/traffic_estimator_service_registry.rb +2 -2
  170. data/lib/adwords_api/v201506/account_label_service.rb +9 -1
  171. data/lib/adwords_api/v201506/account_label_service_registry.rb +1 -1
  172. data/lib/adwords_api/v201506/ad_customizer_feed_service.rb +9 -1
  173. data/lib/adwords_api/v201506/ad_customizer_feed_service_registry.rb +1 -1
  174. data/lib/adwords_api/v201506/ad_group_ad_service.rb +21 -1
  175. data/lib/adwords_api/v201506/ad_group_ad_service_registry.rb +2 -2
  176. data/lib/adwords_api/v201506/ad_group_bid_modifier_service.rb +13 -1
  177. data/lib/adwords_api/v201506/ad_group_bid_modifier_service_registry.rb +1 -1
  178. data/lib/adwords_api/v201506/ad_group_criterion_service.rb +17 -1
  179. data/lib/adwords_api/v201506/ad_group_criterion_service_registry.rb +1 -1
  180. data/lib/adwords_api/v201506/ad_group_extension_setting_service.rb +13 -1
  181. data/lib/adwords_api/v201506/ad_group_extension_setting_service_registry.rb +2 -2
  182. data/lib/adwords_api/v201506/ad_group_feed_service.rb +13 -1
  183. data/lib/adwords_api/v201506/ad_group_feed_service_registry.rb +1 -1
  184. data/lib/adwords_api/v201506/ad_group_service.rb +17 -1
  185. data/lib/adwords_api/v201506/ad_group_service_registry.rb +2 -2
  186. data/lib/adwords_api/v201506/ad_param_service.rb +9 -1
  187. data/lib/adwords_api/v201506/ad_param_service_registry.rb +1 -1
  188. data/lib/adwords_api/v201506/adwords_user_list_service.rb +9 -1
  189. data/lib/adwords_api/v201506/adwords_user_list_service_registry.rb +1 -1
  190. data/lib/adwords_api/v201506/bidding_strategy_service.rb +13 -1
  191. data/lib/adwords_api/v201506/bidding_strategy_service_registry.rb +1 -1
  192. data/lib/adwords_api/v201506/budget_order_service.rb +13 -1
  193. data/lib/adwords_api/v201506/budget_order_service_registry.rb +1 -1
  194. data/lib/adwords_api/v201506/budget_service.rb +13 -1
  195. data/lib/adwords_api/v201506/budget_service_registry.rb +1 -1
  196. data/lib/adwords_api/v201506/campaign_criterion_service.rb +13 -1
  197. data/lib/adwords_api/v201506/campaign_criterion_service_registry.rb +1 -1
  198. data/lib/adwords_api/v201506/campaign_extension_setting_service.rb +13 -1
  199. data/lib/adwords_api/v201506/campaign_extension_setting_service_registry.rb +2 -2
  200. data/lib/adwords_api/v201506/campaign_feed_service.rb +13 -1
  201. data/lib/adwords_api/v201506/campaign_feed_service_registry.rb +1 -1
  202. data/lib/adwords_api/v201506/campaign_service.rb +17 -1
  203. data/lib/adwords_api/v201506/campaign_service_registry.rb +1 -1
  204. data/lib/adwords_api/v201506/campaign_shared_set_service.rb +13 -1
  205. data/lib/adwords_api/v201506/campaign_shared_set_service_registry.rb +1 -1
  206. data/lib/adwords_api/v201506/constant_data_service.rb +37 -1
  207. data/lib/adwords_api/v201506/constant_data_service_registry.rb +1 -1
  208. data/lib/adwords_api/v201506/conversion_tracker_service.rb +13 -1
  209. data/lib/adwords_api/v201506/conversion_tracker_service_registry.rb +1 -1
  210. data/lib/adwords_api/v201506/customer_extension_setting_service.rb +13 -1
  211. data/lib/adwords_api/v201506/customer_extension_setting_service_registry.rb +2 -2
  212. data/lib/adwords_api/v201506/customer_feed_service.rb +13 -1
  213. data/lib/adwords_api/v201506/customer_feed_service_registry.rb +1 -1
  214. data/lib/adwords_api/v201506/customer_service.rb +9 -1
  215. data/lib/adwords_api/v201506/customer_service_registry.rb +1 -1
  216. data/lib/adwords_api/v201506/customer_sync_service.rb +5 -1
  217. data/lib/adwords_api/v201506/customer_sync_service_registry.rb +1 -1
  218. data/lib/adwords_api/v201506/data_service.rb +25 -1
  219. data/lib/adwords_api/v201506/data_service_registry.rb +1 -1
  220. data/lib/adwords_api/v201506/experiment_service.rb +9 -1
  221. data/lib/adwords_api/v201506/experiment_service_registry.rb +1 -1
  222. data/lib/adwords_api/v201506/feed_item_service.rb +13 -1
  223. data/lib/adwords_api/v201506/feed_item_service_registry.rb +1 -1
  224. data/lib/adwords_api/v201506/feed_mapping_service.rb +13 -1
  225. data/lib/adwords_api/v201506/feed_mapping_service_registry.rb +1 -1
  226. data/lib/adwords_api/v201506/feed_service.rb +13 -1
  227. data/lib/adwords_api/v201506/feed_service_registry.rb +1 -1
  228. data/lib/adwords_api/v201506/geo_location_service.rb +5 -1
  229. data/lib/adwords_api/v201506/geo_location_service_registry.rb +1 -1
  230. data/lib/adwords_api/v201506/label_service.rb +13 -1
  231. data/lib/adwords_api/v201506/label_service_registry.rb +1 -1
  232. data/lib/adwords_api/v201506/location_criterion_service.rb +9 -1
  233. data/lib/adwords_api/v201506/location_criterion_service_registry.rb +2 -2
  234. data/lib/adwords_api/v201506/managed_customer_service.rb +25 -1
  235. data/lib/adwords_api/v201506/managed_customer_service_registry.rb +1 -1
  236. data/lib/adwords_api/v201506/media_service.rb +13 -1
  237. data/lib/adwords_api/v201506/media_service_registry.rb +1 -1
  238. data/lib/adwords_api/v201506/mutate_job_service.rb +13 -1
  239. data/lib/adwords_api/v201506/mutate_job_service_registry.rb +1 -1
  240. data/lib/adwords_api/v201506/offline_conversion_feed_service.rb +5 -1
  241. data/lib/adwords_api/v201506/offline_conversion_feed_service_registry.rb +1 -1
  242. data/lib/adwords_api/v201506/report_definition_service.rb +5 -1
  243. data/lib/adwords_api/v201506/report_definition_service_registry.rb +1 -1
  244. data/lib/adwords_api/v201506/shared_criterion_service.rb +13 -1
  245. data/lib/adwords_api/v201506/shared_criterion_service_registry.rb +1 -1
  246. data/lib/adwords_api/v201506/shared_set_service.rb +13 -1
  247. data/lib/adwords_api/v201506/shared_set_service_registry.rb +1 -1
  248. data/lib/adwords_api/v201506/targeting_idea_service.rb +5 -1
  249. data/lib/adwords_api/v201506/targeting_idea_service_registry.rb +1 -1
  250. data/lib/adwords_api/v201506/traffic_estimator_service.rb +5 -1
  251. data/lib/adwords_api/v201506/traffic_estimator_service_registry.rb +1 -1
  252. data/lib/adwords_api/v201509/account_label_service.rb +46 -0
  253. data/lib/adwords_api/v201509/account_label_service_registry.rb +46 -0
  254. data/lib/adwords_api/v201509/ad_customizer_feed_service.rb +46 -0
  255. data/lib/adwords_api/v201509/ad_customizer_feed_service_registry.rb +46 -0
  256. data/lib/adwords_api/v201509/ad_group_ad_service.rb +70 -0
  257. data/lib/adwords_api/v201509/ad_group_ad_service_registry.rb +46 -0
  258. data/lib/adwords_api/v201509/ad_group_bid_modifier_service.rb +54 -0
  259. data/lib/adwords_api/v201509/ad_group_bid_modifier_service_registry.rb +46 -0
  260. data/lib/adwords_api/v201509/ad_group_criterion_service.rb +62 -0
  261. data/lib/adwords_api/v201509/ad_group_criterion_service_registry.rb +46 -0
  262. data/lib/adwords_api/v201509/ad_group_extension_setting_service.rb +54 -0
  263. data/lib/adwords_api/v201509/ad_group_extension_setting_service_registry.rb +46 -0
  264. data/lib/adwords_api/v201509/ad_group_feed_service.rb +54 -0
  265. data/lib/adwords_api/v201509/ad_group_feed_service_registry.rb +46 -0
  266. data/lib/adwords_api/v201509/ad_group_service.rb +62 -0
  267. data/lib/adwords_api/v201509/ad_group_service_registry.rb +46 -0
  268. data/lib/adwords_api/v201509/ad_param_service.rb +46 -0
  269. data/lib/adwords_api/v201509/ad_param_service_registry.rb +46 -0
  270. data/lib/adwords_api/v201509/adwords_user_list_service.rb +54 -0
  271. data/lib/adwords_api/v201509/adwords_user_list_service_registry.rb +46 -0
  272. data/lib/adwords_api/v201509/batch_job_service.rb +54 -0
  273. data/lib/adwords_api/v201509/batch_job_service_registry.rb +46 -0
  274. data/lib/adwords_api/v201509/bidding_strategy_service.rb +54 -0
  275. data/lib/adwords_api/v201509/bidding_strategy_service_registry.rb +46 -0
  276. data/lib/adwords_api/v201509/budget_order_service.rb +54 -0
  277. data/lib/adwords_api/v201509/budget_order_service_registry.rb +46 -0
  278. data/lib/adwords_api/v201509/budget_service.rb +54 -0
  279. data/lib/adwords_api/v201509/budget_service_registry.rb +46 -0
  280. data/lib/adwords_api/v201509/campaign_criterion_service.rb +54 -0
  281. data/lib/adwords_api/v201509/campaign_criterion_service_registry.rb +46 -0
  282. data/lib/adwords_api/v201509/campaign_extension_setting_service.rb +54 -0
  283. data/lib/adwords_api/v201509/campaign_extension_setting_service_registry.rb +46 -0
  284. data/lib/adwords_api/v201509/campaign_feed_service.rb +54 -0
  285. data/lib/adwords_api/v201509/campaign_feed_service_registry.rb +46 -0
  286. data/lib/adwords_api/v201509/campaign_service.rb +62 -0
  287. data/lib/adwords_api/v201509/campaign_service_registry.rb +46 -0
  288. data/lib/adwords_api/v201509/campaign_shared_set_service.rb +54 -0
  289. data/lib/adwords_api/v201509/campaign_shared_set_service_registry.rb +46 -0
  290. data/lib/adwords_api/v201509/constant_data_service.rb +102 -0
  291. data/lib/adwords_api/v201509/constant_data_service_registry.rb +46 -0
  292. data/lib/adwords_api/v201509/conversion_tracker_service.rb +54 -0
  293. data/lib/adwords_api/v201509/conversion_tracker_service_registry.rb +46 -0
  294. data/lib/adwords_api/v201509/customer_extension_setting_service.rb +54 -0
  295. data/lib/adwords_api/v201509/customer_extension_setting_service_registry.rb +46 -0
  296. data/lib/adwords_api/v201509/customer_feed_service.rb +54 -0
  297. data/lib/adwords_api/v201509/customer_feed_service_registry.rb +46 -0
  298. data/lib/adwords_api/v201509/customer_service.rb +46 -0
  299. data/lib/adwords_api/v201509/customer_service_registry.rb +46 -0
  300. data/lib/adwords_api/v201509/customer_sync_service.rb +38 -0
  301. data/lib/adwords_api/v201509/customer_sync_service_registry.rb +47 -0
  302. data/lib/adwords_api/v201509/data_service.rb +78 -0
  303. data/lib/adwords_api/v201509/data_service_registry.rb +46 -0
  304. data/lib/adwords_api/v201509/experiment_service.rb +46 -0
  305. data/lib/adwords_api/v201509/experiment_service_registry.rb +46 -0
  306. data/lib/adwords_api/v201509/feed_item_service.rb +54 -0
  307. data/lib/adwords_api/v201509/feed_item_service_registry.rb +46 -0
  308. data/lib/adwords_api/v201509/feed_mapping_service.rb +54 -0
  309. data/lib/adwords_api/v201509/feed_mapping_service_registry.rb +46 -0
  310. data/lib/adwords_api/v201509/feed_service.rb +54 -0
  311. data/lib/adwords_api/v201509/feed_service_registry.rb +46 -0
  312. data/lib/adwords_api/v201509/label_service.rb +54 -0
  313. data/lib/adwords_api/v201509/label_service_registry.rb +46 -0
  314. data/lib/adwords_api/v201509/location_criterion_service.rb +46 -0
  315. data/lib/adwords_api/v201509/location_criterion_service_registry.rb +46 -0
  316. data/lib/adwords_api/v201509/managed_customer_service.rb +78 -0
  317. data/lib/adwords_api/v201509/managed_customer_service_registry.rb +46 -0
  318. data/lib/adwords_api/v201509/media_service.rb +54 -0
  319. data/lib/adwords_api/v201509/media_service_registry.rb +46 -0
  320. data/lib/adwords_api/v201509/mutate_job_service.rb +54 -0
  321. data/lib/adwords_api/v201509/mutate_job_service_registry.rb +46 -0
  322. data/lib/adwords_api/v201509/offline_conversion_feed_service.rb +38 -0
  323. data/lib/adwords_api/v201509/offline_conversion_feed_service_registry.rb +46 -0
  324. data/lib/adwords_api/v201509/report_definition_service.rb +38 -0
  325. data/lib/adwords_api/v201509/report_definition_service_registry.rb +46 -0
  326. data/lib/adwords_api/v201509/shared_criterion_service.rb +54 -0
  327. data/lib/adwords_api/v201509/shared_criterion_service_registry.rb +46 -0
  328. data/lib/adwords_api/v201509/shared_set_service.rb +54 -0
  329. data/lib/adwords_api/v201509/shared_set_service_registry.rb +46 -0
  330. data/lib/adwords_api/v201509/targeting_idea_service.rb +38 -0
  331. data/lib/adwords_api/v201509/targeting_idea_service_registry.rb +46 -0
  332. data/lib/adwords_api/v201509/traffic_estimator_service.rb +38 -0
  333. data/lib/adwords_api/v201509/traffic_estimator_service_registry.rb +46 -0
  334. data/lib/adwords_api/version.rb +1 -1
  335. data/lib/adwords_api.rb +16 -0
  336. data/test/adwords_api/test_batch_job_utils.rb +95 -0
  337. data/test/templates/v201502/basic_operations_get_campaigns.def +1 -1
  338. data/test/templates/v201502/misc_use_oauth2_service_account.def +1 -1
  339. data/test/templates/v201506/basic_operations_get_campaigns.def +1 -1
  340. data/test/templates/v201506/misc_use_oauth2_service_account.def +1 -1
  341. data/test/templates/v201509/basic_operations_get_campaigns.def +116 -0
  342. data/test/templates/v201509/misc_use_oauth2_service_account.def +131 -0
  343. metadata +166 -5
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Y2U2NzY5N2U3ZjU5M2FhODMzODJkMjkwNDMzNGYzZjgxMDAzODk2Ng==
4
+ YWE0OTA1NTlhMzhjOTI1YjJmODhlZThjMWU2YjNhNTc1MjgzNmNkZA==
5
5
  data.tar.gz: !binary |-
6
- Y2ZiZTU2ZGY5ZDA5ZTNmMWMzOTIxMWJiYzgyZWIwOTBkNmY2ZGVhYg==
6
+ NThjZDRkYmNiMjQyY2E5ZTIzM2VkMmE1MWE1OGI3ZTFjZGFkOGVjYQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ODA4NjA4MTNkYTljYjg2YmI3ODY0OGViODVmZDIxZGMwYzIwNTkyMjM0NGJj
10
- YzM3YTZmZmMzMDAxNmQ4MDllZDJiY2VlOWE4OTY5MDFhOWE2OWI1ZjNiMzA4
11
- Y2Y2Yzc5ZTE5YWQwMDdiOTJhZGQ2Yzg1ZDFhOTMwNDg3M2JlMjc=
9
+ Y2IzYTNjMjE1ZDZmYjEzNWM5YzhlYTYzNjlhYzQ2MGUxOTM0ZGMxN2U4OWUz
10
+ ZTc4NTZlZDlhZjI5YWIzMzcxMWQ4OTJiZjliYzE5ZDhhYzU2NWQyNTA1ZDQ5
11
+ ZDcyMDFjZWUyOGViYzM1ZDlkOTEwNTE2ZjhkY2IxZDI5MmEzZTA=
12
12
  data.tar.gz: !binary |-
13
- NzEwN2M0MTcyZGQyMTQ0NjUwOGRjOWQzMDlhNjY4NGM1ZmNjZGM2MGQxYTJk
14
- Y2RlMThiMTBkYTYyM2ZiNzFjNWExMzk4NDNlMGFkMDZhZWVlMDI1NTZlMTBj
15
- NWI2YzlhYjQzNDBmMGFhMDUyZmM5ZmEzM2FiZjFmNmU3NjQ2MDg=
13
+ ZjIxYTIwYmNiMDJmZmQxMDI0ZGUzNTM3ZTdhODIwZGI5OWQ5YmFmOTUwYzQ5
14
+ MmNlMDU2ODZmZTBjN2ViOTJiYjBmZjMxYTIzM2ZlZmMwZDY0NzA0MjFiZDg0
15
+ ODlmY2FmZTliN2Y4NjE5Yzc0ZjVkY2Y3ZGZmZmJhZTYzZTk3MWE=
data/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ 0.17.0:
2
+ - Support and examples for v201509.
3
+ - Require google-ads-common 0.11.0 or later from now on.
4
+ - Updating report_utils for new version of nori in ads_common.
5
+
1
6
  0.16.1:
2
7
  - General file cleanup.
3
8
  - Improved errors handling (based on GitHub pull request).
@@ -10,7 +15,7 @@
10
15
  behavior).
11
16
 
12
17
  0.15.2:
13
- - Support and examples for v201502.
18
+ - Support and examples for v201506.
14
19
  - Added support for including zero impression rows in reports via HTTP header.
15
20
 
16
21
  0.15.1:
data/README.md CHANGED
@@ -26,7 +26,7 @@ AdWords library, which will be installed automatically.
26
26
 
27
27
  The following gem libraries are required:
28
28
 
29
- - savon
29
+ - google-ads-savon
30
30
  - google-ads-common
31
31
 
32
32
 
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
  # This example illustrates how to create an account. Note by default this
20
- # account will only be accessible via parent MCC.
20
+ # account will only be accessible via parent AdWords manager account.
21
21
 
22
22
  require 'adwords_api'
23
23
  require 'adwords_api/utils'
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
  # This example illustrates how to retrieve the account hierarchy under an
20
- # account. This example needs to be run against an MCC account.
20
+ # account. This example needs to be run against an AdWords manager account.
21
21
 
22
22
  require 'adwords_api'
23
23
  require 'adwords_api/utils'
@@ -18,7 +18,7 @@
18
18
  #
19
19
  # This example gets and downloads an Ad Hoc report from a XML report definition
20
20
  # for all accounts in hierarchy in multiple parallel threads. This example
21
- # needs to be run against an MCC account.
21
+ # needs to be run against an AdWords manager account.
22
22
 
23
23
  require 'thread'
24
24
 
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
  # This example illustrates how to create an account. Note by default this
20
- # account will only be accessible via parent MCC.
20
+ # account will only be accessible via parent AdWords manager account.
21
21
 
22
22
  require 'adwords_api'
23
23
  require 'adwords_api/utils'
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
  # This example illustrates how to retrieve the account hierarchy under an
20
- # account. This example needs to be run against an MCC account.
20
+ # account. This example needs to be run against an AdWords manager account.
21
21
 
22
22
  require 'adwords_api'
23
23
  require 'adwords_api/utils'
@@ -18,7 +18,7 @@
18
18
  #
19
19
  # This example gets and downloads an Ad Hoc report from a XML report definition
20
20
  # for all accounts in hierarchy in multiple parallel threads. This example
21
- # needs to be run against an MCC account.
21
+ # needs to be run against an AdWords manager account.
22
22
 
23
23
  require 'thread'
24
24
 
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
5
+ #
6
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
+ # implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ # This example illustrates how to create an account. Note by default this
20
+ # account will only be accessible via parent AdWords manager account.
21
+
22
+ require 'adwords_api'
23
+ require 'adwords_api/utils'
24
+
25
+ def create_account()
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
+ managed_customer_srv = adwords.service(:ManagedCustomerService, API_VERSION)
35
+
36
+ # Create a local Customer object.
37
+ customer = {
38
+ :name => 'Account created with ManagedCustomerService',
39
+ :currency_code => 'EUR',
40
+ :date_time_zone => 'Europe/London'
41
+ }
42
+
43
+ # Prepare operation to create an account.
44
+ operation = {
45
+ :operator => 'ADD',
46
+ :operand => customer
47
+ }
48
+
49
+ # Create the account. It is possible to create multiple accounts with one
50
+ # request by sending an array of operations.
51
+ response = managed_customer_srv.mutate([operation])
52
+
53
+ response[:value].each do |new_account|
54
+ puts "Account with customer ID '%s' was successfully created." %
55
+ AdwordsApi::Utils.format_id(new_account[:customer_id])
56
+ end
57
+ end
58
+
59
+ if __FILE__ == $0
60
+ API_VERSION = :v201509
61
+
62
+ begin
63
+ create_account()
64
+
65
+ # Authorization error.
66
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
67
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
68
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
69
+ "to retrieve and store OAuth2 tokens."
70
+ puts "See this wiki page for more details:\n\n " +
71
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/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
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
5
+ #
6
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
+ # implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ # This example gets all account changes that happened within the last 24 hours,
20
+ # for all your campaigns.
21
+
22
+ require 'adwords_api'
23
+ require 'date'
24
+ require 'pp'
25
+
26
+ def get_account_changes()
27
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
28
+ # when called without parameters.
29
+ adwords = AdwordsApi::Api.new
30
+
31
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
32
+ # the configuration file or provide your own logger:
33
+ # adwords.logger = Logger.new('adwords_xml.log')
34
+
35
+ campaign_srv = adwords.service(:CampaignService, API_VERSION)
36
+ customer_sync_srv = adwords.service(:CustomerSyncService, API_VERSION)
37
+
38
+ today_at_midnight = DateTime.parse(Date.today.to_s)
39
+ yesterday_at_midnight = DateTime.parse((Date.today - 1).to_s)
40
+ min_date_time = yesterday_at_midnight.strftime("%Y%m%d %H%M%S")
41
+ max_date_time = today_at_midnight.strftime("%Y%m%d %H%M%S")
42
+
43
+ # Get all the campaigns for this account.
44
+ selector = {
45
+ :fields => ['Id']
46
+ }
47
+ response = campaign_srv.get(selector)
48
+
49
+ campaign_ids = []
50
+
51
+ if response and response[:entries]
52
+ campaign_ids = response[:entries].map { |campaign| campaign[:id] }
53
+ else
54
+ raise StandardError, 'No campaigns were found.'
55
+ end
56
+
57
+ # Create a selector for CustomerSyncService.
58
+ selector = {
59
+ :campaign_ids => campaign_ids,
60
+ :date_time_range => {
61
+ :min => min_date_time,
62
+ :max => max_date_time
63
+ }
64
+ }
65
+
66
+ # Get all account changes for the campaigns.
67
+ campaign_changes = customer_sync_srv.get(selector)
68
+
69
+ # Display changes.
70
+ if campaign_changes
71
+ puts "Most recent change: %s" % campaign_changes[:last_change_timestamp]
72
+ campaign_changes[:changed_campaigns].each do |campaign|
73
+ puts "Campaign with ID %d was changed:" % campaign[:campaign_id]
74
+ puts "\tCampaign change status: '%s'" % campaign[:campaign_change_status]
75
+ unless ['NEW', 'FIELDS_UNCHANGED'].include?(
76
+ campaign[:campaign_change_status])
77
+ puts "\tAdded ad extensions: '%s'" %
78
+ campaign[:added_ad_extensions].pretty_inspect.chomp
79
+ puts "\tAdded campaign criteria: '%s'" %
80
+ campaign[:added_campaign_criteria].pretty_inspect.chomp
81
+ puts "\tRemoved ad extensions: '%s'" %
82
+ campaign[:removed_ad_extensions].pretty_inspect.chomp
83
+ puts "\tRemoved campaign criteria: '%s'" %
84
+ campaign[:removed_campaign_criteria].pretty_inspect.chomp
85
+
86
+ if campaign[:changed_ad_groups]
87
+ campaign[:changed_ad_groups].each do |ad_group|
88
+ puts "\tAd group with ID %d was changed:" % ad_group[:ad_group_id]
89
+ puts "\t\tAd group changed status: '%s'" %
90
+ ad_group[:ad_group_change_status]
91
+ unless ['NEW', 'FIELDS_UNCHANGED'].include?(
92
+ ad_group[:ad_group_change_status])
93
+ puts "\t\tAds changed: '%s'" %
94
+ ad_group[:changed_ads].pretty_inspect.chomp
95
+ puts "\t\tCriteria changed: '%s'" %
96
+ ad_group[:changed_criteria].pretty_inspect.chomp
97
+ puts "\t\tCriteria removed: '%s'" %
98
+ ad_group[:removed_criteria].pretty_inspect.chomp
99
+ end
100
+ end
101
+ end
102
+ end
103
+ puts
104
+ end
105
+ else
106
+ puts 'No account changes were found.'
107
+ end
108
+ end
109
+
110
+ if __FILE__ == $0
111
+ API_VERSION = :v201509
112
+
113
+ begin
114
+ get_account_changes()
115
+
116
+ # Authorization error.
117
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
118
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
119
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
120
+ "to retrieve and store OAuth2 tokens."
121
+ puts "See this wiki page for more details:\n\n " +
122
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
123
+
124
+ # HTTP errors.
125
+ rescue AdsCommon::Errors::HttpError => e
126
+ puts "HTTP Error: %s" % e
127
+
128
+ # API errors.
129
+ rescue AdwordsApi::Errors::ApiException => e
130
+ puts "Message: %s" % e.message
131
+ puts 'Errors:'
132
+ e.errors.each_with_index do |error, index|
133
+ puts "\tError [%d]:" % (index + 1)
134
+ error.each do |field, value|
135
+ puts "\t\t%s: %s" % [field, value]
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
5
+ #
6
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
+ # implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ # This example illustrates how to retrieve the account hierarchy under an
20
+ # account. This example needs to be run against an AdWords manager account.
21
+
22
+ require 'adwords_api'
23
+ require 'adwords_api/utils'
24
+
25
+ def get_account_hierarchy()
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
+ managed_customer_srv = adwords.service(:ManagedCustomerService, API_VERSION)
35
+
36
+ # Get the account hierarchy for this account.
37
+ selector = {
38
+ :fields => ['CustomerId', 'Name']
39
+ }
40
+
41
+ graph = managed_customer_srv.get(selector)
42
+
43
+ if graph and graph[:entries]
44
+ puts 'Accounts under this hierarchy: %d' % graph[:total_num_entries]
45
+ graph[:entries].each_with_index do |account, index|
46
+ puts "%d) Customer ID: %s" %
47
+ [index + 1, AdwordsApi::Utils.format_id(account[:customer_id])]
48
+ puts "\tName: %s" % account[:name]
49
+ end
50
+
51
+ # Display the links.
52
+ if graph[:links]
53
+ puts 'Hierarchy links:'
54
+ graph[:links].each do |link|
55
+ puts "\tThere is a link from %s to %s" %
56
+ [AdwordsApi::Utils.format_id(link[:manager_customer_id]),
57
+ AdwordsApi::Utils.format_id(link[:client_customer_id])]
58
+ end
59
+ end
60
+ else
61
+ puts 'No accounts were found.'
62
+ end
63
+ end
64
+
65
+ if __FILE__ == $0
66
+ API_VERSION = :v201509
67
+
68
+ begin
69
+ get_account_hierarchy()
70
+
71
+ # Authorization error.
72
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
73
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
74
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
75
+ "to retrieve and store OAuth2 tokens."
76
+ puts "See this wiki page for more details:\n\n " +
77
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
78
+
79
+ # HTTP errors.
80
+ rescue AdsCommon::Errors::HttpError => e
81
+ puts "HTTP Error: %s" % e
82
+
83
+ # API errors.
84
+ rescue AdwordsApi::Errors::ApiException => e
85
+ puts "Message: %s" % e.message
86
+ puts 'Errors:'
87
+ e.errors.each_with_index do |error, index|
88
+ puts "\tError [%d]:" % (index + 1)
89
+ error.each do |field, value|
90
+ puts "\t\t%s: %s" % [field, value]
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Copyright:: Copyright 2015, Google Inc. All Rights Reserved.
5
+ #
6
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
+ # implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ # This example adds an ad customizer feed using Extension Services. Then it adds
20
+ # an ad that uses the feed to populate dynamic data.
21
+
22
+ require 'adwords_api'
23
+ require 'date'
24
+
25
+ def add_ad_customizers(feed_name, ad_group_ids)
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
+ feed_item_srv = adwords.service(:FeedItemService, API_VERSION)
35
+ ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
36
+
37
+ # Create a customizer feed. One feed per account can be used for all ads.
38
+ feed_data = create_customizer_feed(adwords, feed_name)
39
+
40
+ # Now adding feed items -- the values we'd like to place.
41
+ now_date = Date.today()
42
+
43
+ items_data = [
44
+ {
45
+ :name => 'Mars',
46
+ :price => '$1234.56',
47
+ :date => now_date.strftime('%Y%m01 000000'),
48
+ :ad_group_id => ad_group_ids[0]
49
+ },
50
+ {
51
+ :name => 'Venus',
52
+ :price => '$1450.00',
53
+ :date => now_date.strftime('%Y%m15 000000'),
54
+ :ad_group_id => ad_group_ids[1]
55
+ }
56
+ ]
57
+
58
+ feed_items = items_data.map do |item|
59
+ {
60
+ :feed_id => feed_data[:feed_id],
61
+ :attribute_values => [
62
+ {
63
+ :feed_attribute_id => feed_data[:name_id],
64
+ :string_value => item[:name]
65
+ },
66
+ {
67
+ :feed_attribute_id => feed_data[:price_id],
68
+ :string_value => item[:price]
69
+ },
70
+ {
71
+ :feed_attribute_id => feed_data[:date_id],
72
+ :string_value => item[:date]
73
+ }
74
+ ],
75
+ :ad_group_targeting => {
76
+ :targeting_ad_group_id => item[:ad_group_id]
77
+ }
78
+ }
79
+ end
80
+
81
+ feed_items_operations = feed_items.map do |item|
82
+ {:operator => 'ADD', :operand => item}
83
+ end
84
+
85
+ response = feed_item_srv.mutate(feed_items_operations)
86
+ if response and response[:value]
87
+ response[:value].each do |feed_item|
88
+ puts 'Feed item with ID %d was added.' % feed_item[:feed_item_id]
89
+ end
90
+ else
91
+ raise new StandardError, 'No feed items were added.'
92
+ end
93
+
94
+ # All set! We can now create ads with customizations.
95
+ text_ad = {
96
+ :xsi_type => 'TextAd',
97
+ :headline => 'Luxury Cruise to {=%s.Name}' % feed_name,
98
+ :description1 => 'Only {=%s.Price}' % feed_name,
99
+ :description2 => 'Offer ends in {=countdown(%s.Date)}!' % feed_name,
100
+ :final_urls => ['http://www.example.com'],
101
+ :display_url => 'www.example.com'
102
+ }
103
+
104
+ # We add the same ad to both ad groups. When they serve, they will show
105
+ # different values, since they match different feed items.
106
+ operations = ad_group_ids.map do |ad_group_id|
107
+ {
108
+ :operator => 'ADD',
109
+ :operand => {
110
+ :ad_group_id => ad_group_id,
111
+ :ad => text_ad.dup()
112
+ }
113
+ }
114
+ end
115
+
116
+ response = ad_group_ad_srv.mutate(operations)
117
+ if response and response[:value]
118
+ ads = response[:value]
119
+ ads.each do |ad|
120
+ puts "\tCreated an ad with ID %d, type '%s' and status '%s'" %
121
+ [ad[:ad][:id], ad[:ad][:ad_type], ad[:status]]
122
+ end
123
+ else
124
+ raise StandardError, 'No ads were added.'
125
+ end
126
+ end
127
+
128
+ def create_customizer_feed(adwords, feed_name)
129
+ ad_customizer_srv = adwords.service(:AdCustomizerFeedService, API_VERSION)
130
+ feed = {
131
+ :feed_name => feed_name,
132
+ :feed_attributes => [
133
+ {:name => 'Name', :type => 'STRING'},
134
+ {:name => 'Price', :type => 'PRICE'},
135
+ {:name => 'Date', :type => 'DATE_TIME'}
136
+ ]
137
+ }
138
+ operation = {:operand => feed, :operator => 'ADD'}
139
+ added_feed = ad_customizer_srv.mutate([operation])[:value].first()
140
+ puts "Created ad customizer feed with ID = %d and name = '%s'." %
141
+ [added_feed[:feed_id], added_feed[:feed_name]]
142
+ return {
143
+ :feed_id => added_feed[:feed_id],
144
+ :name_id => added_feed[:feed_attributes][0][:id],
145
+ :price_id => added_feed[:feed_attributes][1][:id],
146
+ :date_id => added_feed[:feed_attributes][2][:id]
147
+ }
148
+ end
149
+
150
+ if __FILE__ == $0
151
+ API_VERSION = :v201509
152
+
153
+ begin
154
+ feed_name = 'INSERT_FEED_NAME_HERE'.to_s
155
+ ad_group_ids = [
156
+ 'INSERT_AD_GROUP_ID_HERE'.to_i,
157
+ 'INSERT_AD_GROUP_ID_HERE'.to_i
158
+ ]
159
+ add_ad_customizers(feed_name, ad_group_ids)
160
+
161
+ # Authorization error.
162
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
163
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
164
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
165
+ "to retrieve and store OAuth2 tokens."
166
+ puts "See this wiki page for more details:\n\n " +
167
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
168
+
169
+ # HTTP errors.
170
+ rescue AdsCommon::Errors::HttpError => e
171
+ puts "HTTP Error: %s" % e
172
+
173
+ # API errors.
174
+ rescue AdwordsApi::Errors::ApiException => e
175
+ puts "Message: %s" % e.message
176
+ puts 'Errors:'
177
+ e.errors.each_with_index do |error, index|
178
+ puts "\tError [%d]:" % (index + 1)
179
+ error.each do |field, value|
180
+ puts "\t\t%s: %s" % [field, value]
181
+ end
182
+ end
183
+ end
184
+ end