gnib-ads-api 0.3

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 (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'