soapy_bing 0.3.1 → 0.4.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 (139) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile +1 -0
  4. data/README.md +18 -18
  5. data/Rakefile +1 -0
  6. data/lib/soapy_bing.rb +5 -1
  7. data/lib/soapy_bing/account.rb +1 -0
  8. data/lib/soapy_bing/accounts.rb +13 -17
  9. data/lib/soapy_bing/ads.rb +18 -41
  10. data/lib/soapy_bing/ads/campaign_performance_report.rb +49 -0
  11. data/lib/soapy_bing/ads/campaigns.rb +106 -0
  12. data/lib/soapy_bing/ads/parsers/bulk_csv_parser.rb +34 -0
  13. data/lib/soapy_bing/ads/parsers/report_csv_parser.rb +45 -0
  14. data/lib/soapy_bing/ads/report.rb +93 -0
  15. data/lib/soapy_bing/campaign_management.rb +21 -0
  16. data/lib/soapy_bing/country_codes.rb +17 -0
  17. data/lib/soapy_bing/country_codes.yml +727 -0
  18. data/lib/soapy_bing/customer.rb +1 -0
  19. data/lib/soapy_bing/helpers.rb +1 -1
  20. data/lib/soapy_bing/helpers/zip_downloader.rb +1 -0
  21. data/lib/soapy_bing/oauth_credentials.rb +1 -0
  22. data/lib/soapy_bing/param_guard.rb +1 -0
  23. data/lib/soapy_bing/service.rb +69 -0
  24. data/lib/soapy_bing/service_operation.rb +62 -0
  25. data/lib/soapy_bing/version.rb +2 -1
  26. data/lib/soapy_bing/wsdl/ad_insight.wsdl +1 -0
  27. data/lib/soapy_bing/wsdl/bulk.wsdl +1 -0
  28. data/lib/soapy_bing/wsdl/campaign_management.wsdl +1 -0
  29. data/lib/soapy_bing/wsdl/customer_billing.wsdl +1 -0
  30. data/lib/soapy_bing/wsdl/customer_management.wsdl +1 -0
  31. data/lib/soapy_bing/wsdl/reporting.wsdl +1 -0
  32. data/lib/tasks/console.rake +1 -0
  33. data/lib/tasks/coverage.rake +1 -0
  34. data/lib/tasks/spec.rake +1 -0
  35. data/lib/tasks/upate_wsdl_files.rake +23 -0
  36. data/lib/tasks/update_country_codes.rake +24 -0
  37. data/soapy_bing.gemspec +2 -1
  38. data/spec/fixtures/ads/campaign_performance_report.csv +37 -0
  39. data/spec/fixtures/ads/campaign_performance_report.json +170 -0
  40. data/spec/fixtures/ads/campaigns_by_account_id.csv +7 -0
  41. data/spec/fixtures/{bulk/campaigns.json → ads/campaigns_by_account_id.json} +496 -240
  42. data/spec/fixtures/ads/campaigns_by_campaign_ids.csv +5 -0
  43. data/spec/fixtures/ads/campaigns_by_campaign_ids.json +910 -0
  44. data/spec/fixtures/vcr_cassettes/SoapyBing_Accounts/_list/returns_a_list_of_SoapyBing_Account_objects.yml +27 -27
  45. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_campaigns/by_account_id/returns_parsed_rows.yml +301 -0
  46. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_campaigns/by_campaign_ids/returns_parsed_rows.yml +300 -0
  47. data/spec/fixtures/vcr_cassettes/SoapyBing_CampaignManagement/_get_geo_locations/returns_a_list_of_geo_locations_hashes.yml +154 -0
  48. data/spec/fixtures/vcr_cassettes/campaign_performance_report/with_pending_status.yml +65 -94
  49. data/spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_empty_response.yml +511 -0
  50. data/spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_response.yml +384 -0
  51. data/spec/integration/soapy_bing/accounts_spec.rb +1 -0
  52. data/spec/integration/soapy_bing/ads_campaigns_spec.rb +85 -0
  53. data/spec/integration/soapy_bing/campaign_management_spec.rb +22 -0
  54. data/spec/integration/soapy_bing/oauth_credentials_spec.rb +1 -0
  55. data/spec/simplecov_setup.rb +1 -0
  56. data/spec/soapy_bing/account_spec.rb +6 -2
  57. data/spec/soapy_bing/accounts_spec.rb +47 -0
  58. data/spec/soapy_bing/ads/campaign_performance_report_spec.rb +79 -0
  59. data/spec/soapy_bing/ads/campaigns_spec.rb +99 -0
  60. data/spec/soapy_bing/ads/{bulk/parsers/csv_parser_spec.rb → parsers/bulk_csv_parser_spec.rb} +5 -4
  61. data/spec/soapy_bing/ads/{reports/parsers/csv_parser_spec.rb → parsers/report_csv_parser_spec.rb} +6 -4
  62. data/spec/soapy_bing/country_codes_spec.rb +39 -0
  63. data/spec/soapy_bing/helpers/zip_downloader_spec.rb +2 -0
  64. data/spec/soapy_bing/oauth_credentials_spec.rb +6 -2
  65. data/spec/soapy_bing/param_guard_spec.rb +2 -0
  66. data/spec/soapy_bing/service_spec.rb +56 -0
  67. data/spec/spec_helper.rb +1 -0
  68. data/spec/support/dotenv.rb +1 -0
  69. data/spec/support/vcr.rb +75 -6
  70. metadata +74 -118
  71. data/lib/soapy_bing/ads/bulk.rb +0 -3
  72. data/lib/soapy_bing/ads/bulk/campaigns.rb +0 -65
  73. data/lib/soapy_bing/ads/bulk/parsers.rb +0 -2
  74. data/lib/soapy_bing/ads/bulk/parsers/csv_parser.rb +0 -35
  75. data/lib/soapy_bing/ads/reports.rb +0 -4
  76. data/lib/soapy_bing/ads/reports/base.rb +0 -74
  77. data/lib/soapy_bing/ads/reports/campaign_performance_report.rb +0 -24
  78. data/lib/soapy_bing/ads/reports/parsers.rb +0 -2
  79. data/lib/soapy_bing/ads/reports/parsers/csv_parser.rb +0 -46
  80. data/lib/soapy_bing/helpers/class_name.rb +0 -10
  81. data/lib/soapy_bing/soap.rb +0 -4
  82. data/lib/soapy_bing/soap/request.rb +0 -10
  83. data/lib/soapy_bing/soap/request/base.rb +0 -38
  84. data/lib/soapy_bing/soap/request/download_campaigns_by_account_ids_request.rb +0 -17
  85. data/lib/soapy_bing/soap/request/get_accounts_info_request.rb +0 -17
  86. data/lib/soapy_bing/soap/request/get_ad_groups_by_campaign_id_request.rb +0 -17
  87. data/lib/soapy_bing/soap/request/get_ads_by_ad_group_id_request.rb +0 -17
  88. data/lib/soapy_bing/soap/request/get_bulk_download_status_request.rb +0 -17
  89. data/lib/soapy_bing/soap/request/get_targets_by_campaign_ids_request.rb +0 -17
  90. data/lib/soapy_bing/soap/request/poll_generate_report_request.rb +0 -34
  91. data/lib/soapy_bing/soap/request/submit_generate_report_request.rb +0 -17
  92. data/lib/soapy_bing/soap/response.rb +0 -14
  93. data/lib/soapy_bing/soap/response/base.rb +0 -17
  94. data/lib/soapy_bing/soap/response/download_campaigns_by_account_ids_response.rb +0 -12
  95. data/lib/soapy_bing/soap/response/get_accounts_info_response.rb +0 -12
  96. data/lib/soapy_bing/soap/response/get_ad_groups_by_campaign_id_response.rb +0 -12
  97. data/lib/soapy_bing/soap/response/get_ads_by_ad_group_id_response.rb +0 -12
  98. data/lib/soapy_bing/soap/response/get_bulk_download_status_response.rb +0 -17
  99. data/lib/soapy_bing/soap/response/get_targets_by_campaign_ids_response.rb +0 -12
  100. data/lib/soapy_bing/soap/response/payload.rb +0 -28
  101. data/lib/soapy_bing/soap/response/poll_generate_report_response.rb +0 -14
  102. data/lib/soapy_bing/soap/response/report_status.rb +0 -34
  103. data/lib/soapy_bing/soap/response/submit_generate_report_response.rb +0 -12
  104. data/lib/soapy_bing/soap/template_renderer.rb +0 -22
  105. data/lib/soapy_bing/soap/templates/download_campaigns_by_account_ids.xml.erb +0 -22
  106. data/lib/soapy_bing/soap/templates/get_accounts_info.xml.erb +0 -12
  107. data/lib/soapy_bing/soap/templates/get_ad_groups_by_campaign_id.xml.erb +0 -15
  108. data/lib/soapy_bing/soap/templates/get_ads_by_ad_group_id.xml.erb +0 -15
  109. data/lib/soapy_bing/soap/templates/get_bulk_download_status.xml.erb +0 -15
  110. data/lib/soapy_bing/soap/templates/get_targets_by_campaign_ids.xml.erb +0 -20
  111. data/lib/soapy_bing/soap/templates/poll_generate_report.xml.erb +0 -18
  112. data/lib/soapy_bing/soap/templates/submit_generate_report.xml.erb +0 -46
  113. data/spec/fixtures/bulk/campaigns.csv +0 -8
  114. data/spec/fixtures/get_ad_groups_by_campaign_id.json +0 -587
  115. data/spec/fixtures/get_ads_by_ad_group_id.json +0 -218
  116. data/spec/fixtures/get_targets_by_campaign_ids.json +0 -81
  117. data/spec/fixtures/reports/campaign_performance_report.csv +0 -37
  118. data/spec/fixtures/reports/campaign_performance_report.json +0 -146
  119. data/spec/fixtures/soap_templates/simple.xml.erb +0 -2
  120. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_ad_groups_by_campaign_id/1_1_1.yml +0 -150
  121. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_ads_by_ad_group_id/1_2_1.yml +0 -141
  122. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_targets_by_campaign_ids/1_3_1.yml +0 -111
  123. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads_Bulk_Campaigns/_result_file_url/returns_result_file_url.yml +0 -216
  124. data/spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_status.yml +0 -284
  125. data/spec/integration/soapy_bing/ads/bulk/campaigns_spec.rb +0 -35
  126. data/spec/integration/soapy_bing/ads/reports/campaign_performance_report_spec.rb +0 -40
  127. data/spec/integration/soapy_bing/ads_spec.rb +0 -32
  128. data/spec/soapy_bing/ads/reports/campaign_performance_report_spec.rb +0 -42
  129. data/spec/soapy_bing/ads_spec.rb +0 -33
  130. data/spec/soapy_bing/helpers/class_name_spec.rb +0 -15
  131. data/spec/soapy_bing/soap/request/base_spec.rb +0 -55
  132. data/spec/soapy_bing/soap/request/poll_generate_report_request_spec.rb +0 -60
  133. data/spec/soapy_bing/soap/response/base_spec.rb +0 -13
  134. data/spec/soapy_bing/soap/response/get_bulk_download_status_response_spec.rb +0 -60
  135. data/spec/soapy_bing/soap/response/payload_spec.rb +0 -48
  136. data/spec/soapy_bing/soap/response/poll_generate_report_response_spec.rb +0 -26
  137. data/spec/soapy_bing/soap/response/report_status_spec.rb +0 -92
  138. data/spec/soapy_bing/soap/response/submit_generate_report_response_spec.rb +0 -20
  139. data/spec/soapy_bing/soap/template_renderer_spec.rb +0 -25
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'soapy_bing/ads/bulk/parsers'
3
- require 'soapy_bing/ads/bulk/campaigns'
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
- module SoapyBing
3
- class Ads
4
- module Bulk
5
- class Campaigns
6
- DEFAULT_ENTITIES = %w(CampaignTargets Ads).freeze
7
- DEFAULT_POLLING_SETTINGS = {
8
- tries: 20,
9
- sleep: ->(n) { n < 7 ? 2**n : 120 }
10
- }.freeze
11
- NotCompleted = Class.new(StandardError)
12
-
13
- attr_reader :oauth_credentials, :account, :entities, :polling_settings, :status
14
-
15
- def initialize(options)
16
- @oauth_credentials = options.fetch(:oauth_credentials)
17
- @account = options.fetch(:account)
18
- @entities = options.fetch(:entities) || DEFAULT_ENTITIES
19
- @polling_settings = DEFAULT_POLLING_SETTINGS.merge(options.fetch(:polling_settings) || {})
20
- end
21
-
22
- def rows
23
- @rows ||= Parsers::CSVParser.new(Helpers::ZipDownloader.new(result_file_url).read).rows
24
- end
25
-
26
- def result_file_url
27
- @result_file_url ||= begin
28
- wait_status_complete
29
- status['ResultFileUrl']
30
- end
31
- end
32
-
33
- def fetch_status
34
- @status = Soap::Request::GetBulkDownloadStatusRequest
35
- .new(context: context.merge(request_id: download_request_id))
36
- .perform
37
- .payload
38
- end
39
-
40
- private
41
-
42
- def wait_status_complete
43
- Retryable.retryable(polling_settings.merge(on: NotCompleted)) do
44
- fetch_status
45
- raise NotCompleted if status['RequestStatus'] != 'Completed'
46
- end
47
- end
48
-
49
- def download_request_id
50
- @download_request_id ||= Soap::Request::DownloadCampaignsByAccountIdsRequest
51
- .new(context: context.merge(entities: entities))
52
- .perform
53
- .payload
54
- end
55
-
56
- def context
57
- {
58
- account: account,
59
- authentication_token: oauth_credentials.access_token
60
- }
61
- end
62
- end
63
- end
64
- end
65
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'soapy_bing/ads/bulk/parsers/csv_parser'
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'csv'
3
-
4
- module SoapyBing
5
- class Ads
6
- module Bulk
7
- module Parsers
8
- class CSVParser
9
- def initialize(raw)
10
- @raw = raw
11
- end
12
-
13
- def rows
14
- @rows ||= begin
15
- header, *body = extract_csv_payload
16
- body.map { |row| header.zip(row).to_h }
17
- end
18
- end
19
-
20
- private
21
-
22
- attr_reader :raw
23
-
24
- def extract_csv_payload
25
- text = raw.dup
26
- text.force_encoding(Encoding::UTF_8).encode! unless text.encoding == Encoding::UTF_8
27
- text.sub!(/^\xEF\xBB\xBF/, '') # cleanup BOM
28
-
29
- CSV.parse(text)
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'soapy_bing/ads/reports/parsers'
3
- require 'soapy_bing/ads/reports/base'
4
- require 'soapy_bing/ads/reports/campaign_performance_report'
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'ostruct'
3
-
4
- module SoapyBing
5
- class Ads
6
- module Reports
7
- class Base
8
- class UnknownParserError < StandardError; end
9
- include Helpers::ClassName
10
-
11
- DEFAULT_REPORT_SETTINGS = {
12
- format: 'Csv',
13
- language: 'English',
14
- name: 'MyReport',
15
- aggregation: 'HourOfDay',
16
- columns: %w(TimePeriod CampaignName Impressions Clicks Spend CampaignId)
17
- }.freeze
18
-
19
- attr_reader :oauth_credentials, :account, :settings
20
-
21
- def initialize(options)
22
- @oauth_credentials = options.fetch(:oauth_credentials)
23
- @account = options.fetch(:account)
24
- @settings = OpenStruct.new(DEFAULT_REPORT_SETTINGS.merge(options.fetch(:settings, {})))
25
- end
26
-
27
- def rows
28
- @rows ||= parser_class.new(Helpers::ZipDownloader.new(download_url).read).rows
29
- end
30
-
31
- private
32
-
33
- def parser_class
34
- class_name = "#{settings.format.upcase}Parser".to_sym
35
- raise UnknownParserError, class_name unless Parsers.constants.include?(class_name)
36
- Parsers.const_get class_name
37
- end
38
-
39
- def download_url
40
- @url ||=
41
- Soap::Request::PollGenerateReportRequest
42
- .new(context: poll_generate_report_context)
43
- .perform
44
- .payload
45
- end
46
-
47
- def poll_generate_report_context
48
- {
49
- account: account,
50
- authentication_token: oauth_credentials.access_token,
51
- request_id: request_id
52
- }
53
- end
54
-
55
- def request_id
56
- @request_id ||=
57
- Soap::Request::SubmitGenerateReportRequest
58
- .new(context: submit_generate_report_context)
59
- .perform
60
- .payload
61
- end
62
-
63
- def submit_generate_report_context
64
- {
65
- account: account,
66
- authentication_token: oauth_credentials.access_token,
67
- settings: settings,
68
- report_class: class_name
69
- }
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'date'
3
-
4
- module SoapyBing
5
- class Ads
6
- module Reports
7
- class CampaignPerformanceReport < Base
8
- attr_reader :date_range
9
-
10
- def initialize(options)
11
- super(options)
12
- @date_range = Range.new(
13
- Date.parse(options.fetch(:date_start)),
14
- Date.parse(options.fetch(:date_end))
15
- )
16
- end
17
-
18
- def submit_generate_report_context
19
- super.merge(date_range: date_range)
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'soapy_bing/ads/reports/parsers/csv_parser'
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'csv'
3
-
4
- module SoapyBing
5
- class Ads
6
- module Reports
7
- module Parsers
8
- class CSVParser
9
- class FormatError < StandardError; end
10
-
11
- CSV_PAYLOAD_OFFSET_FRONT = 10 # First 10 csv lines are report metadata
12
- CSV_PAYLOAD_OFFSET_BACK = 2 # Last 2 csv lines are Microsoft copyright
13
-
14
- def initialize(raw)
15
- @raw = raw
16
- end
17
-
18
- def rows
19
- @rows ||= begin
20
- header, *body = extract_csv_payload
21
- raise FormatError if body.size != payload_rows_number
22
- body.map { |row| header.zip(row).to_h }
23
- end
24
- end
25
-
26
- private
27
-
28
- attr_reader :raw
29
-
30
- def extract_csv_payload
31
- text = raw.dup
32
- text.force_encoding(Encoding::UTF_8).encode! unless text.encoding == Encoding::UTF_8
33
- text.sub!(/^\xEF\xBB\xBF/, '') # cleanup BOM
34
-
35
- csv_rows = CSV.parse(text)
36
- csv_rows[CSV_PAYLOAD_OFFSET_FRONT...-CSV_PAYLOAD_OFFSET_BACK]
37
- end
38
-
39
- def payload_rows_number
40
- raw.match(/"Rows: (\d+)"/)[1].to_i
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
- module SoapyBing
3
- module Helpers
4
- module ClassName
5
- def class_name
6
- @class_name ||= self.class.name.demodulize
7
- end
8
- end
9
- end
10
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'soapy_bing/soap/template_renderer'
3
- require 'soapy_bing/soap/request'
4
- require 'soapy_bing/soap/response'
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'soapy_bing/soap/request/base'
3
- require 'soapy_bing/soap/request/submit_generate_report_request'
4
- require 'soapy_bing/soap/request/poll_generate_report_request'
5
- require 'soapy_bing/soap/request/get_ad_groups_by_campaign_id_request'
6
- require 'soapy_bing/soap/request/get_ads_by_ad_group_id_request'
7
- require 'soapy_bing/soap/request/get_targets_by_campaign_ids_request'
8
- require 'soapy_bing/soap/request/get_accounts_info_request'
9
- require 'soapy_bing/soap/request/download_campaigns_by_account_ids_request'
10
- require 'soapy_bing/soap/request/get_bulk_download_status_request'
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'httparty'
3
-
4
- module SoapyBing
5
- module Soap
6
- module Request
7
- class Base
8
- include Helpers::ClassName
9
-
10
- DEFAULT_HTTP_HEADERS = {
11
- 'Content-Type' => 'text/xml;charset=UTF-8'
12
- }.freeze
13
-
14
- attr_reader :context
15
-
16
- def initialize(context:)
17
- @context = context
18
- end
19
-
20
- def post(url, body: default_body, headers: default_headers)
21
- HTTParty.post(url, body: body, headers: headers)
22
- end
23
-
24
- def default_body
25
- TemplateRenderer.new(context).render(action_name.underscore)
26
- end
27
-
28
- def default_headers
29
- DEFAULT_HTTP_HEADERS.merge('SOAPAction' => action_name)
30
- end
31
-
32
- def action_name
33
- class_name.sub(/Request$/, '')
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
- module SoapyBing
3
- module Soap
4
- module Request
5
- class DownloadCampaignsByAccountIdsRequest < Base
6
- API_BASE_URL = 'https://bulk.api.bingads.microsoft.com'
7
- API_VERSION = 10
8
- API_ENDPOINT =
9
- "#{API_BASE_URL}/Api/Advertiser/CampaignManagement/V#{API_VERSION}/BulkService.svc"
10
-
11
- def perform
12
- Response::DownloadCampaignsByAccountIdsResponse.new(post(API_ENDPOINT))
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
- module SoapyBing
3
- module Soap
4
- module Request
5
- class GetAccountsInfoRequest < Base
6
- API_BASE_URL = 'https://clientcenter.api.bingads.microsoft.com'
7
- API_VERSION = 9
8
- API_ENDPOINT = "#{API_BASE_URL}/Api/CustomerManagement/" \
9
- "v#{API_VERSION}/CustomerManagementService.svc"
10
-
11
- def perform
12
- Response::GetAccountsInfoResponse.new(post(API_ENDPOINT))
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
- module SoapyBing
3
- module Soap
4
- module Request
5
- class GetAdGroupsByCampaignIdRequest < Base
6
- API_BASE_URL = 'https://campaign.api.bingads.microsoft.com'
7
- API_VERSION = 10
8
- API_ENDPOINT = "#{API_BASE_URL}/Api/Advertiser/CampaignManagement/" \
9
- "V#{API_VERSION}/CampaignManagementService.svc"
10
-
11
- def perform
12
- Response::GetAdGroupsByCampaignIdResponse.new(post(API_ENDPOINT))
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
- module SoapyBing
3
- module Soap
4
- module Request
5
- class GetAdsByAdGroupIdRequest < Base
6
- API_BASE_URL = 'https://campaign.api.bingads.microsoft.com'
7
- API_VERSION = 10
8
- API_ENDPOINT = "#{API_BASE_URL}/Api/Advertiser/CampaignManagement/" \
9
- "V#{API_VERSION}/CampaignManagementService.svc"
10
-
11
- def perform
12
- Response::GetAdsByAdGroupIdResponse.new(post(API_ENDPOINT))
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
- module SoapyBing
3
- module Soap
4
- module Request
5
- class GetBulkDownloadStatusRequest < Base
6
- API_BASE_URL = 'https://bulk.api.bingads.microsoft.com'
7
- API_VERSION = 10
8
- API_ENDPOINT =
9
- "#{API_BASE_URL}/Api/Advertiser/CampaignManagement/V#{API_VERSION}/BulkService.svc"
10
-
11
- def perform
12
- Response::GetBulkDownloadStatusResponse.new(post(API_ENDPOINT))
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
- module SoapyBing
3
- module Soap
4
- module Request
5
- class GetTargetsByCampaignIdsRequest < Base
6
- API_BASE_URL = 'https://campaign.api.bingads.microsoft.com'
7
- API_VERSION = 10
8
- API_ENDPOINT = "#{API_BASE_URL}/Api/Advertiser/CampaignManagement/" \
9
- "V#{API_VERSION}/CampaignManagementService.svc"
10
-
11
- def perform
12
- Response::GetTargetsByCampaignIdsResponse.new(post(API_ENDPOINT))
13
- end
14
- end
15
- end
16
- end
17
- end