gnib-ads-api 0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +121 -0
  4. data/Rakefile +38 -0
  5. data/lib/gnib-ads-api.rb +44 -0
  6. data/lib/gnib-ads-api.yml +355 -0
  7. data/lib/gnib-ads-api/api_exception.rb +42 -0
  8. data/lib/gnib-ads-api/client_proxy.rb +147 -0
  9. data/lib/gnib-ads-api/config.rb +75 -0
  10. data/lib/gnib-ads-api/constants.rb +150 -0
  11. data/lib/gnib-ads-api/data/accounts_info.rb +72 -0
  12. data/lib/gnib-ads-api/data/ad.rb +119 -0
  13. data/lib/gnib-ads-api/data/ad_group.rb +121 -0
  14. data/lib/gnib-ads-api/data/campaign.rb +40 -0
  15. data/lib/gnib-ads-api/data/report_request.rb +78 -0
  16. data/lib/gnib-ads-api/data/report_request_status.rb +48 -0
  17. data/lib/gnib-ads-api/data/reporting/account_performance_report_request.rb +176 -0
  18. data/lib/gnib-ads-api/data/reporting/campaign_performance_report_request.rb +186 -0
  19. data/lib/gnib-ads-api/data/reporting/helpers/column_helper.rb +65 -0
  20. data/lib/gnib-ads-api/data/reporting/helpers/filter_helper.rb +124 -0
  21. data/lib/gnib-ads-api/data/reporting/helpers/scope_helper.rb +51 -0
  22. data/lib/gnib-ads-api/data/reporting/helpers/time_helper.rb +69 -0
  23. data/lib/gnib-ads-api/data/reporting/performance_report_request.rb +78 -0
  24. data/lib/gnib-ads-api/data_object.rb +35 -0
  25. data/lib/gnib-ads-api/fault/ad_api_error.rb +15 -0
  26. data/lib/gnib-ads-api/fault/ad_api_fault_detail.rb +67 -0
  27. data/lib/gnib-ads-api/fault/api_fault_detail.rb +97 -0
  28. data/lib/gnib-ads-api/fault/application_fault.rb +18 -0
  29. data/lib/gnib-ads-api/fault/batch_error.rb +47 -0
  30. data/lib/gnib-ads-api/fault/operation_error.rb +22 -0
  31. data/lib/gnib-ads-api/fault/partial_errors.rb +75 -0
  32. data/lib/gnib-ads-api/service.rb +176 -0
  33. data/lib/gnib-ads-api/service/campaign_management.rb +483 -0
  34. data/lib/gnib-ads-api/service/customer_management.rb +83 -0
  35. data/lib/gnib-ads-api/service/reporting.rb +101 -0
  36. data/lib/gnib-ads-api/soap_hasheable.rb +160 -0
  37. data/lib/gnib-ads-api/version.rb +6 -0
  38. data/lib/locales/es.yml +174 -0
  39. data/lib/tasks/gnib-ads-api_tasks.rake +4 -0
  40. data/test/campaign_management_test.rb +463 -0
  41. data/test/customer_management_test.rb +44 -0
  42. data/test/data_object_test.rb +46 -0
  43. data/test/dummy/README.rdoc +261 -0
  44. data/test/dummy/Rakefile +7 -0
  45. data/test/dummy/app/assets/javascripts/application.js +15 -0
  46. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  47. data/test/dummy/app/controllers/application_controller.rb +3 -0
  48. data/test/dummy/app/helpers/application_helper.rb +2 -0
  49. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  50. data/test/dummy/config.ru +4 -0
  51. data/test/dummy/config/application.rb +56 -0
  52. data/test/dummy/config/boot.rb +10 -0
  53. data/test/dummy/config/database.yml +25 -0
  54. data/test/dummy/config/environment.rb +5 -0
  55. data/test/dummy/config/environments/development.rb +37 -0
  56. data/test/dummy/config/environments/production.rb +67 -0
  57. data/test/dummy/config/environments/test.rb +37 -0
  58. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  59. data/test/dummy/config/initializers/inflections.rb +15 -0
  60. data/test/dummy/config/initializers/mime_types.rb +5 -0
  61. data/test/dummy/config/initializers/secret_token.rb +7 -0
  62. data/test/dummy/config/initializers/session_store.rb +8 -0
  63. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  64. data/test/dummy/config/locales/en.yml +5 -0
  65. data/test/dummy/config/routes.rb +58 -0
  66. data/test/dummy/public/404.html +26 -0
  67. data/test/dummy/public/422.html +26 -0
  68. data/test/dummy/public/500.html +25 -0
  69. data/test/dummy/public/favicon.ico +0 -0
  70. data/test/dummy/script/rails +6 -0
  71. data/test/gnib-ads-api_test.rb +172 -0
  72. data/test/report_request_test.rb +312 -0
  73. data/test/reporting_test.rb +145 -0
  74. data/test/test_helper.rb +11 -0
  75. metadata +193 -0
