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
@@ -0,0 +1,174 @@
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 demonstrates how to find shared sets, shared set criterions and
20
+ # how to remove them.
21
+
22
+ require 'adwords_api'
23
+
24
+ def find_and_remove_criteria_from_shared_set(campaign_id)
25
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
26
+ # when called without parameters.
27
+ adwords = AdwordsApi::Api.new
28
+
29
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
30
+ # the configuration file or provide your own logger:
31
+ # adwords.logger = Logger.new('adwords_xml.log')
32
+
33
+ campaign_shared_set_srv =
34
+ adwords.service(:CampaignSharedSetService, API_VERSION)
35
+ shared_criterion_srv = adwords.service(:SharedCriterionService, API_VERSION)
36
+
37
+ shared_set_ids = []
38
+ criterion_ids = []
39
+
40
+ # First, retrieve all shared sets associated with the campaign.
41
+
42
+ # Create selector for shared sets to:
43
+ # - filter by campaign ID,
44
+ # - filter by shared set type.
45
+ selector = {
46
+ :fields => ['SharedSetId', 'CampaignId', 'SharedSetName', 'SharedSetType',
47
+ 'Status'],
48
+ :predicates => [
49
+ {:field => 'CampaignId', :operator => 'EQUALS', :values => [campaign_id]},
50
+ {:field => 'SharedSetType', :operator => 'IN', :values =>
51
+ ['NEGATIVE_KEYWORDS', 'NEGATIVE_PLACEMENTS']}
52
+ ],
53
+ :paging => {
54
+ :start_index => 0,
55
+ :number_results => PAGE_SIZE
56
+ }
57
+ }
58
+
59
+ # Set initial values.
60
+ offset, page = 0, {}
61
+
62
+ begin
63
+ page = campaign_shared_set_srv.get(selector)
64
+ if page[:entries]
65
+ page[:entries].each do |shared_set|
66
+ puts "Campaign shared set ID %d and name '%s'" %
67
+ [shared_set[:shared_set_id], shared_set[:shared_set_name]]
68
+ shared_set_ids << shared_set[:shared_set_id]
69
+ end
70
+ # Increment values to request the next page.
71
+ offset += PAGE_SIZE
72
+ selector[:paging][:start_index] = offset
73
+ end
74
+ end while page[:total_num_entries] > offset
75
+
76
+ # Next, Retrieve criterion IDs for all found shared sets.
77
+ selector = {
78
+ :fields => ['SharedSetId', 'Id', 'KeywordText', 'KeywordMatchType',
79
+ 'PlacementUrl'],
80
+ :predicates => [
81
+ {:field => 'SharedSetId', :operator => 'IN', :values => shared_set_ids}
82
+ ],
83
+ :paging => {
84
+ :start_index => 0,
85
+ :number_results => PAGE_SIZE
86
+ }
87
+ }
88
+
89
+ # Set initial values.
90
+ offset, page = 0, {}
91
+
92
+ begin
93
+ page = shared_criterion_srv.get(selector)
94
+ if page[:entries]
95
+ page[:entries].each do |shared_criterion|
96
+ if shared_criterion[:criterion][:type] == 'KEYWORD'
97
+ puts "Shared negative keyword with ID %d and text '%s' was found." %
98
+ [shared_criterion[:criterion][:id],
99
+ shared_criterion[:criterion][:text]]
100
+ elsif shared_criterion[:criterion][:type] == 'PLACEMENT'
101
+ puts "Shared negative placement with ID %d and url '%s' was found." %
102
+ [shared_criterion[:criterion][:id],
103
+ shared_criterion[:criterion][:url]]
104
+ else
105
+ puts 'Shared criterion with ID %d was found.' %
106
+ [shared_criterion[:criterion][:id]]
107
+ end
108
+ criterion_ids << {
109
+ :shared_set_id => shared_criterion[:shared_set_id],
110
+ :criterion_id => shared_criterion[:criterion][:id]
111
+ }
112
+ end
113
+ # Increment values to request the next page.
114
+ offset += PAGE_SIZE
115
+ selector[:paging][:start_index] = offset
116
+ end
117
+ end while page[:total_num_entries] > offset
118
+
119
+ # Finally, remove the criteria.
120
+ operations = criterion_ids.map do |criterion|
121
+ {
122
+ :operator => 'REMOVE',
123
+ :operand => {
124
+ :criterion => {:id => criterion[:criterion_id]},
125
+ :shared_set_id => criterion[:shared_set_id]
126
+ }
127
+ }
128
+ end
129
+
130
+ response = shared_criterion_srv.mutate(operations)
131
+ if response and response[:value]
132
+ response[:value].each do |criterion|
133
+ puts "Criterion ID %d was successfully removed from shared set ID %d." %
134
+ [criterion[:criterion][:id], criterion[:shared_set_id]]
135
+ end
136
+ else
137
+ puts 'No shared criteria were removed.'
138
+ end
139
+ end
140
+
141
+ if __FILE__ == $0
142
+ API_VERSION = :v201509
143
+ PAGE_SIZE = 500
144
+
145
+ begin
146
+ # ID of a campaign to remove shared criteria from.
147
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
148
+
149
+ find_and_remove_criteria_from_shared_set(campaign_id)
150
+
151
+ # Authorization error.
152
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
153
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
154
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
155
+ "to retrieve and store OAuth2 tokens."
156
+ puts "See this wiki page for more details:\n\n " +
157
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
158
+
159
+ # HTTP errors.
160
+ rescue AdsCommon::Errors::HttpError => e
161
+ puts "HTTP Error: %s" % e
162
+
163
+ # API errors.
164
+ rescue AdwordsApi::Errors::ApiException => e
165
+ puts "Message: %s" % e.message
166
+ puts 'Errors:'
167
+ e.errors.each_with_index do |error, index|
168
+ puts "\tError [%d]:" % (index + 1)
169
+ error.each do |field, value|
170
+ puts "\t\t%s: %s" % [field, value]
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Copyright:: Copyright 2013, 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 ad group level bid modifiers for a
20
+ # campaign.
21
+
22
+ require 'adwords_api'
23
+
24
+ def get_ad_group_bid_modifiers(campaign_id)
25
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
26
+ # when called without parameters.
27
+ adwords = AdwordsApi::Api.new
28
+
29
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
30
+ # the configuration file or provide your own logger:
31
+ # adwords.logger = Logger.new('adwords_xml.log')
32
+
33
+ bid_modifier_srv = adwords.service(:AdGroupBidModifierService, API_VERSION)
34
+
35
+ # Get all ad group bid modifiers for the campaign.
36
+ selector = {
37
+ :fields => ['CampaignId', 'AdGroupId', 'Id', 'BidModifier'],
38
+ :predicates => [
39
+ {:field => 'CampaignId', :operator => 'EQUALS', :values => [campaign_id]}
40
+ ],
41
+ :paging => {
42
+ :start_index => 0,
43
+ :number_results => PAGE_SIZE
44
+ }
45
+ }
46
+
47
+ # Set initial values.
48
+ offset, page = 0, {}
49
+
50
+ begin
51
+ page = bid_modifier_srv.get(selector)
52
+ if page[:entries]
53
+ page[:entries].each do |modifier|
54
+ value = modifier[:bid_modifier] || 'unset'
55
+ puts ('Campaign ID %d, AdGroup ID %d, Criterion ID %d has ad group ' +
56
+ 'level modifier: %s') %
57
+ [modifier[:campaign_id], modifier[:ad_group_id],
58
+ modifier[:criterion][:id], value]
59
+ end
60
+ # Increment values to request the next page.
61
+ offset += PAGE_SIZE
62
+ selector[:paging][:start_index] = offset
63
+ else
64
+ puts 'No ad group level bid overrides returned.'
65
+ end
66
+ end while page[:total_num_entries] > offset
67
+ end
68
+
69
+ if __FILE__ == $0
70
+ API_VERSION = :v201509
71
+ PAGE_SIZE = 500
72
+
73
+ begin
74
+ # ID of a campaign to pull overrides for.
75
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
76
+
77
+ get_ad_group_bid_modifiers(campaign_id)
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
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
86
+
87
+ # HTTP errors.
88
+ rescue AdsCommon::Errors::HttpError => e
89
+ puts "HTTP Error: %s" % e
90
+
91
+ # API errors.
92
+ rescue AdwordsApi::Errors::ApiException => e
93
+ puts "Message: %s" % e.message
94
+ puts 'Errors:'
95
+ e.errors.each_with_index do |error, index|
96
+ puts "\tError [%d]:" % (index + 1)
97
+ error.each do |field, value|
98
+ puts "\t\t%s: %s" % [field, value]
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Copyright:: Copyright 2013, 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 code example imports offline conversion values for specific clicks to
20
+ # your account. To get Google Click ID for a click, run
21
+ # CLICK_PERFORMANCE_REPORT.
22
+
23
+ require 'adwords_api'
24
+ require 'date'
25
+
26
+ def upload_offline_conversions(conversion_name, google_click_id,
27
+ conversion_time, conversion_value)
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
+ conversion_tracker_srv =
37
+ adwords.service(:ConversionTrackerService, API_VERSION)
38
+ conversion_feed_srv =
39
+ adwords.service(:OfflineConversionFeedService, API_VERSION)
40
+
41
+ # Create an upload conversion. Once created, this entry will be visible under
42
+ # Tools and Analysis->Conversion and will have Source = Import.
43
+ upload_conversion = {
44
+ :xsi_type => 'UploadConversion',
45
+ :category => 'PAGE_VIEW',
46
+ :name => conversion_name,
47
+ :viewthrough_lookback_window => 30,
48
+ :ctc_lookback_window => 90
49
+ }
50
+ return_conversions = conversion_tracker_srv.mutate([
51
+ {:operator => 'ADD', :operand => upload_conversion}])
52
+ return_conversions[:value].each do |tracker|
53
+ puts "Upload conversion tracker with name '%s' and ID %d was created." %
54
+ [tracker[:name], tracker[:id]]
55
+ end
56
+
57
+ # Associate offline conversions with the upload conversion tracker we created.
58
+ feed = {
59
+ :conversion_name => conversion_name,
60
+ :google_click_id => google_click_id,
61
+ :conversion_time => conversion_time,
62
+ :conversion_value => conversion_value
63
+ }
64
+ return_feeds = conversion_feed_srv.mutate([
65
+ {:operator => 'ADD', :operand => feed}])
66
+ return_feeds[:value].each do |return_feed|
67
+ puts ("Uploaded offline conversion value %.2f for Google Click ID '%s', " +
68
+ 'to %s') % [return_feed[:conversion_value],
69
+ return_feed[:google_click_id],
70
+ return_feed[:conversion_name]]
71
+ end
72
+ end
73
+
74
+ if __FILE__ == $0
75
+ API_VERSION = :v201509
76
+
77
+ begin
78
+ # Name of the upload conversion to be created.
79
+ conversion_name = 'INSERT_CONVERSION_NAME_HERE'
80
+ # Google Click ID of the click for which offline conversions are uploaded.
81
+ google_click_id = 'INSERT_GOOGLE_CLICK_ID_HERE'
82
+ # Conversion time in 'yyyymmdd hhmmss' format.
83
+ conversion_time = Time.new.strftime("%Y%m%d %H%M%S")
84
+ # Conversion value to be uploaded.
85
+ conversion_value = 'INSERT_CONVERSION_VALUE_HERE'.to_f
86
+
87
+ upload_offline_conversions(conversion_name, google_click_id,
88
+ conversion_time, conversion_value)
89
+
90
+ # Authorization error.
91
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
92
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
93
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
94
+ "to retrieve and store OAuth2 tokens."
95
+ puts "See this wiki page for more details:\n\n " +
96
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
97
+
98
+ # HTTP errors.
99
+ rescue AdsCommon::Errors::HttpError => e
100
+ puts "HTTP Error: %s" % e
101
+
102
+ # API errors.
103
+ rescue AdwordsApi::Errors::ApiException => e
104
+ puts "Message: %s" % e.message
105
+ puts 'Errors:'
106
+ e.errors.each_with_index do |error, index|
107
+ puts "\tError [%d]:" % (index + 1)
108
+ error.each do |field, value|
109
+ puts "\t\t%s: %s" % [field, value]
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Copyright:: Copyright 2013, 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 a Shared Bidding Strategy and uses it to construct a
20
+ # campaign.
21
+
22
+ require 'adwords_api'
23
+ require 'date'
24
+
25
+ def use_shared_bidding_strategy()
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
+ budget_srv = adwords.service(:BudgetService, API_VERSION)
35
+ bidding_srv = adwords.service(:BiddingStrategyService, API_VERSION)
36
+ campaign_srv = adwords.service(:CampaignService, API_VERSION)
37
+
38
+ # Create a budget, which can be shared by multiple campaigns.
39
+ budget = {
40
+ :name => 'Interplanetary budget #%d' % (Time.new.to_f * 1000).to_i,
41
+ :amount => {:micro_amount => 50000000},
42
+ :delivery_method => 'STANDARD',
43
+ :period => 'DAILY',
44
+ :is_explicitly_shared => true
45
+ }
46
+ return_budget = budget_srv.mutate([
47
+ {:operator => 'ADD', :operand => budget}])
48
+ budget_id = return_budget[:value].first[:budget_id]
49
+
50
+ # Create a shared bidding strategy.
51
+ shared_bidding_strategy = {
52
+ :name => 'Maximize Clicks #%d' % (Time.new.to_f * 1000).to_i,
53
+ :bidding_scheme => {
54
+ :xsi_type => 'TargetSpendBiddingScheme',
55
+ # Optionally set additional bidding scheme parameters.
56
+ :bid_ceiling => {:micro_amount => 20000000},
57
+ :spend_target => {:micro_amount => 40000000}
58
+ }
59
+ }
60
+ return_strategy = bidding_srv.mutate([
61
+ {:operator => 'ADD', :operand => shared_bidding_strategy}])
62
+
63
+ bidding_strategy = return_strategy[:value].first
64
+ puts ("Shared bidding strategy with name '%s' and ID %d of type '%s' was " +
65
+ 'created') %
66
+ [bidding_strategy[:name], bidding_strategy[:id], bidding_strategy[:type]]
67
+
68
+ # Create campaigns.
69
+ campaigns = [
70
+ {
71
+ :name => "Interplanetary Cruise #%d" % (Time.new.to_f * 1000).to_i,
72
+ :status => 'PAUSED',
73
+ :bidding_strategy_configuration => {
74
+ :bidding_strategy_id => bidding_strategy[:id]
75
+ },
76
+ # Budget (required) - note only the budget ID is required.
77
+ :budget => {:budget_id => budget_id},
78
+ :advertising_channel_type => 'SEARCH',
79
+ :network_setting => {
80
+ :target_google_search => true,
81
+ :target_search_network => true,
82
+ :target_content_network => true
83
+ }
84
+ },
85
+ {
86
+ :name => "Interplanetary Cruise banner #%d" % (Time.new.to_f * 1000).to_i,
87
+ :status => 'PAUSED',
88
+ :bidding_strategy_configuration => {
89
+ :bidding_strategy_id => bidding_strategy[:id]
90
+ },
91
+ :budget => {:budget_id => budget_id},
92
+ :advertising_channel_type => 'DISPLAY',
93
+ :network_setting => {
94
+ :target_google_search => false,
95
+ :target_search_network => false,
96
+ :target_content_network => true
97
+ }
98
+ }
99
+ ]
100
+
101
+ # Prepare for adding campaign.
102
+ operations = campaigns.map do |campaign|
103
+ {:operator => 'ADD', :operand => campaign}
104
+ end
105
+
106
+ # Add campaign.
107
+ response = campaign_srv.mutate(operations)
108
+ if response and response[:value]
109
+ response[:value].each do |campaign|
110
+ puts "Campaign with name '%s' and ID %d was added." %
111
+ [campaign[:name], campaign[:id]]
112
+ end
113
+ else
114
+ raise new StandardError, 'No campaigns were added.'
115
+ end
116
+ end
117
+
118
+ if __FILE__ == $0
119
+ API_VERSION = :v201509
120
+
121
+ begin
122
+ use_shared_bidding_strategy()
123
+
124
+ # Authorization error.
125
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
126
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
127
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
128
+ "to retrieve and store OAuth2 tokens."
129
+ puts "See this wiki page for more details:\n\n " +
130
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
131
+
132
+ # HTTP errors.
133
+ rescue AdsCommon::Errors::HttpError => e
134
+ puts "HTTP Error: %s" % e
135
+
136
+ # API errors.
137
+ rescue AdwordsApi::Errors::ApiException => e
138
+ puts "Message: %s" % e.message
139
+ puts 'Errors:'
140
+ e.errors.each_with_index do |error, index|
141
+ puts "\tError [%d]:" % (index + 1)
142
+ error.each do |field, value|
143
+ puts "\t\t%s: %s" % [field, value]
144
+ end
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,140 @@
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 ad groups. To get a list of existing
20
+ # campaigns run get_campaigns.rb.
21
+
22
+ require 'adwords_api'
23
+
24
+ def add_ad_groups(campaign_id)
25
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
26
+ # when called without parameters.
27
+ adwords = AdwordsApi::Api.new
28
+
29
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
30
+ # the configuration file or provide your own logger:
31
+ # adwords.logger = Logger.new('adwords_xml.log')
32
+
33
+ ad_group_srv = adwords.service(:AdGroupService, API_VERSION)
34
+
35
+ ad_groups = [
36
+ {
37
+ :name => "Earth to Mars Cruises #%d" % (Time.new.to_f * 1000).to_i,
38
+ :status => 'ENABLED',
39
+ :campaign_id => campaign_id,
40
+ :bidding_strategy_configuration => {
41
+ :bids => [
42
+ {
43
+ # The 'xsi_type' field allows you to specify the xsi:type of the
44
+ # object being created. It's only necessary when you must provide
45
+ # an explicit type that the client library can't infer.
46
+ :xsi_type => 'CpcBid',
47
+ :bid => {:micro_amount => 10000000}
48
+ }
49
+ ]
50
+ },
51
+ :settings => [
52
+ # Targeting restriction settings - these settings only affect serving
53
+ # for the Display Network.
54
+ {
55
+ :xsi_type => 'TargetingSetting',
56
+ :details => [
57
+ # Restricting to serve ads that match your ad group placements.
58
+ # This is equivalent to choosing "Target and bid" in the UI.
59
+ {
60
+ :xsi_type => 'TargetingSettingDetail',
61
+ :criterion_type_group => 'PLACEMENT',
62
+ :target_all => false
63
+ },
64
+ # Using your ad group verticals only for bidding. This is equivalent
65
+ # to choosing "Bid only" in the UI.
66
+ {
67
+ :xsi_type => 'TargetingSettingDetail',
68
+ :criterion_type_group => 'VERTICAL',
69
+ :target_all => true
70
+ }
71
+ ]
72
+ }
73
+ ]
74
+ },
75
+ {
76
+ :name => 'Earth to Pluto Cruises #%d' % (Time.new.to_f * 1000).to_i,
77
+ :status => 'ENABLED',
78
+ :campaign_id => campaign_id,
79
+ :bidding_strategy_configuration => {
80
+ :bids => [
81
+ {
82
+ # The 'xsi_type' field allows you to specify the xsi:type of the
83
+ # object being created. It's only necessary when you must provide
84
+ # an explicit type that the client library can't infer.
85
+ :xsi_type => 'CpcBid',
86
+ :bid => {:micro_amount => 10000000}
87
+ }
88
+ ]
89
+ }
90
+ }
91
+ ]
92
+
93
+ # Prepare operations for adding ad groups.
94
+ operations = ad_groups.map do |ad_group|
95
+ {:operator => 'ADD', :operand => ad_group}
96
+ end
97
+
98
+ # Add ad groups.
99
+ response = ad_group_srv.mutate(operations)
100
+ if response and response[:value]
101
+ response[:value].each do |ad_group|
102
+ puts "Ad group ID %d was successfully added." % ad_group[:id]
103
+ end
104
+ else
105
+ raise StandardError, 'No ad group was added'
106
+ end
107
+ end
108
+
109
+ if __FILE__ == $0
110
+ API_VERSION = :v201509
111
+
112
+ begin
113
+ # Campaign ID to add ad group to.
114
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
115
+ add_ad_groups(campaign_id)
116
+
117
+ # Authorization error.
118
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
119
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
120
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
121
+ "to retrieve and store OAuth2 tokens."
122
+ puts "See this wiki page for more details:\n\n " +
123
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
124
+
125
+ # HTTP errors.
126
+ rescue AdsCommon::Errors::HttpError => e
127
+ puts "HTTP Error: %s" % e
128
+
129
+ # API errors.
130
+ rescue AdwordsApi::Errors::ApiException => e
131
+ puts "Message: %s" % e.message
132
+ puts 'Errors:'
133
+ e.errors.each_with_index do |error, index|
134
+ puts "\tError [%d]:" % (index + 1)
135
+ error.each do |field, value|
136
+ puts "\t\t%s: %s" % [field, value]
137
+ end
138
+ end
139
+ end
140
+ end