soapy_bing 0.0.5 → 0.1.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +19 -0
- data/lib/soapy_bing/ads/reports/base.rb +1 -1
- data/lib/soapy_bing/ads.rb +23 -0
- data/lib/soapy_bing/soap/request/get_ad_groups_by_campaign_id_request.rb +17 -0
- data/lib/soapy_bing/soap/request/get_ads_by_ad_group_id_request.rb +17 -0
- data/lib/soapy_bing/soap/request/get_targets_by_campaign_ids_request.rb +17 -0
- data/lib/soapy_bing/soap/request.rb +3 -0
- data/lib/soapy_bing/soap/response/get_ad_groups_by_campaign_id_response.rb +12 -0
- data/lib/soapy_bing/soap/response/get_ads_by_ad_group_id_response.rb +12 -0
- data/lib/soapy_bing/soap/response/get_targets_by_campaign_ids_response.rb +12 -0
- data/lib/soapy_bing/soap/response.rb +5 -0
- data/lib/soapy_bing/soap/templates/get_ad_groups_by_campaign_id.erb.xml +15 -0
- data/lib/soapy_bing/soap/templates/get_ads_by_ad_group_id.erb.xml +15 -0
- data/lib/soapy_bing/soap/templates/get_targets_by_campaign_ids.erb.xml +20 -0
- data/lib/soapy_bing/version.rb +1 -1
- data/spec/fixtures/get_ad_groups_by_campaign_id.json +587 -0
- data/spec/fixtures/get_ads_by_ad_group_id.json +218 -0
- data/spec/fixtures/get_targets_by_campaign_ids.json +81 -0
- data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_ad_groups_by_campaign_id/1_1_1.yml +150 -0
- data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_ads_by_ad_group_id/1_2_1.yml +141 -0
- data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_targets_by_campaign_ids/1_3_1.yml +111 -0
- data/spec/integration/soapy_bing/ads_spec.rb +32 -0
- data/spec/soapy_bing/oauth_credentials_spec.rb +1 -1
- data/spec/soapy_bing/soap/request/base_spec.rb +1 -1
- data/spec/soapy_bing/soap/request/poll_generate_report_request_spec.rb +2 -2
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea5a6965e864eb014503ddafecb249e2effd9195
|
4
|
+
data.tar.gz: 50ea9e0645a6625676e7516abe118e72f9d05c06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 219d83ed3736b437e9840b5ad91dfda4e307ca282097ebfd0d37a4d5e4823036e6a1c4be81be73a75c0a632a463dd170695e0671e3b8b2e89b68eebcb24bf42e
|
7
|
+
data.tar.gz: 831a248fc27408938e8cbe7d22e91b4e1f7bb4ebb86dea0fb27493872757ae34b8c439a5f54bb9ec7dca9f92c16645f522822729b19384aded7264e64e634ff6
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -55,6 +55,25 @@ SoapyBing::Ads.new(
|
|
55
55
|
)
|
56
56
|
```
|
57
57
|
|
58
|
+
### Generate a refresh token
|
59
|
+
|
60
|
+
First go to the following url using your Client Id and Redirect Url.
|
61
|
+
|
62
|
+
https://login.live.com/oauth20_authorize.srf?client_id=<YOUR_CLIENT_ID>&scope=bingads.manage&response_type=code&redirect_uri=<YOUR_REDIRECT_URL>&state=ClientStateGoesHere
|
63
|
+
|
64
|
+
Make a note of the code parameter that is present in the redirect url. Execute the following curl command to get a new Refresh token.
|
65
|
+
|
66
|
+
```sh
|
67
|
+
curl -v -XPOST \
|
68
|
+
-d client_id=<YOUR_CLIENT_ID> \
|
69
|
+
-d code=<THE_CODE_FROM_THE_FIRST_CALL>
|
70
|
+
-d grant_type=authorization_code \
|
71
|
+
-d redirect_uri=<YOUR_REDIRECT_URL> \
|
72
|
+
-d client_secret=<YOUR_CLIENT_SECRET> \
|
73
|
+
-H "Content-Type: application/x-www-form-urlencoded" \
|
74
|
+
https://login.live.com/oauth20_token.srf
|
75
|
+
```
|
76
|
+
|
58
77
|
## Links
|
59
78
|
* MS Live Applications [https://account.live.com/developers/applications](https://account.live.com/developers/applications)
|
60
79
|
* Bing Ads User Authentication with OAuth [https://msdn.microsoft.com/en-us/library/bing-ads-user-authentication-oauth-guide.aspx](https://msdn.microsoft.com/en-us/library/bing-ads-user-authentication-oauth-guide.aspx)
|
@@ -17,7 +17,7 @@ module SoapyBing
|
|
17
17
|
language: 'English',
|
18
18
|
name: 'MyReport',
|
19
19
|
aggregation: 'HourOfDay',
|
20
|
-
columns: %w(TimePeriod CampaignName Impressions Clicks Spend)
|
20
|
+
columns: %w(TimePeriod CampaignName Impressions Clicks Spend CampaignId)
|
21
21
|
}.freeze
|
22
22
|
|
23
23
|
attr_reader :oauth_credentials, :account, :settings
|
data/lib/soapy_bing/ads.rb
CHANGED
@@ -19,5 +19,28 @@ module SoapyBing
|
|
19
19
|
settings: settings
|
20
20
|
)
|
21
21
|
end
|
22
|
+
|
23
|
+
def get_ad_groups_by_campaign_id(campaign_id)
|
24
|
+
do_request(Soap::Request::GetAdGroupsByCampaignIdRequest, campaign_id: campaign_id)
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_ads_by_ad_group_id(ad_group_id)
|
28
|
+
do_request(Soap::Request::GetAdsByAdGroupIdRequest, ad_group_id: ad_group_id)
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_targets_by_campaign_ids(campaign_ids)
|
32
|
+
do_request(Soap::Request::GetTargetsByCampaignIdsRequest, campaign_ids: campaign_ids)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def do_request(klass, options)
|
38
|
+
klass.new(context: {
|
39
|
+
account: account,
|
40
|
+
authentication_token: oauth_credentials.access_token
|
41
|
+
}.merge(options))
|
42
|
+
.perform
|
43
|
+
.payload
|
44
|
+
end
|
22
45
|
end
|
23
46
|
end
|
@@ -0,0 +1,17 @@
|
|
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
|
@@ -0,0 +1,17 @@
|
|
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
|
@@ -0,0 +1,17 @@
|
|
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
|
@@ -2,3 +2,6 @@
|
|
2
2
|
require 'soapy_bing/soap/request/base'
|
3
3
|
require 'soapy_bing/soap/request/submit_generate_report_request'
|
4
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'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module SoapyBing
|
3
|
+
module Soap
|
4
|
+
module Response
|
5
|
+
class GetTargetsByCampaignIdsResponse < Base
|
6
|
+
def extract_payload
|
7
|
+
Array.wrap(body['Envelope']['Body'][class_name]['Targets']['Target']).first
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -1,6 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require 'active_support/core_ext/array/wrap'
|
3
|
+
|
2
4
|
require 'soapy_bing/soap/response/payload'
|
3
5
|
require 'soapy_bing/soap/response/report_status'
|
4
6
|
require 'soapy_bing/soap/response/base'
|
5
7
|
require 'soapy_bing/soap/response/submit_generate_report_response'
|
6
8
|
require 'soapy_bing/soap/response/poll_generate_report_response'
|
9
|
+
require 'soapy_bing/soap/response/get_ad_groups_by_campaign_id_response'
|
10
|
+
require 'soapy_bing/soap/response/get_ads_by_ad_group_id_response'
|
11
|
+
require 'soapy_bing/soap/response/get_targets_by_campaign_ids_response'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<env:Envelope xmlns:tns="https://bingads.microsoft.com/CampaignManagement/v10"
|
3
|
+
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
|
4
|
+
<env:Header>
|
5
|
+
<tns:CustomerAccountId><%= account.account_id %></tns:CustomerAccountId>
|
6
|
+
<tns:CustomerId><%= account.customer_id %></tns:CustomerId>
|
7
|
+
<tns:DeveloperToken><%= account.developer_token %></tns:DeveloperToken>
|
8
|
+
<tns:AuthenticationToken><%= authentication_token %></tns:AuthenticationToken>
|
9
|
+
</env:Header>
|
10
|
+
<env:Body>
|
11
|
+
<tns:GetAdGroupsByCampaignIdRequest>
|
12
|
+
<tns:CampaignId><%= campaign_id %></tns:CampaignId>
|
13
|
+
</tns:GetAdGroupsByCampaignIdRequest>
|
14
|
+
</env:Body>
|
15
|
+
</env:Envelope>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<env:Envelope xmlns:tns="https://bingads.microsoft.com/CampaignManagement/v10"
|
3
|
+
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
|
4
|
+
<env:Header>
|
5
|
+
<tns:CustomerAccountId><%= account.account_id %></tns:CustomerAccountId>
|
6
|
+
<tns:CustomerId><%= account.customer_id %></tns:CustomerId>
|
7
|
+
<tns:DeveloperToken><%= account.developer_token %></tns:DeveloperToken>
|
8
|
+
<tns:AuthenticationToken><%= authentication_token %></tns:AuthenticationToken>
|
9
|
+
</env:Header>
|
10
|
+
<env:Body>
|
11
|
+
<tns:GetAdsByAdGroupIdRequest>
|
12
|
+
<tns:AdGroupId><%= ad_group_id %></tns:AdGroupId>
|
13
|
+
</tns:GetAdsByAdGroupIdRequest>
|
14
|
+
</env:Body>
|
15
|
+
</env:Envelope>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<env:Envelope xmlns:tns="https://bingads.microsoft.com/CampaignManagement/v10"
|
3
|
+
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
|
4
|
+
xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
|
5
|
+
<env:Header>
|
6
|
+
<tns:CustomerAccountId><%= account.account_id %></tns:CustomerAccountId>
|
7
|
+
<tns:CustomerId><%= account.customer_id %></tns:CustomerId>
|
8
|
+
<tns:DeveloperToken><%= account.developer_token %></tns:DeveloperToken>
|
9
|
+
<tns:AuthenticationToken><%= authentication_token %></tns:AuthenticationToken>
|
10
|
+
</env:Header>
|
11
|
+
<env:Body>
|
12
|
+
<tns:GetTargetsByCampaignIdsRequest>
|
13
|
+
<tns:CampaignIds>
|
14
|
+
<% campaign_ids.each do |campaign_id| %>
|
15
|
+
<arr:long><%= campaign_id %></arr:long>
|
16
|
+
<% end %>
|
17
|
+
</tns:CampaignIds>
|
18
|
+
</tns:GetTargetsByCampaignIdsRequest>
|
19
|
+
</env:Body>
|
20
|
+
</env:Envelope>
|
data/lib/soapy_bing/version.rb
CHANGED