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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 95e5c74013d7d625ca529ac552315b686e909c85
4
+ data.tar.gz: 055bf37437502ec3230d02c9bf3cb2ef3505779b
5
+ SHA512:
6
+ metadata.gz: e5d80b1044d324eb5a9c3dd21f143e7bac8aadba5a5a921e939ff224c4c2c6d34510cbd413bf708a4ac76d6a62ba6f8109aebe8b6be0a13f2216548842515da8
7
+ data.tar.gz: c7e2116ef288161312a273cdd34d4b8aecad31ce4f81410cfa4891138abe41c68f6459426439e572a1716681a8b84d74fc8b40094842679897f14af49e5b1fbb
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,121 @@
1
+ = GnibAdsApi
2
+
3
+ This project rocks and uses MIT-LICENSE.
4
+
5
+ == Presentation
6
+
7
+ This is a very simple, straight use gem for integrating any Rails app with the
8
+ Bing Ads SOAP Webservices.
9
+
10
+ == Installation
11
+
12
+ Add to your Gemfile
13
+ gem 'gnib-ads-api'
14
+
15
+ == Examples
16
+ So far, I've just integrated some methods from +CampaignManagement+, +CustomerManagement+ and +Reporting+ services
17
+
18
+
19
+ === Authentication
20
+
21
+ In all cases, you must initialize some service object with the authentication options
22
+ Here's an example with the CampaignMangement service object
23
+
24
+ options = {
25
+ :environment => :sandbox,
26
+ :username => "desarrollo_neonline",
27
+ :password => "neonline2013",
28
+ :developer_token => "BBD37VB98",
29
+ :customer_id => "21021746",
30
+ :account_id => "5978083"
31
+ }
32
+ service = GnibAdsApi::CampaignManagement.new(options)
33
+
34
+ * +environment+ can be one of two values: +:sandbox+ or +:production+
35
+
36
+
37
+ === Campaign Management
38
+
39
+ Example of service object initialization:
40
+ options = {
41
+ :environment => :sandbox,
42
+ :username => "desarrollo_neonline",
43
+ :password => "neonline2013",
44
+ :developer_token => "BBD37VB98",
45
+ :customer_id => "21021746",
46
+ :account_id => "5978083"
47
+ }
48
+ service = GnibAdsApi::CampaignManagement.new(options)
49
+
50
+
51
+ ==== Adding Campaigns
52
+
53
+ account_id = 123456789
54
+ campaigns = [
55
+ GnibAdsApi::Campaign.new(
56
+ :budget_type => GnibAdsApi::Campaign::DAILY_BUDGET_STANDARD,
57
+ :conversion_tracking_enabled => "false",
58
+ :daily_budget => 2000,
59
+ :daylight_saving => "false",
60
+ :description => name + " first description",
61
+ :monthly_budget => 5400,
62
+ :name => name + " first name",
63
+ :status => GnibAdsApi::Campaign::PAUSED,
64
+ :time_zone => GnibAdsApi::Campaign::SANTIAGO),
65
+
66
+ GnibAdsApi::Campaign.new(
67
+ :budget_type => GnibAdsApi::Campaign::DAILY_BUDGET_STANDARD,
68
+ :conversion_tracking_enabled => "false",
69
+ :daily_budget => 2500,
70
+ :daylight_saving => "false",
71
+ :description => name + " second description",
72
+ :monthly_budget => 7800,
73
+ :name => name + " second name",
74
+ :status => GnibAdsApi::Campaign::PAUSED,
75
+ :time_zone => GnibAdsApi::Campaign::SANTIAGO) ]
76
+ response = service.add_campaigns(account_id, campaigns)
77
+
78
+ In some cases the methods will return a Hash with the 'response' tag according
79
+ to the method invoked. Like the example above.
80
+
81
+
82
+ ==== Find Campaigns
83
+
84
+ In other cases, like this next example, the method will return an object, like an array or
85
+ a object representation of the hash
86
+ campaigns = service.get_campaigns_by_account_id(123456789)
87
+ # => campaigns is an array of GnibAdsApi::Campaign
88
+
89
+
90
+ === Customer Management
91
+
92
+ Example of service object initialization:
93
+ options = {
94
+ :environment => :sandbox,
95
+ :username => "desarrollo_neonline",
96
+ :password => "neonline2013",
97
+ :developer_token => "BBD37VB98",
98
+ :customer_id => "21021746",
99
+ :account_id => "5978083"
100
+ }
101
+ service = GnibAdsApi::CustomerManagement.new(options)
102
+
103
+ ==== Get accounts info
104
+ accounts = service.get_accounts_info
105
+ # => accounts is an array of GnibAdsApi::AccountsInfo
106
+
107
+ For this method you can also specify a diferent customer id
108
+ accounts = service.get_accounts_info(12345)
109
+ # => accounts is an array of GnibAdsApi::AccountsInfo
110
+ That would give you the customer's 12345 accounts
111
+
112
+
113
+
114
+ === Reporting
115
+
116
+ ==== Submit generate report
117
+
118
+
119
+ ==== Poll generate report
120
+
121
+
data/Rakefile ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'GnibAdsApi'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'test'
33
+ t.pattern = 'test/**/*_test.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+
38
+ task :default => :test
@@ -0,0 +1,44 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'novas'
4
+ require 'gnib-ads-api/api_exception'
5
+ require 'gnib-ads-api/config'
6
+ require 'gnib-ads-api/constants'
7
+ require 'gnib-ads-api/service'
8
+ require 'gnib-ads-api/client_proxy'
9
+ require 'gnib-ads-api/soap_hasheable'
10
+ require 'gnib-ads-api/data_object'
11
+
12
+
13
+ # Require services
14
+ Dir[File.join(File.dirname(__FILE__), 'gnib-ads-api', 'service', '*.rb')].each { |file| require file }
15
+
16
+ # Require data objects
17
+ Dir[File.join(File.dirname(__FILE__), 'gnib-ads-api', 'data', '*.rb')].each { |file| require file }
18
+
19
+ # Require Fault objects
20
+ require 'gnib-ads-api/fault/application_fault'
21
+ require 'gnib-ads-api/fault/ad_api_error'
22
+ require 'gnib-ads-api/fault/ad_api_fault_detail'
23
+ require 'gnib-ads-api/fault/api_fault_detail'
24
+ require 'gnib-ads-api/fault/batch_error'
25
+ require 'gnib-ads-api/fault/operation_error'
26
+ require 'gnib-ads-api/fault/partial_errors'
27
+
28
+ # Require Reporting helper objects
29
+ Dir[File.join(File.dirname(__FILE__), 'gnib-ads-api', 'data', 'reporting', 'helpers', '*.rb')].each { |file| require file }
30
+
31
+ # Require report request data objects
32
+ require 'gnib-ads-api/data/reporting/performance_report_request'
33
+ require 'gnib-ads-api/data/reporting/account_performance_report_request'
34
+ require 'gnib-ads-api/data/reporting/campaign_performance_report_request'
35
+ # require 'gnib-ads-api/data/reporting/ad_group_performance_report_request'
36
+ # require 'gnib-ads-api/data/reporting/ad_performance_report_request'
37
+
38
+ # Public : This is the main namespace for all classes and submodules in this GnibAdsApi Gem
39
+ #
40
+ # Author:: jlopezn@neonline.cl
41
+ module GnibAdsApi
42
+
43
+
44
+ end
@@ -0,0 +1,355 @@
1
+ ##################################
2
+ ## Constant values for Bing Api ##
3
+ ##################################
4
+
5
+
6
+ # WSDL URL for services
7
+ # Default defines sandbox urls. For production, check 'production.wsdl' key
8
+ wsdl:
9
+ sandbox:
10
+ campaign_management: "https://api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v9/CampaignManagementService.svc?singleWsdl"
11
+ customer_management: "https://clientcenter.api.sandbox.bingads.microsoft.com/Api/CustomerManagement/v9/CustomerManagementService.svc?singleWsdl"
12
+ reporting: "https://api.sandbox.bingads.microsoft.com/Api/Advertiser/Reporting/V9/ReportingService.svc?singleWsdl"
13
+ production:
14
+ campaign_management: "https://api.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v9/CampaignManagementService.svc?singleWsdl"
15
+ customer_management: "https://clientcenter.api.bingads.microsoft.com/Api/CustomerManagement/v9/CustomerManagementService.svc?singleWsdl"
16
+ reporting: "https://api.bingads.microsoft.com/Api/Advertiser/Reporting/V9/ReportingService.svc?singleWsdl"
17
+
18
+ # All major constants are here
19
+ # In general the key and value are the same. Key in snake_case (ruby-like) and value in CamelCase (Bing alike)
20
+ constants:
21
+ # Common constants: Time zones, ad_languages (names and codes). For 'market country' check the locales file
22
+ common:
23
+ time_zones:
24
+ abu_dhabi_muscat: 'AbuDhabiMuscat'
25
+ adelaide: 'Adelaide'
26
+ alaska: 'Alaska'
27
+ almaty_novosibirsk: 'Almaty_Novosibirsk'
28
+ amsterdam_berlin_bern_rome_stockholm_vienna: 'AmsterdamBerlinBernRomeStockholmVienna'
29
+ arizona: 'Arizona'
30
+ astana_dhaka: 'AstanaDhaka'
31
+ athens_buckarest_istanbul: 'AthensBuckarestIstanbul'
32
+ atlantic_time_canada: 'AtlanticTimeCanada'
33
+ auckland_wellington: 'AucklandWellington'
34
+ azores: 'Azores'
35
+ baghdad: 'Baghdad'
36
+ baku_tbilisi_yerevan: 'BakuTbilisiYerevan'
37
+ bangkok_hanoi_jakarta: 'BangkokHanoiJakarta'
38
+ beijing_chongqing_hong_kong_urumqi: 'BeijingChongqingHongKongUrumqi'
39
+ belgrade_bratislava_budapest_ljubljana_prague: 'BelgradeBratislavaBudapestLjubljanaPrague'
40
+ bogota_lima_quito: 'BogotaLimaQuito'
41
+ brasilia: 'Brasilia'
42
+ brisbane: 'Brisbane'
43
+ brussels_copenhagen_madrid_paris: 'BrusselsCopenhagenMadridParis'
44
+ bucharest: 'Bucharest'
45
+ buenos_aires_georgetown: 'BuenosAiresGeorgetown'
46
+ cairo: 'Cairo'
47
+ canberra_melbourne_sydney: 'CanberraMelbourneSydney'
48
+ cape_verde_island: 'CapeVerdeIsland'
49
+ caracas_la_paz: 'CaracasLaPaz'
50
+ casablanca_monrovia: 'CasablancaMonrovia'
51
+ central_america: 'CentralAmerica'
52
+ central_time_u_s_canada: 'CentralTimeUSCanada'
53
+ chennai_kolkata_mumbai_new_delhi: 'ChennaiKolkataMumbaiNewDelhi'
54
+ chihuahua_la_paz_mazatlan: 'ChihuahuaLaPazMazatlan'
55
+ darwin: 'Darwin'
56
+ eastern_time_u_s_canada: 'EasternTimeUSCanada'
57
+ ekaterinburg: 'Ekaterinburg'
58
+ fiji_kamchatka_marshall_island: 'FijiKamchatkaMarshallIsland'
59
+ greenland: 'Greenland'
60
+ greenwich_mean_time_dublin_edinburgh_lisbon_london: 'GreenwichMeanTimeDublinEdinburghLisbonLondon'
61
+ guadalajara_mexico_city_monterrey: 'GuadalajaraMexicoCityMonterrey'
62
+ guam_port_moresby: 'GuamPortMoresby'
63
+ harare_pretoria: 'HararePretoria'
64
+ hawaii: 'Hawaii'
65
+ helsinki_kyiv_riga_sofia_tallinn_vilnius: 'HelsinkiKyivRigaSofiaTallinnVilnius'
66
+ hobart: 'Hobart'
67
+ indiana_east: 'IndianaEast'
68
+ international_date_line_west: 'InternationalDateLineWest'
69
+ irkutsk_ulaan_bataar: 'IrkutskUlaanBataar'
70
+ islandamabad_karachi_tashkent: 'IslandamabadKarachiTashkent'
71
+ jerusalem: 'Jerusalem'
72
+ kabul: 'Kabul'
73
+ kathmandu: 'Kathmandu'
74
+ krasnoyarsk: 'Krasnoyarsk'
75
+ kuala_lumpur_singapore: 'KualaLumpurSingapore'
76
+ kuwait_riyadh: 'KuwaitRiyadh'
77
+ magadan_solomon_island_new_caledonia: 'MagadanSolomonIslandNewCaledonia'
78
+ mid_atlantic: 'MidAtlantic'
79
+ midway_islandand_samoa: 'MidwayIslandand_Samoa'
80
+ moscow_st_petersburg_volgograd: 'MoscowStPetersburgVolgograd'
81
+ mountain_time_u_s_canada: 'MountainTime_US_Canada'
82
+ nairobi: 'Nairobi'
83
+ newfoundland: 'Newfoundland'
84
+ nukualofa: 'Nukualofa'
85
+ osaka_sapporo_tokyo: 'OsakaSapporoTokyo'
86
+ pacific_time_u_s_canada_tijuana: 'PacificTimeUSCanadaTijuana'
87
+ perth: 'Perth'
88
+ rangoon: 'Rangoon'
89
+ santiago: 'Santiago'
90
+ sarajevo_skopje_warsaw_zagreb: 'SarajevoSkopjeWarsawZagreb'
91
+ saskatchewan: 'Saskatchewan'
92
+ seoul: 'Seoul'
93
+ sri_jayawardenepura: 'SriJayawardenepura'
94
+ taipei: 'Taipei'
95
+ tehran: 'Tehran'
96
+ vladivostok: 'Vladivostok'
97
+ west_central_africa: 'WestCentralAfrica'
98
+ yakutsk: 'Yakutsk'
99
+ # Ad Languages names
100
+ ad_languages:
101
+ danish: 'Danish'
102
+ dutch: 'Dutch'
103
+ english: 'English'
104
+ finnish: 'Finnish'
105
+ french: 'French'
106
+ german: 'German'
107
+ italian: 'Italian'
108
+ norwegian: 'Norwegian'
109
+ portuguese: 'Portuguese'
110
+ spanish: 'Spanish'
111
+ swedish: 'Swedish'
112
+ traditional_chinese: 'Traditional Chinese'
113
+ # Ad languages codes
114
+ codes:
115
+ danish: 'DA'
116
+ dutch: 'NL'
117
+ english: 'EN'
118
+ finnish: 'FI'
119
+ french: 'FR'
120
+ german: 'DE'
121
+ italian: 'IT'
122
+ norwegian: 'NO'
123
+ portuguese: 'PT'
124
+ spanish: 'ES'
125
+ swedish: 'SV'
126
+ traditional_chinese: 'ZH'
127
+
128
+ # Constansts specific for campaign management services
129
+ campaign_management:
130
+ budget_limit_type:
131
+ monthly_budget_spend_until_depleted: 'MonthlyBudgetSpendUntilDepleted'
132
+ daily_budget_accelerated: 'DailyBudgetAccelerated'
133
+ daily_budget_standard: 'DailyBudgetStandard'
134
+ campaign_status:
135
+ active: 'Active'
136
+ paused: 'Paused'
137
+ budget_paused: 'BudgetPaused'
138
+ budget_and_manual_paused: 'BudgetAndManualPaused'
139
+ deleted: 'Deleted'
140
+ ad_distribution:
141
+ search: 'Search'
142
+ content: 'Content'
143
+ ad_rotation_type:
144
+ optimize_for_clicks: 'OptimizeForClicks'
145
+ rotate_ads_evenly: 'RotateAdsEvenly'
146
+ bidding_model:
147
+ keyword: 'Keyword'
148
+ site_placement: 'SitePlacement'
149
+ pricing_model:
150
+ cpc: 'Cpc'
151
+ cpm: 'Cpm'
152
+ ad_group_status:
153
+ draft: 'Draft'
154
+ active: 'Active'
155
+ paused: 'Paused'
156
+ deleted: 'Deleted'
157
+ ad_editorial_status:
158
+ active: 'Active'
159
+ disapproved: 'Disapproved'
160
+ inactive: 'Inactive'
161
+ active_limited: 'ActiveLimited'
162
+ ad_status:
163
+ inactive: 'Inactive'
164
+ active: 'Active'
165
+ paused: 'Paused'
166
+ deleted: 'Deleted'
167
+ ad_type:
168
+ text: 'Text'
169
+ image: 'Image'
170
+ mobile: 'Mobile'
171
+ rich_search: 'RichSearch'
172
+ product: 'Product'
173
+ keyword_editorial_statuses:
174
+ active: 'Active'
175
+ disapproved: 'Disapproved'
176
+ inactive: 'Inactive'
177
+ keyword_statuses:
178
+ active: 'Active'
179
+ paused: 'Paused'
180
+ deleted: 'Deleted'
181
+ inactive: 'Inactive'
182
+ # Constants specific for customer management
183
+ customer_management:
184
+ account_life_cycle_statuses:
185
+ draft: "Draft"
186
+ active: "Active"
187
+ inactive: "Inactive"
188
+ pause: "Pause"
189
+ pending: "Pending"
190
+ # Constants specific for reporting services
191
+ reporting:
192
+ format:
193
+ csv: 'Csv'
194
+ tsv: 'Tsv'
195
+ xml: 'Xml'
196
+ language:
197
+ english: 'English'
198
+ french: 'French'
199
+ request_status_type:
200
+ Error: 'Error'
201
+ Success: 'Success'
202
+ Pending: 'Pending'
203
+ aggregation:
204
+ summary: 'Summary'
205
+ hourly: 'Hourly'
206
+ daily: 'Daily'
207
+ weekly: 'Weekly'
208
+ monthly: 'Monthly'
209
+ yearly: 'Yearly'
210
+ hour_of_day: 'HourOfDay'
211
+ day_of_week: 'DayOfWeek'
212
+ time_periods:
213
+ today: 'Today'
214
+ yesterday: 'Yesterday'
215
+ last_seven_days: 'LastSevenDays'
216
+ this_week: 'ThisWeek'
217
+ last_week: 'LastWeek'
218
+ last_four_weeks: 'LastFourWeeks'
219
+ this_month: 'ThisMonth'
220
+ last_month: 'LastMonth'
221
+ last_three_months: 'LastThreeMonths'
222
+ last_six_months: 'LastSixMonths'
223
+ this_year: 'ThisYear'
224
+ last_year: 'LastYear'
225
+ filters:
226
+ ad_distribution:
227
+ search: 'Search'
228
+ content: 'Content'
229
+ device_os:
230
+ other: 'Other'
231
+ windows: 'Windows'
232
+ ios: 'iOS'
233
+ android: 'Android'
234
+ black_berry: 'BlackBerry'
235
+ device_type:
236
+ computer: 'Computer'
237
+ smart_phone: 'SmartPhone'
238
+ non_smart_phone: 'NonSmartPhone'
239
+ tablet: 'Tablet'
240
+ campaign_status:
241
+ submited: 'Submited'
242
+ cancelled: 'Cancelled'
243
+ deleted: 'Deleted'
244
+ paused: 'Paused'
245
+ budget_paused: 'BudgetPaused'
246
+ active: 'Active'
247
+ # From here the constants are specific per ReportRequest derive
248
+ # This includes columns, filters and scopes (if any)
249
+ account_performance_report:
250
+ # 'type' represents the value for 'type' attribute in <ReportRequeset> tag for the request XML
251
+ type: "AccountPerformanceReportRequest"
252
+ # 'columns' names for <Columns> tag
253
+ columns:
254
+ account_name: "AccountName"
255
+ account_number: "AccountNumber"
256
+ time_period: "TimePeriod"
257
+ currency_code: "CurrencyCode"
258
+ ad_distribution: "AdDistribution"
259
+ impressions: "Impressions"
260
+ clicks: "Clicks"
261
+ ctr: "Ctr"
262
+ average_cpc: "AverageCpc"
263
+ spend: "Spend"
264
+ average_position: "AveragePosition"
265
+ conversions: "Conversions"
266
+ conversion_rate: "ConversionRate"
267
+ cost_per_conversion: "CostPerConversion"
268
+ low_quality_clicks: "LowQualityClicks"
269
+ low_quality_clicks_percent: "LowQualityClicksPercent"
270
+ low_quality_impressions: "LowQualityImpressions"
271
+ low_quality_impressions_percent: "LowQualityImpressionsPercent"
272
+ low_quality_conversions: "LowQualityConversions"
273
+ low_quality_conversion_rate: "LowQualityConversionRate"
274
+ average_cpm: "AverageCpm"
275
+ device_type: "DeviceType"
276
+ device_o_s: "DeviceOS"
277
+ impression_share_percent: "ImpressionSharePercent"
278
+ impression_lost_to_budget_percent: "ImpressionLostToBudgetPercent"
279
+ impression_lost_to_rank_percent: "ImpressionLostToRankPercent"
280
+ impression_lost_to_bid_percent: "ImpressionLostToBidPercent"
281
+ impression_lost_to_landing_page_relevance_percent: "ImpressionLostToLandingPageRelevancePercent"
282
+ impression_lost_to_keyword_relevance_percent: "ImpressionLostToKeywordRelevancePercent"
283
+ phone_impressions: "PhoneImpressions"
284
+ phone_calls: "PhoneCalls"
285
+ manual_calls: "ManualCalls"
286
+ click_calls: "ClickCalls"
287
+ ptr: "Ptr"
288
+ phone_spend: "PhoneSpend"
289
+ average_cpp: "AverageCpp"
290
+ total_cost_phone_and_clicks: "TotalCostPhoneAndClicks"
291
+ network: "Network"
292
+ top_vs_other: "TopVsOther"
293
+ # 'filter' for the <Filter> tag in Request XML
294
+ filter:
295
+ ad_distribution: "AdDistribution"
296
+ device_os: "DeviceOS"
297
+ device_type: "DeviceType"
298
+ campaign_performance_report:
299
+ type: "CampaignPerformanceReportRequest"
300
+ columns:
301
+ account_name: "AccountName"
302
+ account_number: "AccountNumber"
303
+ time_period: "TimePeriod"
304
+ status: "Status"
305
+ campaign_name: "CampaignName"
306
+ campaign_id: "CampaignId"
307
+ currency_code: "CurrencyCode"
308
+ ad_distribution: "AdDistribution"
309
+ impressions: "Impressions"
310
+ clicks: "Clicks"
311
+ ctr: "Ctr"
312
+ average_cpc: "AverageCpc"
313
+ spend: "Spend"
314
+ average_position: "AveragePosition"
315
+ conversions: "Conversions"
316
+ conversion_rate: "ConversionRate"
317
+ cost_per_conversion: "CostPerConversion"
318
+ low_quality_clicks: "LowQualityClicks"
319
+ low_quality_clicks_percent: "LowQualityClicksPercent"
320
+ low_quality_impressions: "LowQualityImpressions"
321
+ low_quality_impressions_percent: "LowQualityImpressionsPercent"
322
+ low_quality_conversions: "LowQualityConversions"
323
+ low_quality_conversion_rate: "LowQualityConversionRate"
324
+ average_cpm: "AverageCpm"
325
+ device_type: "DeviceType"
326
+ device_o_s: "DeviceOS"
327
+ impression_share_percent: "ImpressionSharePercent"
328
+ impression_lost_to_budget_percent: "ImpressionLostToBudgetPercent"
329
+ impression_lost_to_rank_percent: "ImpressionLostToRankPercent"
330
+ quality_score: "QualityScore"
331
+ keyword_relevance: "KeywordRelevance"
332
+ landing_page_relevance: "LandingPageRelevance"
333
+ landing_page_user_experience: "LandingPageUserExperience"
334
+ historic_quality_score: "HistoricQualityScore"
335
+ historic_keyword_relevance: "HistoricKeywordRelevance"
336
+ historic_landing_page_relevance: "HistoricLandingPageRelevance"
337
+ historic_landing_page_user_experience: "HistoricLandingPageUserExperience"
338
+ impression_lost_to_bid_percent: "ImpressionLostToBidPercent"
339
+ impression_lost_to_landing_page_relevance_percent: "ImpressionLostToLandingPageRelevancePercent"
340
+ impression_lost_to_keyword_relevance_percent: "ImpressionLostToKeywordRelevancePercent"
341
+ phone_impressions: "PhoneImpressions"
342
+ phone_calls: "PhoneCalls"
343
+ manual_calls: "ManualCalls"
344
+ click_calls: "ClickCalls"
345
+ ptr: "Ptr"
346
+ phone_spend: "PhoneSpend"
347
+ average_cpp: "AverageCpp"
348
+ total_cost_phone_and_clicks: "TotalCostPhoneAndClicks"
349
+ network: "Network"
350
+ top_vs_other: "TopVsOther"
351
+ filter:
352
+ ad_distribution: "AdDistribution"
353
+ device_os: "DeviceOS"
354
+ device_type: "DeviceType"
355
+ status: "Status"