@@ -0,0 +1,83 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module GnibAdsApi
3
+
4
+
5
+ # Public : This class represents the Customer Management Services
6
+ # defined in the Bing Ads API, to manage customer accounts
7
+ #
8
+ # Author:: jlopezn@neonline.cl
9
+ #
10
+ # Examples
11
+ # options = {
12
+ # :environment => :sandbox,
13
+ # :username => "username",
14
+ # :password => "pass",
15
+ # :developer_token => "SOME_TOKEN",
16
+ # :customer_id => "1234567",
17
+ # :account_id => "9876543" }
18
+ # service = GnibAdsApi::CustomerManagement.new(options)
19
+ class CustomerManagement < GnibAdsApi::Service
20
+
21
+
22
+ # Public : Constructor
23
+ #
24
+ # Author:: jlopezn@neonline.cl
25
+ #
26
+ # options - Hash with the parameters for the client proxy and the environment
27
+ #
28
+ # Examples
29
+ # options = {
30
+ # :environment => :sandbox,
31
+ # :username => "username",
32
+ # :password => "password",
33
+ # :developer_token => "DEV_TOKEN",
34
+ # :customer_id => "123456",
35
+ # :account_id => "654321"
36
+ # }
37
+ # service = GnibAdsApi::CustomerManagement.new(options)
38
+ def initialize(options={})
39
+ super(options)
40
+ end
41
+
42
+
43
+ #########################
44
+ ## Operations Wrappers ##
45
+ #########################
46
+
47
+ # Public : Gets a list of objects that contains account identification information,
48
+ # for example the name and identifier of the account, for the specified customer.
49
+ #
50
+ # Author:: jlopezn@neonline.cl
51
+ #
52
+ # === Parameters
53
+ # +customer_id+ - identifier for the customer who owns the accounts. If nil, then the authentication customer id is used
54
+ # +only_parent_accounts+ - boolean to determine whether to return only the accounts that belong to the customer or to also
55
+ # return the accounts that the customer manages for other customers. Default false
56
+ #
57
+ # === Examples
58
+ # customer_management_service.get_accounts_info
59
+ # # => Array[GnibAdsApi::AccountsInfo]
60
+ #
61
+ # Returns:: Array of GnibAdsApi::AccountsInfo
62
+ #
63
+ # Raises:: exception
64
+ def get_accounts_info(customer_id=nil, only_parent_accounts=false)
65
+ response = call(:get_accounts_info,
66
+ {customer_id: customer_id || self.client_proxy.customer_id,
67
+ only_parent_accounts: only_parent_accounts.to_s})
68
+ response_hash = get_response_hash(response, __method__)
69
+ accounts = response_hash[:accounts_info][:account_info].map do |account_hash|
70
+ GnibAdsApi::AccountInfo.new(account_hash)
71
+ end
72
+ return accounts
73
+ end
74
+
75
+
76
+ private
77
+ def get_service_name
78
+ "customer_management"
79
+ end
80
+
81
+ end
82
+
83
+ end
@@ -0,0 +1,101 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module GnibAdsApi
3
+
4
+ # Public : This class represents the Reporting Services
5
+ # defined in the Bing Ads API, to request and download reports
6
+ #
7
+ # Author:: jlopezn@neonline.cl
8
+ #
9
+ # Examples
10
+ # options = {
11
+ # :environment => :sandbox,
12
+ # :username => "username",
13
+ # :password => "pass",
14
+ # :developer_token => "SOME_TOKEN",
15
+ # :customer_id => "1234567",
16
+ # :account_id => "9876543" }
17
+ # service = GnibAdsApi::Reporting.new(options)
18
+ class Reporting < GnibAdsApi::Service
19
+
20
+
21
+ # Public : Get the status of a report request
22
+ #
23
+ # Author:: jlopezn@neonline.cl
24
+ #
25
+ # === Parameters
26
+ # +report_request_id+ - Identifier of the report request
27
+ #
28
+ # === Examples
29
+ # service.poll_generate_report("12345")
30
+ # # => Hash
31
+ #
32
+ # Returns:: Hash with the PollGenerateReportResponse structure
33
+ #
34
+ # Raises:: exception
35
+ def poll_generate_report(report_request_id)
36
+ response = call(:poll_generate_report,
37
+ {report_request_id: report_request_id} )
38
+ response_hash = get_response_hash(response, __method__)
39
+ report_request_status = GnibAdsApi::ReportRequestStatus.new(
40
+ response_hash[:report_request_status])
41
+ return report_request_status
42
+ end
43
+
44
+ # Public : Submits a report request
45
+ #
46
+ # Author:: jlopezn@neonline.cl
47
+ #
48
+ # === Parameters
49
+ # +report_request+ - a GnibAdsApi::ReportRequest subclass instance
50
+ #
51
+ # === Examples
52
+ # ==== CampaignPerformanceReportRequest
53
+ # report_request = GnibAdsApi::CampaignPerformanceReportRequest.new(:format => :xml,
54
+ # :language => :english,
55
+ # :report_name => "My Report",
56
+ # :aggregation => :hourly,
57
+ # :columns => [:account_name, :account_number, :time_period,
58
+ # :campaign_name, :campaign_id, :status, :currency_code,
59
+ # :impressions, :clicks, :ctr, :average_cpc, :spend,
60
+ # :conversions, :conversion_rate, :cost_per_conversion, :average_cpm ],
61
+ # :filter => {
62
+ # # String as bing expected
63
+ # :ad_distribution => "Search",
64
+ # :device_os => "Windows",
65
+ # # snake case symbol
66
+ # :device_type => :computer,
67
+ # # nil criteria
68
+ # :status => nil
69
+ # },
70
+ # :scope => {:account_ids => 5978083,
71
+ # :campaigns => [
72
+ # {:account_id => 5978083, :campaign_id => 1951230156},
73
+ # {:account_id => 5978083, :campaign_id => 1951245412},
74
+ # {:account_id => 5978083, :campaign_id => 1951245474}]
75
+ # },
76
+ # :time => {
77
+ # :custom_date_range_end => {:day => 31, :month => 12, :year => 2013},
78
+ # :custom_date_range_start => {:day => 1, :month => 12, :year => 2013},
79
+ # })
80
+ # report_request_id = reporting_service.submit_generate_report(report_request)
81
+ # # => "1234567890"
82
+ #
83
+ # Returns:: String with the requested report id
84
+ #
85
+ # Raises:: Exception if report_request is invalid or SOAP request failed
86
+ def submit_generate_report(report_request)
87
+ response = call(:submit_generate_report,
88
+ {report_request: report_request.to_hash(:camelcase)})
89
+ response_hash = get_response_hash(response, __method__)
90
+ report_request_id = response_hash[:report_request_id]
91
+ return report_request_id
92
+ end
93
+
94
+
95
+ private
96
+ def get_service_name
97
+ "reporting"
98
+ end
99
+
100
+ end
101
+ end
@@ -0,0 +1,160 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module GnibAdsApi
4
+
5
+ ##
6
+ # Public:: Module to define an object as Hasheable for the SOAP requests
7
+ #
8
+ # Author:: jlopezn@neonline.cl
9
+ module SOAPHasheable
10
+
11
+
12
+ # Internal: Metodo custom para transformar a hash un objeto.
13
+ # Se puede indicar si se desean las keys en formato CamelCase o underscore_case
14
+ #
15
+ # Author:: asaavedrab@neonline.cl
16
+ #
17
+ # === Parameters
18
+ # * keys_case - indica si las keys del hash deben estar en formato
19
+ # ** :camelcase - CamelCase
20
+ # ** :underscore - underscore_case
21
+ #
22
+ # === Example
23
+ # a=BusinessPartner.new
24
+ # a.to_hash
25
+ # # => {id => 1, name => "emol"}
26
+ #
27
+ # Returns:: Hash
28
+ def to_hash(keys_case=:underscore)
29
+ object_to_hash(self, keys_case)
30
+ end
31
+
32
+
33
+ # Internal: Internal method to return an object as a SOAP Request alike hash
34
+ # If the object is an array, this methods executes object_to_hash for each item.
35
+ # If the object is a Hash, this methods normalize the keys according to +keys_case+ and executes object_to_hash for each value
36
+ # If the object is a String or Numeric, returns the object
37
+ #
38
+ # Author:: asaavedrab@neonline.cl, jlopezn@neonline.cl
39
+ #
40
+ # === Parameters
41
+ # * +object+ - object instance to be hashed
42
+ # * +keys_case+ - specifies the hash keys case, default 'underscore'
43
+ # ==== keys_case
44
+ # * :camelcase - CamelCase
45
+ # * :underscore - underscore_case
46
+ #
47
+ # === Example:
48
+ # a=Person.new
49
+ # a.to_hash(:underscore)
50
+ # # => {'id' => 1, 'full_name' => "John Doe"}
51
+ #
52
+ # a=Person.new
53
+ # a.to_hash(:camelcase)
54
+ # # => {'Id' => 1, 'FullName' => "John Doe"}
55
+ #
56
+ # a=[<Person>, <Person>, <Cat>]
57
+ # a.to_hash(:underscore)
58
+ # # => [{'id' => 1, 'full_name' => "John Doe"}, {'id' => 2, 'full_name' => "Ms Mary"}, {'id' => 3, 'name' => "Mr Whiskers", 'color' => "Gray"}]
59
+ #
60
+ # Returns:: Hash
61
+ def object_to_hash(object, keys_case=:underscore)
62
+
63
+ # Nil safe
64
+ return nil if object.nil?
65
+
66
+ # In case of hash, we only normalize the keys values
67
+ return normalize_hash_keys(object, keys_case) if object.is_a?(Hash)
68
+ # In case of array, we make hasheable each element
69
+ return object.collect{ |item| object_to_hash(item, keys_case) } if object.is_a?(Array)
70
+ # In case of number or string, this methods return the object
71
+ return object if object.is_a?(String) || object.is_a?(Numeric)
72
+
73
+ hash={}
74
+ object.instance_variables.each do |var|
75
+ if !object.instance_variable_get(var).nil?
76
+ value = object.instance_variable_get(var)
77
+ hashed_value = case value.class.to_s
78
+ when "Hash" then normalize_hash_keys(value, keys_case)
79
+ when "Array" then value.collect{ |item| object_to_hash(item, keys_case) }
80
+ else value
81
+ end
82
+ hash[get_attribute_key(var, keys_case)] = hashed_value
83
+ end
84
+ end
85
+ return hash
86
+ end
87
+
88
+
89
+ # Public:: Normalize the keys of a hash with the case specified
90
+ #
91
+ # Author:: jlopexn@neonline.cl
92
+ #
93
+ # === Parameters
94
+ # * +hash+ - Hash to be normalized
95
+ # * +keys_case+ - :underscore or :camelcase
96
+ #
97
+ # === Examples
98
+ # normalize_hash_keys({:some_key => value1}, :camelcase)
99
+ # # => {"SomeKey" => value1}
100
+ #
101
+ # normalize_hash_keys({:some_key => value1}, :underscore)
102
+ # # => {"some_key" => value1}
103
+ #
104
+ # Returns:: Hash
105
+ def normalize_hash_keys(hash, keys_case)
106
+ return hash.inject({}) { |h, (k, v)| h[get_attribute_key(k, keys_case)] = object_to_hash(v, keys_case); h }
107
+ end
108
+
109
+
110
+ # Internal : Helper method to determinate the key name in the hash for the SOAP request
111
+ #
112
+ # Author:: jlopezn@neonline.cl
113
+ #
114
+ # === Parameters
115
+ # * attribute - the attribute name
116
+ # * keys_case - defines the case for the attribute name.
117
+ # ==== keys_case
118
+ # * :camelcase - CamelCase
119
+ # * :underscore - underscore_case
120
+ #
121
+ # === Examples
122
+ # get_attribute_key("attribute_name", :underscore)
123
+ # # => "attribute_name"
124
+ #
125
+ # get_attribute_key("name", :camelcase)
126
+ # # => "AttributeName"
127
+ #
128
+ # Returns:: String with the attribute name for the key in the hash
129
+ def get_attribute_key(attribute, keys_case = :underscore)
130
+ if keys_case == :underscore
131
+ return attribute.to_s.delete("@").underscore
132
+ elsif keys_case == :camelcase
133
+ return attribute.to_s.delete("@").camelcase
134
+ end
135
+ end
136
+
137
+
138
+ # Internal : Returns a DateTime as a hash for SOAP requests
139
+ #
140
+ # Author:: jlopezn@neonline.cl
141
+ #
142
+ # === Parameters
143
+ # * date - DateTime to be hashed
144
+ # * keys_case - defines the case for keys in the hash
145
+ # ==== keys_case
146
+ # * :camelcase - CamelCase
147
+ # * :underscore - underscore_case
148
+ #
149
+ # Returns:: Hash with the :year, :month, :day keys
150
+ def date_to_hash(date, keys_case)
151
+ {
152
+ get_attribute_key("day", keys_case) => date.day,
153
+ get_attribute_key("month", keys_case) => date.month,
154
+ get_attribute_key("year", keys_case) => date.year
155
+ }
156
+ end
157
+
158
+ end
159
+
160
+ end
@@ -0,0 +1,6 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module GnibAdsApi
3
+
4
+ # Gem Version
5
+ VERSION = "0.3"
6
+ end
@@ -0,0 +1,174 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ es-CL:
5
+
6
+ bing:
7
+
8
+ constants:
9
+
10
+ common:
11
+ time_zones:
12
+ abu_dhabi_muscat: 'Abu Dhabi y Muscat'
13
+ adelaide: 'Adelaide, Australia'
14
+ alaska: 'Alaska'
15
+ almaty_novosibirsk: 'Almaty y Novosibirsk'
16
+ amsterdam_berlin_bern_rome_stockholm_vienna: 'Amsterdam, Berlin, Bern, Rome, Stockholm, y Vienna'
17
+ arizona: 'Arizona'
18
+ astana_dhaka: 'Astana y Dhaka'
19
+ athens_buckarest_istanbul: 'Athens, Istanbul, Beirut, y Minsk'
20
+ atlantic_time_canada: 'Atlantic Time y Canada'
21
+ auckland_wellington: 'Auckland y Wellington, New Zealand'
22
+ azores: 'Azores'
23
+ baghdad: 'Baghdad'
24
+ baku_tbilisi_yerevan: 'Baku, Tbilisi, y Yerevan'
25
+ bangkok_hanoi_jakarta: 'Bangkok, Hanoi, y Jakarta'
26
+ beijing_chongqing_hong_kong_urumqi: 'Beijing, Chongqing, Hong Kong, y Urumqi'
27
+ belgrade_bratislava_budapest_ljubljana_prague: 'Belgrade, Bratislava, Budapest, Ljubljana, y Prague'
28
+ bogota_lima_quito: 'Bogota, Lima, y Quito'
29
+ brasilia: 'Brasilia'
30
+ brisbane: 'Brisbane'
31
+ brussels_copenhagen_madrid_paris: 'Brussels, Copenhagen, Madrid, y Paris'
32
+ bucharest: 'Bucharest'
33
+ buenos_aires_georgetown: 'Buenos Aires y Georgetown'
34
+ cairo: 'Cairo'
35
+ canberra_melbourne_sydney: 'Canberra, Melbourne, y Sydney'
36
+ cape_verde_island: 'Cape Verde Island'
37
+ caracas_la_paz: 'Caracas y La Paz (Bolivia)'
38
+ casablanca_monrovia: 'Casablanca y Monrovia'
39
+ central_america: 'Central America'
40
+ central_time_u_s_canada: 'Central Time U.S. y Canada'
41
+ chennai_kolkata_mumbai_new_delhi: 'Chennai, Kolkata, Mumbai, y New Delhi'
42
+ chihuahua_la_paz_mazatlan: 'Chihuahua, La Paz (Mexico), y Mazatlan'
43
+ darwin: 'Darwin'
44
+ eastern_time_u_s_canada: 'Eastern Time U.S. y Canada'
45
+ ekaterinburg: 'Ekaterinburg'
46
+ fiji_kamchatka_marshall_island: 'Fiji, Kamchatka, y Marshall Island'
47
+ greenland: 'Greenland'
48
+ greenwich_mean_time_dublin_edinburgh_lisbon_london: 'Greenwich Mean Time, Dublin, Edinburgh, Lisbon, y London'
49
+ guadalajara_mexico_city_monterrey: 'Guadalajara, Mexico City, y Monterrey'
50
+ guam_port_moresby: 'Guam y Port Moresby'
51
+ harare_pretoria: 'Harare y Pretoria'
52
+ hawaii: 'Hawaii'
53
+ helsinki_kyiv_riga_sofia_tallinn_vilnius: 'Helsinki, Kyiv, Riga, Sofia, Tallinn, y Vilnius'
54
+ hobart: 'Hobart'
55
+ indiana_east: 'Indiana (East)'
56
+ international_date_line_west: 'International Date Line (West)'
57
+ irkutsk_ulaan_bataar: 'Irkutsk y Ulaanbaatar'
58
+ islandamabad_karachi_tashkent: 'Islamabad, Karachi, y Tashkent'
59
+ jerusalem: 'Jerusalem'
60
+ kabul: 'Kabul'
61
+ kathmandu: 'Kathmandu'
62
+ krasnoyarsk: 'Krasnoyarsk'
63
+ kuala_lumpur_singapore: 'Kuala Lumpur y Singapore'
64
+ kuwait_riyadh: 'Kuwait y Riyadh'
65
+ magadan_solomon_island_new_caledonia: 'Magadan, Solomon Islands, y New Caledonia'
66
+ mid_atlantic: 'Mid-Atlantic'
67
+ midway_islandand_samoa: 'Midway Island y Samoa'
68
+ moscow_st_petersburg_volgograd: 'Moscow, St Petersburg, y Volgograd'
69
+ mountain_time_u_s_canada: 'Mountain Time U.S. y Canada'
70
+ nairobi: 'Nairobi'
71
+ newfoundland: 'Newfoundland'
72
+ nukualofa: 'Nuku'alofa'
73
+ osaka_sapporo_tokyo: 'Osaka, Sapporo, y Tokyo'
74
+ pacific_time_u_s_canada_tijuana: 'Pacific Time, U.S. y Canada, y Tijuana'
75
+ perth: 'Perth'
76
+ rangoon: 'Rangoon'
77
+ santiago: 'Santiago'
78
+ sarajevo_skopje_warsaw_zagreb: 'Sarajevo, Skopie, Warsaw, y Zagreb'
79
+ saskatchewan: 'Saskatchewan'
80
+ seoul: 'Seoul'
81
+ sri_jayawardenepura: 'Sri Jayawardenepura'
82
+ taipei: 'Taipei'
83
+ tehran: 'Tehran'
84
+ vladivostok: 'Vladivostok'
85
+ west_central_africa: 'West Central Africa'
86
+ yakutsk: 'Yakutsk'
87
+ ad_languages:
88
+ danish: 'Danish'
89
+ dutch: 'Dutch'
90
+ english: 'English'
91
+ finnish: 'Finnish'
92
+ french: 'French'
93
+ german: 'German'
94
+ italian: 'Italian'
95
+ norwegian: 'Norwegian'
96
+ portuguese: 'Portuguese'
97
+ spanish: 'Spanish'
98
+ swedish: 'Swedish'
99
+ traditional_chinese: 'Traditional Chinese'
100
+ codes:
101
+ danish: 'DA'
102
+ dutch: 'NL'
103
+ english: 'EN'
104
+ finnish: 'FI'
105
+ french: 'FR'
106
+ german: 'DE'
107
+ italian: 'IT'
108
+ norwegian: 'NO'
109
+ portuguese: 'PT'
110
+ spanish: 'ES'
111
+ swedish: 'SV'
112
+ traditional_chinese: 'ZH'
113
+ market_country:
114
+ danish: 'Denmark'
115
+ dutch: 'Netherlands'
116
+ english: 'Australia Canada India Indonesia Ireland Malaysia New Zealand Philippines Singapore Thailand United Kingdom United States Vietnam'
117
+ finnish: 'Finland '
118
+ french: 'Belgium Canada France'
119
+ german: 'Austria Germany Switzerland'
120
+ italian: 'Italy'
121
+ norwegian: 'Norway'
122
+ portuguese: 'Brazil'
123
+ spanish: 'Argentina Chile Colombia Mexico Peru Spain Venezuela'
124
+ swedish: 'Sweden'
125
+ traditional_chinese: 'Hong Kong Taiwan'
126
+
127
+ campaign_management:
128
+ budget_limit_type:
129
+ monthly_budget_spend_until_depleted: 'MonthlyBudgetSpendUntilDepleted'
130
+ daily_budget_accelerated: 'DailyBudgetAccelerated'
131
+ daily_budget_standard: 'DailyBudgetStandard'
132
+ campaign_status:
133
+ active: 'Activa'
134
+ paused: 'Pausada'
135
+ budget_paused: 'Pausada por presupuesto'
136
+ budget_and_manual_paused: 'Pausada por presupuesto y manual'
137
+ deleted: 'Deleted'
138
+ ad_distribution:
139
+ search: 'Búsqueda'
140
+ content: 'Contenido'
141
+ ad_rotation_type:
142
+ optimize_for_clicks: 'Optimizado por clicks'
143
+ rotate_ads_evenly: 'Rotar anuncios parejo'
144
+ bidding_model:
145
+ keyword: 'Keywords'
146
+ site_placement: 'Posición en sitio'
147
+ pricing_model:
148
+ cpc: 'Cpc'
149
+ cpm: 'Cpm'
150
+ ad_group_status:
151
+ draft: 'Borrador'
152
+ active: 'Activo'
153
+ paused: 'Pausado'
154
+ deleted: 'Eliminado'
155
+ ad_status:
156
+ inactive: 'Inactivo'
157
+ Active: 'Activo'
158
+ paused: 'Pausado'
159
+ deleted: 'Eliminado'
160
+ ad_type:
161
+ text: 'Texto'
162
+ image: 'Imágen'
163
+ mobile: 'Mobil'
164
+ rich_search: 'Búsqueda enriquecida'
165
+ product: 'Producto'
166
+ keyword_editorial_status:
167
+ active: 'Activo'
168
+ disapproved: 'Desaprovado'
169
+ inactive: 'Inactivo'
170
+ keyword_status:
171
+ active: 'Activo'
172
+ paused: 'Pausado'
173
+ deleted: 'Borrado'
174
+ inactive: 'Inactivo'