google-adwords-api 0.16.1 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,386 @@
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 migrates your feed based sitelinks at campaign level to use
20
+ # extension settings. To learn more about extensionsettings, see
21
+ # https://developers.google.com/adwords/api/docs/guides/extension-settings.
22
+ # To learn more about migrating Feed based extensions to extension settings,
23
+ # see
24
+ # https://developers.google.com/adwords/api/docs/guides/migrate-to-extension-settings.
25
+
26
+ require 'adwords_api'
27
+ require 'set'
28
+
29
+ def migrate_to_extension_settings()
30
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
31
+ # when called without parameters.
32
+ adwords = AdwordsApi::Api.new
33
+
34
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
35
+ # the configuration file or provide your own logger:
36
+ # adwords.logger = Logger.new('adwords_xml.log')
37
+
38
+ # Get all of the feeds for the current user.
39
+ feeds = get_feeds(adwords)
40
+
41
+ feeds.each do |feed|
42
+ # Retrieve all the sitelinks from the current feed.
43
+ feed_items = get_site_links_from_feed(adwords, feed)
44
+
45
+ # Get all the instances where a sitelink from this feed has been added
46
+ # to a campaign.
47
+ campaign_feeds = get_campaign_feeds(adwords, feed, PLACEHOLDER_SITELINKS)
48
+
49
+ all_feed_items_to_delete = campaign_feeds.map do |campaign_feed|
50
+ # Retrieve the sitelinks that have been associated with this campaign.
51
+ feed_item_ids = get_feed_item_ids_for_campaign(campaign_feed)
52
+
53
+ if feed_item_ids.empty?
54
+ puts(("Migration skipped for campaign feed with campaign ID %d " +
55
+ "and feed ID %d because no mapped feed item IDs were found in " +
56
+ "the campaign feed's matching function.") %
57
+ [campaign_feed[:campaign_id], campaign_feed[:feed_id]])
58
+ next
59
+ end
60
+
61
+ platform_restrictions = get_platform_restrictions(campaign_feed)
62
+
63
+ # Delete the campaign feed that associates the sitelinks from the
64
+ # feed to the campaign.
65
+ delete_campaign_feed(adwords, campaign_feed)
66
+
67
+ # Create extension settings instead of sitelinks.
68
+ create_extension_setting(adwords, feed_items, campaign_feed,
69
+ feed_item_ids, platform_restrictions)
70
+
71
+ # Mark the sitelinks from the feed for deletion.
72
+ feed_item_ids
73
+ end.flatten.to_set.reject {|id| id.nil?}
74
+
75
+ # Delete all the sitelinks from the feed.
76
+ delete_old_feed_items(adwords, all_feed_items_to_delete, feed)
77
+ end
78
+ end
79
+
80
+ def get_site_links_from_feed(adwords, feed)
81
+ # Retrieve the feed's attribute mapping.
82
+ feed_mappings = get_feed_mapping(adwords, feed, PLACEHOLDER_SITELINKS)
83
+
84
+ feed_items = {}
85
+
86
+ get_feed_items(adwords, feed).each do |feed_item|
87
+ site_link_from_feed = {}
88
+
89
+ feed_item[:attribute_values].each do |attribute_value|
90
+ # Skip this attribute if it hasn't been mapped to a field.
91
+ next unless feed_mappings.has_key?(
92
+ attribute_value[:feed_attribute_id])
93
+
94
+ feed_mappings[attribute_value[:feed_attribute_id]].each do |field_id|
95
+ case field_id
96
+ when PLACEHOLDER_FIELD_SITELINK_LINK_TEXT
97
+ site_link_from_feed[:text] = attribute_value[:string_value]
98
+ when PLACEHOLDER_FIELD_SITELINK_URL
99
+ site_link_from_feed[:url] = attribute_value[:string_value]
100
+ when PLACEHOLDER_FIELD_FINAL_URLS
101
+ site_link_from_feed[:final_urls] = attribute_value[:string_values]
102
+ when PLACEHOLDER_FIELD_FINAL_MOBILE_URLS
103
+ site_link_from_feed[:final_mobile_urls] =
104
+ attribute_value[:string_values]
105
+ when PLACEHOLDER_FIELD_TRACKING_URL_TEMPLATE
106
+ site_link_from_feed[:tracking_url_template] =
107
+ attribute_value[:string_value]
108
+ when PLACEHOLDER_FIELD_LINE_2_TEXT
109
+ site_link_from_feed[:line2] = attribute_value[:string_value]
110
+ when PLACEHOLDER_FIELD_LINE_3_TEXT
111
+ site_link_from_feed[:line3] = attribute_value[:string_value]
112
+ end
113
+ end
114
+ end
115
+ site_link_from_feed[:scheduling] = feed_item[:scheduling]
116
+
117
+ feed_items[feed_item[:feed_item_id]] = site_link_from_feed
118
+ end
119
+ return feed_items
120
+ end
121
+
122
+ def get_feed_mapping(adwords, feed, placeholder_type)
123
+ feed_mapping_srv = adwords.service(:FeedMappingService, API_VERSION)
124
+ query = ("SELECT FeedMappingId, AttributeFieldMappings " +
125
+ "WHERE FeedId = %d AND PlaceholderType = %d AND Status = 'ENABLED'") %
126
+ [feed[:id], placeholder_type]
127
+
128
+ attribute_mappings = {}
129
+ offset = 0
130
+
131
+ begin
132
+ page_query = (query + " LIMIT %d, %d") % [offset, PAGE_SIZE]
133
+ page = feed_mapping_srv.query(page_query)
134
+
135
+ unless page[:entries].nil?
136
+ # Normally, a feed attribute is mapped only to one field. However, you
137
+ # may map it to more than one field if needed.
138
+ page[:entries].each do |feed_mapping|
139
+ feed_mapping[:attribute_field_mappings].each do |attribute_mapping|
140
+ # Since attribute_mappings can have multiple values for each key,
141
+ # we set up an array to store the values.
142
+ if attribute_mappings.has_key?(attribute_mapping[:feed_attribute_id])
143
+ attribute_mappings[attribute_mapping[:feed_attribute_id]] <<
144
+ attribute_mapping[:field_id]
145
+ else
146
+ attribute_mappings[attribute_mapping[:feed_attribute_id]] =
147
+ [attribute_mapping[:field_id]]
148
+ end
149
+ end
150
+ end
151
+ end
152
+ offset += PAGE_SIZE
153
+ end while page[:total_num_entries] > offset
154
+
155
+ return attribute_mappings
156
+ end
157
+
158
+ def get_feeds(adwords)
159
+ feed_srv = adwords.service(:FeedService, API_VERSION)
160
+ query = "SELECT Id, Name, Attributes " +
161
+ "WHERE Origin = 'USER' AND FeedStatus = 'ENABLED'"
162
+
163
+ feeds = []
164
+ offset = 0
165
+
166
+ begin
167
+ page_query = (query + " LIMIT %d, %d") % [offset, PAGE_SIZE]
168
+ page = feed_srv.query(page_query)
169
+
170
+ unless page[:entries].nil?
171
+ feeds += page[:entries]
172
+ end
173
+ offset += PAGE_SIZE
174
+ end while page[:total_num_entries] > offset
175
+
176
+ return feeds
177
+ end
178
+
179
+ def get_feed_items(adwords, feed)
180
+ feed_item_srv = adwords.service(:FeedItemService, API_VERSION)
181
+ query = ("SELECT FeedItemId, AttributeValues, Scheduling " +
182
+ "WHERE Status = 'ENABLED' AND FeedId = %d") % feed[:id]
183
+
184
+ feed_items = []
185
+ offset = 0
186
+
187
+ begin
188
+ page_query = (query + " LIMIT %d, %d") % [offset, PAGE_SIZE]
189
+ page = feed_item_srv.query(page_query)
190
+
191
+ unless page[:entries].nil?
192
+ feed_items += page[:entries]
193
+ end
194
+ offset += PAGE_SIZE
195
+ end while page[:total_num_entries] > offset
196
+
197
+ return feed_items
198
+ end
199
+
200
+ def get_platform_restrictions(campaign_feed)
201
+ platform_restrictions = nil
202
+
203
+ if campaign_feed[:matching_function][:operator] == 'AND'
204
+ campaign_feed[:matching_function][:lhs_operand].each do |argument|
205
+ # Check if matchingFunction is EQUALS(CONTEXT.DEVICE, 'Mobile')
206
+ if argument[:value][:operator] == 'EQUALS'
207
+ request_context_operand = argument[:value][:lhs_operand].first()
208
+ if request_context_operand &&
209
+ request_context_operand == 'DEVICE_PLATFORM'
210
+ platform_restrictions =
211
+ argument[:value][:rhs_operand].first().upcase()
212
+ break
213
+ end
214
+ end
215
+ end
216
+ end
217
+ return platform_restrictions
218
+ end
219
+
220
+ def delete_old_feed_items(adwords, feed_item_ids, feed)
221
+ return if feed_item_ids.empty?
222
+
223
+ feed_item_srv = adwords.service(:FeedItemService, API_VERSION)
224
+
225
+ operations = feed_item_ids.map do |feed_item_id|
226
+ {
227
+ :operator => 'REMOVE',
228
+ :operand => {
229
+ :feed_id => feed[:id],
230
+ :feed_item_id => feed_item_id
231
+ }
232
+ }
233
+ end
234
+
235
+ feed_item_srv.mutate(operations)
236
+ end
237
+
238
+ def create_extension_setting(
239
+ adwords, feed_items, campaign_feed, feed_item_ids, platform_restrictions)
240
+ campaign_extension_setting_srv = adwords.service(
241
+ :CampaignExtensionSettingService, API_VERSION)
242
+
243
+ extension_feed_items = feed_item_ids.map do |feed_item_id|
244
+ site_link_from_feed = feed_items[:feed_item_id]
245
+ site_link_feed_item = {
246
+ :sitelink_text => site_link_from_feed[:text],
247
+ :sitelink_line2 => site_link_from_feed[:line2],
248
+ :sitelink_line3 => site_link_from_feed[:line3],
249
+ :scheduling => site_link_from_feed[:scheduling]
250
+ }
251
+ if !site_link_from_feed.final_urls.nil? &&
252
+ site_link_from_feed[:final_urls].length > 0
253
+ site_link_feed_item[:sitelink_final_urls] = {
254
+ :urls => site_link_from_feed[:final_urls]
255
+ }
256
+ unless site_link_from_feed[:final_mobile_urls].nil?
257
+ site_link_feed_item[:sitelink_final_mobile_urls] = {
258
+ :urls => site_link_from_feed[:final_mobile_urls]
259
+ }
260
+ end
261
+ site_link_feed_item[:sitelink_tracking_url_template] =
262
+ site_link_from_feed[:tracking_url_template]
263
+ else
264
+ site_link_feed_item[:sitelink_url] = site_link_from_feed[:url]
265
+ end
266
+
267
+ site_link_feed_item
268
+ end
269
+
270
+ extension_setting = {
271
+ :extensions => extension_feed_items
272
+ }
273
+
274
+ unless platform_restrictions.nil?
275
+ extension_setting[:platform_restrictions] = platform_restrictions
276
+ end
277
+
278
+ campaign_extension_setting = {
279
+ :campaign_id => campaign_feed[:campaign_id],
280
+ :extension_type => 'SITELINK',
281
+ :extension_setting => extension_setting
282
+ }
283
+
284
+ operation = {
285
+ :operand => campaign_extension_setting,
286
+ :operator => 'ADD'
287
+ }
288
+
289
+ campaign_extension_setting_srv.mutate([operation])
290
+ end
291
+
292
+ def delete_campaign_feed(adwords, campaign_feed)
293
+ campaign_feed_srv = adwords.service(:CampaignFeedService, API_VERSION)
294
+
295
+ operation = {
296
+ :operand => campaign_feed,
297
+ :operator => 'REMOVE'
298
+ }
299
+
300
+ campaign_feed_srv.mutate([operation])
301
+ end
302
+
303
+ def get_feed_item_ids_for_campaign(campaign_feed)
304
+ feed_item_ids = Set.new
305
+ if !campaign_feed[:matching_function][:lhs_operand].empty? &&
306
+ campaign_feed[:matching_function][:lhs_operand].first[:xsi_type] ==
307
+ 'RequestContextOperand'
308
+ request_context_operand =
309
+ campaign_feed[:matching_function][:lhs_operand].first
310
+ if request_context_operand[:context_type] == 'FEED_ITEM_ID' &&
311
+ campaign_feed[:matching_function][:operator] == 'IN'
312
+ campaign_feed[:matching_function][:rhs_operand].each do |argument|
313
+ if argument[:xsi_type] == 'ConstantOperand'
314
+ feed_item_ids.add(argument[:long_value])
315
+ end
316
+ end
317
+ end
318
+ end
319
+ return feed_item_ids
320
+ end
321
+
322
+ def get_campaign_feeds(adwords, feed, placeholder_type)
323
+ campaign_feed_srv = adwords.service(:CampaignFeedService, API_VERSION)
324
+ query = ("SELECT CampaignId, MatchingFunction, PlaceholderTypes " +
325
+ "WHERE Status = 'ENABLED' AND FeedId = %d " +
326
+ "AND PlaceholderTypes CONTAINS_ANY [%d]") % [feed[:id], placeholder_type]
327
+
328
+ campaign_feeds = []
329
+ offset = 0
330
+
331
+ begin
332
+ page_query = (query + " LIMIT %d, %d") % [offset, PAGE_SIZE]
333
+ page = campaign_feed_srv.query(page_query)
334
+
335
+ unless page[:entries].nil?
336
+ campaign_feeds += page[:entries]
337
+ end
338
+ offset += PAGE_SIZE
339
+ end while page[:total_num_entries] > offset
340
+
341
+ return campaign_feeds
342
+ end
343
+
344
+ if __FILE__ == $0
345
+ API_VERSION = :v201509
346
+ PAGE_SIZE = 500
347
+
348
+ # See the Placeholder reference page for a liste of all placeholder types
349
+ # and fields.
350
+ # https://developers.google.com/adwords/api/docs/appendix/placeholders
351
+ PLACEHOLDER_SITELINKS = 1
352
+ PLACEHOLDER_FIELD_SITELINK_LINK_TEXT = 1
353
+ PLACEHOLDER_FIELD_SITELINK_URL = 2
354
+ PLACEHOLDER_FIELD_LINE_2_TEXT = 3
355
+ PLACEHOLDER_FIELD_LINE_3_TEXT = 4
356
+ PLACEHOLDER_FIELD_FINAL_URLS = 5
357
+ PLACEHOLDER_FIELD_FINAL_MOBILE_URLS = 6
358
+ PLACEHOLDER_FIELD_TRACKING_URL_TEMPLATE = 7
359
+
360
+ begin
361
+ migrate_to_extension_settings()
362
+
363
+ # Authorization error.
364
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
365
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
366
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
367
+ "to retrieve and store OAuth2 tokens."
368
+ puts "See this wiki page for more details:\n\n " +
369
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
370
+
371
+ # HTTP errors.
372
+ rescue AdsCommon::Errors::HttpError => e
373
+ puts "HTTP Error: %s" % e
374
+
375
+ # API errors.
376
+ rescue AdwordsApi::Errors::ApiException => e
377
+ puts "Message: %s" % e.message
378
+ puts 'Errors:'
379
+ e.errors.each_with_index do |error, index|
380
+ puts "\tError [%d]:" % (index + 1)
381
+ error.each do |field, value|
382
+ puts "\t\t%s: %s" % [field, value]
383
+ end
384
+ end
385
+ end
386
+ end
@@ -0,0 +1,93 @@
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 code example upgrades an ad to use upgraded URLs.
20
+
21
+ require 'adwords_api'
22
+
23
+ def upgrade_ad_url(ad_group_id, ad_id)
24
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
25
+ # when called without parameters.
26
+ adwords = AdwordsApi::Api.new
27
+
28
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
29
+ # the configuration file or provide your own logger:
30
+ # adwords.logger = Logger.new('adwords_xml.log')
31
+
32
+ ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
33
+
34
+ selector = {
35
+ :fields => ['Id', 'Url'],
36
+ :predicates => [
37
+ {:field => 'AdGroupId', :operator => 'EQUALS', :values => [ad_group_id]},
38
+ {:field => 'Id', :operator => 'EQUALS', :values => [ad_id]}
39
+ ]
40
+ }
41
+
42
+ page = ad_group_ad_srv.get(selector)
43
+ ad_group_ad = page[:entries][0] if page[:entries]
44
+
45
+ raise StandardError, "Ad not found." if ad_group_ad.nil?
46
+
47
+ ad_url_upgrade = {
48
+ :ad_id => ad_group_ad[:ad][:id],
49
+ :final_url => ad_group_ad[:ad][:url]
50
+ }
51
+
52
+ response = ad_group_ad_srv.upgrade_url([ad_url_upgrade])
53
+ if response
54
+ ad_group_ad = response.first
55
+ puts "Ad with ID %d and destination url '%s' was upgraded." %
56
+ [ad_group_ad[:id], ad_group_ad[:final_urls].first]
57
+ else
58
+ raise StandardError, 'failed to upgrade ads.'
59
+ end
60
+ end
61
+
62
+ if __FILE__ == $0
63
+ API_VERSION = :v201509
64
+
65
+ begin
66
+ ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
67
+ ad_id = 'INSERT_AD_ID_HERE'.to_i
68
+ upgrade_ad_url(ad_group_id, ad_id)
69
+
70
+ # Authorization error.
71
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
72
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
73
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
74
+ "to retrieve and store OAuth2 tokens."
75
+ puts "See this wiki page for more details:\n\n " +
76
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
77
+
78
+ # HTTP errors.
79
+ rescue AdsCommon::Errors::HttpError => e
80
+ puts "HTTP Error: %s" % e
81
+
82
+ # API errors.
83
+ rescue AdwordsApi::Errors::ApiException => e
84
+ puts "Message: %s" % e.message
85
+ puts 'Errors:'
86
+ e.errors.each_with_index do |error, index|
87
+ puts "\tError [%d]:" % (index + 1)
88
+ error.each do |field, value|
89
+ puts "\t\t%s: %s" % [field, value]
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,104 @@
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 all images and videos. To upload an
20
+ # image, run upload_image.rb. To upload video, see:
21
+ # http://adwords.google.com/support/aw/bin/answer.py?hl=en&answer=39454.
22
+
23
+ require 'adwords_api'
24
+
25
+ def get_all_images_and_videos()
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
+ media_srv = adwords.service(:MediaService, API_VERSION)
35
+
36
+ # Get all the images and videos.
37
+ selector = {
38
+ :fields => ['MediaId', 'Height', 'Width', 'MimeType', 'Urls'],
39
+ :ordering => [
40
+ {:field => 'MediaId', :sort_order => 'ASCENDING'}
41
+ ],
42
+ :predicates => [
43
+ {:field => 'Type', :operator => 'IN', :values => ['IMAGE', 'VIDEO']}
44
+ ],
45
+ :paging => {
46
+ :start_index => 0,
47
+ :number_results => PAGE_SIZE
48
+ }
49
+ }
50
+
51
+ # Set initial values.
52
+ offset, page = 0, {}
53
+
54
+ begin
55
+ page = media_srv.get(selector)
56
+ if page[:entries]
57
+ page[:entries].each do |entry|
58
+ full_dimensions = entry[:dimensions]['FULL']
59
+ puts "Entry ID %d with dimensions %dx%d and MIME type is '%s'" %
60
+ [entry[:media_id], full_dimensions[:height],
61
+ full_dimensions[:width], entry[:mime_type]]
62
+ end
63
+ # Increment values to request the next page.
64
+ offset += PAGE_SIZE
65
+ selector[:paging][:start_index] = offset
66
+ end
67
+ end while page[:total_num_entries] > offset
68
+
69
+ if page.include?(:total_num_entries)
70
+ puts "\tFound %d entries." % page[:total_num_entries]
71
+ end
72
+ end
73
+
74
+ if __FILE__ == $0
75
+ API_VERSION = :v201509
76
+ PAGE_SIZE = 500
77
+
78
+ begin
79
+ get_all_images_and_videos()
80
+
81
+ # Authorization error.
82
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
83
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
84
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
85
+ "to retrieve and store OAuth2 tokens."
86
+ puts "See this wiki page for more details:\n\n " +
87
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
88
+
89
+ # HTTP errors.
90
+ rescue AdsCommon::Errors::HttpError => e
91
+ puts "HTTP Error: %s" % e
92
+
93
+ # API errors.
94
+ rescue AdwordsApi::Errors::ApiException => e
95
+ puts "Message: %s" % e.message
96
+ puts 'Errors:'
97
+ e.errors.each_with_index do |error, index|
98
+ puts "\tError [%d]:" % (index + 1)
99
+ error.each do |field, value|
100
+ puts "\t\t%s: %s" % [field, value]
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,84 @@
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 set up OAuth2.0 authentication credentials.
20
+
21
+ require 'adwords_api'
22
+
23
+ def setup_oauth2()
24
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
25
+ # when called without parameters.
26
+ adwords = AdwordsApi::Api.new
27
+
28
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
29
+ # the configuration file or provide your own logger:
30
+ # adwords.logger = Logger.new('adwords_xml.log')
31
+
32
+ # You can call authorize explicitly to obtain the access token. Otherwise, it
33
+ # will be invoked automatically on the first API call.
34
+ # There are two ways to provide verification code, first one is via the block:
35
+ token = adwords.authorize() do |auth_url|
36
+ puts "Hit Auth error, please navigate to URL:\n\t%s" % auth_url
37
+ print 'log in and type the verification code: '
38
+ verification_code = gets.chomp
39
+ verification_code
40
+ end
41
+ if token
42
+ print "\nWould you like to update your adwords_api.yml to save " +
43
+ "OAuth2 credentials? (y/N): "
44
+ response = gets.chomp
45
+ if ('y'.casecmp(response) == 0) or ('yes'.casecmp(response) == 0)
46
+ adwords.save_oauth2_token(token)
47
+ puts 'OAuth2 token is now saved to ~/adwords_api.yml and will be ' +
48
+ 'automatically used by the library.'
49
+ end
50
+ end
51
+
52
+ # Alternatively, you can provide one within the parameters:
53
+ # token = adwords.authorize({:oauth2_verification_code => verification_code})
54
+
55
+ # Note, 'token' is a Hash. Its value is not used in this example. If you need
56
+ # to be able to access the API in offline mode, with no user present, you
57
+ # should persist it to be used in subsequent invocations like this:
58
+ # adwords.authorize({:oauth2_token => token})
59
+
60
+ # No exception thrown - we are good to make a request.
61
+ end
62
+
63
+ if __FILE__ == $0
64
+ API_VERSION = :v201509
65
+
66
+ begin
67
+ setup_oauth2()
68
+
69
+ # HTTP errors.
70
+ rescue AdsCommon::Errors::HttpError => e
71
+ puts "HTTP Error: %s" % e
72
+
73
+ # API errors.
74
+ rescue AdwordsApi::Errors::ApiException => e
75
+ puts "Message: %s" % e.message
76
+ puts 'Errors:'
77
+ e.errors.each_with_index do |error, index|
78
+ puts "\tError [%d]:" % (index + 1)
79
+ error.each do |field, value|
80
+ puts "\t\t%s: %s" % [field, value]
81
+ end
82
+ end
83
+ end
84
+ end