bing-ads 0.1.4 → 0.1.5
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/README.md +7 -0
- data/lib/bing/ads.rb +1 -0
- data/lib/bing/ads/api/v11/data.rb +4 -0
- data/lib/bing/ads/api/v11/data/ad_group.rb +56 -0
- data/lib/bing/ads/api/v11/data/campaign.rb +49 -0
- data/lib/bing/ads/api/v11/data/expanded_text_ad.rb +38 -0
- data/lib/bing/ads/api/v11/data/keyword.rb +55 -0
- data/lib/bing/ads/api/v11/services/campaign_management.rb +8 -74
- data/lib/bing/ads/utils.rb +21 -2
- data/lib/bing/ads/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6090b37bc8ba04c730ccdaf96396de0867517f9e
|
4
|
+
data.tar.gz: 1c4dd6e7269c5f0bc7f5a134bb03c01f6d99048f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54ae03a0b3777a788ec84eb54eccef6224f301b87972cd65e070e127c80e93e1c04ba139a82ac83556a9a4a93b8d273dced509efb3290e5f0aaf74035f4c4bc1
|
7
|
+
data.tar.gz: 3b39cbd525d60fb2c02a97dca546cad17e68895a5a3de8cc9d0df5ded672e2b6f7c5682f7a1016f6a4b324d59eb6099c203a8393189438aa6907205d4739ecc0
|
data/README.md
CHANGED
@@ -69,6 +69,13 @@ account_id = 5278183
|
|
69
69
|
response = service.get_campaigns_by_account_id(account_id)
|
70
70
|
```
|
71
71
|
|
72
|
+
#### Getting campaigns in an account by ids
|
73
|
+
```ruby
|
74
|
+
account_id = 5278183
|
75
|
+
campaign_ids = [813721838, 813721849, 813721850]
|
76
|
+
response = service.get_campaigns_by_ids(account_id, campaign_ids)
|
77
|
+
```
|
78
|
+
|
72
79
|
#### Adding campaigns
|
73
80
|
```ruby
|
74
81
|
account_id = 5278183
|
data/lib/bing/ads.rb
CHANGED
@@ -0,0 +1,56 @@
|
|
1
|
+
module Bing
|
2
|
+
module Ads
|
3
|
+
module API
|
4
|
+
module V11
|
5
|
+
module Data
|
6
|
+
# Bing::Ads::API::V11::Data::AdGroup
|
7
|
+
class AdGroup
|
8
|
+
|
9
|
+
# @order
|
10
|
+
# https://msdn.microsoft.com/en-us/library/bing-ads-campaign-management-adgroup.aspx
|
11
|
+
KEYS_ORDER = [
|
12
|
+
:ad_distribution,
|
13
|
+
:ad_rotation,
|
14
|
+
:bidding_scheme,
|
15
|
+
:content_match_bid,
|
16
|
+
:end_date,
|
17
|
+
:forward_compatibility_map,
|
18
|
+
:id,
|
19
|
+
:language,
|
20
|
+
:name,
|
21
|
+
:native_bid_adjustment,
|
22
|
+
:network,
|
23
|
+
:pricing_model,
|
24
|
+
:remarketing_targeting_setting,
|
25
|
+
:search_bid,
|
26
|
+
:settings,
|
27
|
+
:start_date,
|
28
|
+
:status,
|
29
|
+
:tracking_url_template,
|
30
|
+
:url_custom_parameters
|
31
|
+
# Alphabetical
|
32
|
+
]
|
33
|
+
|
34
|
+
def self.prepare(ad_group_raw)
|
35
|
+
ad_group_raw[:ad_rotation] = { type: ad_group_raw[:ad_rotation] } if ad_group_raw[:ad_rotation]
|
36
|
+
if ad_group_raw[:bidding_scheme]
|
37
|
+
# TODO support MaxClicksBiddingScheme, MaxConversionsBiddingScheme and TargetCpaBiddingScheme
|
38
|
+
ad_group_raw[:bidding_scheme] = {
|
39
|
+
type: ad_group_raw[:bidding_scheme],
|
40
|
+
'@xsi:type' => "#{Bing::Ads::API::V11::NAMESPACE_IDENTIFIER}:#{ad_group_raw[:bidding_scheme]}"
|
41
|
+
}
|
42
|
+
end
|
43
|
+
ad_group_raw[:content_match_bid] = { amount: ad_group_raw[:content_match_bid] } if ad_group_raw[:content_match_bid]
|
44
|
+
ad_group_raw[:end_date] = Bing::Ads::Utils.date_hash(ad_group_raw[:end_date]) if ad_group_raw[:end_date]
|
45
|
+
ad_group_raw[:search_bid] = { amount: ad_group_raw[:search_bid] } if ad_group_raw[:search_bid]
|
46
|
+
ad_group_raw[:start_date] = Bing::Ads::Utils.date_hash(ad_group_raw[:start_date]) if ad_group_raw[:start_date]
|
47
|
+
# TODO UrlCustomParameters
|
48
|
+
ad_group_raw = Bing::Ads::Utils.sort_keys(ad_group_raw)
|
49
|
+
Bing::Ads::Utils.camelcase_keys(ad_group_raw)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Bing
|
2
|
+
module Ads
|
3
|
+
module API
|
4
|
+
module V11
|
5
|
+
module Data
|
6
|
+
# Bing::Ads::API::V11::Data::Campaign
|
7
|
+
class Campaign
|
8
|
+
|
9
|
+
# @order
|
10
|
+
# https://msdn.microsoft.com/en-us/library/bing-ads-campaign-management-campaign.aspx
|
11
|
+
KEYS_ORDER = [
|
12
|
+
:bidding_scheme,
|
13
|
+
:budget_type,
|
14
|
+
:daily_budget,
|
15
|
+
:description,
|
16
|
+
:forward_compatibility_map,
|
17
|
+
:id,
|
18
|
+
:name,
|
19
|
+
:native_bid_adjustment,
|
20
|
+
:status,
|
21
|
+
:time_zone,
|
22
|
+
:tracking_url_template,
|
23
|
+
:url_custom_parameters,
|
24
|
+
# Alphabetical till here
|
25
|
+
:campaign_type,
|
26
|
+
:settings,
|
27
|
+
:budget_id,
|
28
|
+
:languages
|
29
|
+
]
|
30
|
+
|
31
|
+
def self.prepare(campaign_raw)
|
32
|
+
if campaign_raw[:bidding_scheme]
|
33
|
+
campaign_raw[:bidding_scheme] = {
|
34
|
+
# TODO support MaxClicksBiddingScheme, MaxConversionsBiddingScheme and TargetCpaBiddingScheme
|
35
|
+
type: campaign_raw[:bidding_scheme],
|
36
|
+
'@xsi:type' => "#{Bing::Ads::API::V11::NAMESPACE_IDENTIFIER}:#{campaign_raw[:bidding_scheme]}"
|
37
|
+
}
|
38
|
+
end
|
39
|
+
# TODO UrlCustomParameters
|
40
|
+
# TODO Settings
|
41
|
+
campaign_raw = Bing::Ads::Utils.sort_keys(campaign_raw, KEYS_ORDER)
|
42
|
+
Bing::Ads::Utils.camelcase_keys(campaign_raw)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Bing
|
2
|
+
module Ads
|
3
|
+
module API
|
4
|
+
module V11
|
5
|
+
module Data
|
6
|
+
# Bing::Ads::API::V11::Data::ExpandedTextAd
|
7
|
+
class ExpandedTextAd
|
8
|
+
|
9
|
+
# @order
|
10
|
+
# https://msdn.microsoft.com/en-us/library/bing-ads-campaign-management-ad.aspx
|
11
|
+
KEYS_ORDER = [
|
12
|
+
:device_preference,
|
13
|
+
:editorial_status,
|
14
|
+
:forward_compatibility_map,
|
15
|
+
:id,
|
16
|
+
:status,
|
17
|
+
:final_urls,
|
18
|
+
:path_1,
|
19
|
+
:path_2,
|
20
|
+
:text,
|
21
|
+
:title_part_1,
|
22
|
+
:title_part_2
|
23
|
+
]
|
24
|
+
|
25
|
+
def self.prepare(ad_raw)
|
26
|
+
ad_raw['@xsi:type'] = "#{Bing::Ads::API::V11::NAMESPACE_IDENTIFIER}:#{ad_raw[:type]}"
|
27
|
+
ad_raw[:final_mobile_urls] = { 'ins1:string' => ad_raw[:final_mobile_urls] } if ad_raw[:final_mobile_urls]
|
28
|
+
ad_raw[:final_urls] = { 'ins1:string' => ad_raw[:final_urls] } if ad_raw[:final_urls]
|
29
|
+
# TODO FinalAppUrls
|
30
|
+
ad_raw = Bing::Ads::Utils.sort_keys(ad_raw, KEYS_ORDER)
|
31
|
+
Bing::Ads::Utils.camelcase_keys(ad_raw)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Bing
|
2
|
+
module Ads
|
3
|
+
module API
|
4
|
+
module V11
|
5
|
+
module Data
|
6
|
+
# Bing::Ads::API::V11::Data::Keyword
|
7
|
+
class Keyword
|
8
|
+
|
9
|
+
# @order
|
10
|
+
# https://msdn.microsoft.com/en-us/library/bing-ads-campaign-management-keyword.aspx
|
11
|
+
KEYS_ORDER = [
|
12
|
+
:bidding_scheme,
|
13
|
+
:bid,
|
14
|
+
:destination_url,
|
15
|
+
:editorial_status,
|
16
|
+
:final_app_urls,
|
17
|
+
:final_mobile_urls,
|
18
|
+
:final_urls,
|
19
|
+
:forward_compatibility_map,
|
20
|
+
:id,
|
21
|
+
:match_type,
|
22
|
+
:param_1,
|
23
|
+
:param_2,
|
24
|
+
:param_3,
|
25
|
+
:status,
|
26
|
+
:text,
|
27
|
+
:tracking_url_template,
|
28
|
+
:url_custom_parameters
|
29
|
+
# Alphabetical
|
30
|
+
]
|
31
|
+
|
32
|
+
def self.prepare(keyword_raw)
|
33
|
+
# To use the AdGroup default match type bid,
|
34
|
+
# set the Amount element of the Bid object to null.
|
35
|
+
keyword_raw[:bid] = { amount: keyword_raw[:bid] }
|
36
|
+
if keyword_raw[:bidding_scheme]
|
37
|
+
# TODO support MaxClicksBiddingScheme, MaxConversionsBiddingScheme and TargetCpaBiddingScheme
|
38
|
+
keyword_raw[:bidding_scheme] = {
|
39
|
+
type: keyword_raw[:bidding_scheme],
|
40
|
+
'@xsi:type' => "#{Bing::Ads::API::V11::NAMESPACE_IDENTIFIER}:#{keyword_raw[:bidding_scheme]}"
|
41
|
+
}
|
42
|
+
end
|
43
|
+
keyword_raw[:final_mobile_urls] = { 'ins1:string' => keyword_raw[:final_mobile_urls] } if keyword_raw[:final_mobile_urls]
|
44
|
+
keyword_raw[:final_urls] = { 'ins1:string' => keyword_raw[:final_urls] } if keyword_raw[:final_urls]
|
45
|
+
# TODO FinalAppUrls
|
46
|
+
# TODO UrlCustomParameters
|
47
|
+
keyword_raw = Bing::Ads::Utils.sort_keys(keyword_raw)
|
48
|
+
Bing::Ads::Utils.camelcase_keys(keyword_raw)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -29,7 +29,7 @@ module Bing
|
|
29
29
|
|
30
30
|
def add_campaigns(account_id, campaigns)
|
31
31
|
validate_limits!(:campaign, :add, campaigns)
|
32
|
-
campaigns = campaigns.map { |campaign|
|
32
|
+
campaigns = campaigns.map { |campaign| Bing::Ads::API::V11::Data::Campaign.prepare(campaign) }
|
33
33
|
payload = {
|
34
34
|
account_id: account_id,
|
35
35
|
campaigns: { campaign: campaigns }
|
@@ -40,7 +40,7 @@ module Bing
|
|
40
40
|
|
41
41
|
def update_campaigns(account_id, campaigns)
|
42
42
|
validate_limits!(:campaign, :update, campaigns)
|
43
|
-
campaigns = campaigns.map { |campaign|
|
43
|
+
campaigns = campaigns.map { |campaign| Bing::Ads::API::V11::Data::Campaign.prepare(campaign) }
|
44
44
|
payload = {
|
45
45
|
account_id: account_id,
|
46
46
|
campaigns: { campaign: campaigns }
|
@@ -78,7 +78,7 @@ module Bing
|
|
78
78
|
|
79
79
|
def add_ad_groups(campaign_id, ad_groups)
|
80
80
|
validate_limits!(:ad_group, :add, ad_groups)
|
81
|
-
ad_groups = ad_groups.map { |ad_group|
|
81
|
+
ad_groups = ad_groups.map { |ad_group| Bing::Ads::API::V11::Data::AdGroup.prepare(ad_group) }
|
82
82
|
payload = {
|
83
83
|
campaign_id: campaign_id,
|
84
84
|
ad_groups: { ad_group: ad_groups }
|
@@ -89,7 +89,7 @@ module Bing
|
|
89
89
|
|
90
90
|
def update_ad_groups(campaign_id, ad_groups)
|
91
91
|
validate_limits!(:ad_group, :update, ad_groups)
|
92
|
-
ad_groups = ad_groups.map { |ad_group|
|
92
|
+
ad_groups = ad_groups.map { |ad_group| Bing::Ads::API::V11::Data::AdGroup.prepare(ad_group) }
|
93
93
|
payload = {
|
94
94
|
campaign_id: campaign_id,
|
95
95
|
ad_groups: { ad_group: ad_groups }
|
@@ -142,7 +142,7 @@ module Bing
|
|
142
142
|
|
143
143
|
def add_ads(ad_group_id, ads)
|
144
144
|
validate_limits!(:ad, :add, ads)
|
145
|
-
ads = ads.map { |ad|
|
145
|
+
ads = ads.map { |ad| Bing::Ads::API::V11::Data::ExpandedTextAd.prepare(ad) }
|
146
146
|
payload = {
|
147
147
|
ad_group_id: ad_group_id,
|
148
148
|
ads: { ad: ads }
|
@@ -153,7 +153,7 @@ module Bing
|
|
153
153
|
|
154
154
|
def update_ads(ad_group_id, ads)
|
155
155
|
validate_limits!(:ad, :update, ads)
|
156
|
-
ads = ads.map { |ad|
|
156
|
+
ads = ads.map { |ad| Bing::Ads::API::V11::Data::ExpandedTextAd.prepare(ad) }
|
157
157
|
payload = {
|
158
158
|
ad_group_id: ad_group_id,
|
159
159
|
ads: { ad: ads }
|
@@ -190,7 +190,7 @@ module Bing
|
|
190
190
|
|
191
191
|
def add_keywords(ad_group_id, keywords)
|
192
192
|
validate_limits!(:keyword, :add, keywords)
|
193
|
-
keywords = keywords.map { |keyword|
|
193
|
+
keywords = keywords.map { |keyword| Bing::Ads::API::V11::Data::Keyword.prepare(keyword) }
|
194
194
|
payload = {
|
195
195
|
ad_group_id: ad_group_id,
|
196
196
|
keywords: { keyword: keywords }
|
@@ -201,7 +201,7 @@ module Bing
|
|
201
201
|
|
202
202
|
def update_keywords(ad_group_id, keywords)
|
203
203
|
validate_limits!(:keyword, :update, keywords)
|
204
|
-
keywords = keywords.map { |keyword|
|
204
|
+
keywords = keywords.map { |keyword| Bing::Ads::API::V11::Data::Keyword.prepare(keyword) }
|
205
205
|
payload = {
|
206
206
|
ad_group_id: ad_group_id,
|
207
207
|
keywords: { keyword: keywords }
|
@@ -309,72 +309,6 @@ module Bing
|
|
309
309
|
'campaign_management'
|
310
310
|
end
|
311
311
|
|
312
|
-
def prepare_campaign(campaign)
|
313
|
-
campaign = Bing::Ads::Utils.sort_keys(campaign)
|
314
|
-
if campaign[:bidding_scheme]
|
315
|
-
campaign[:bidding_scheme] = {
|
316
|
-
# TODO support MaxClicksBiddingScheme, MaxConversionsBiddingScheme and TargetCpaBiddingScheme
|
317
|
-
type: campaign[:bidding_scheme],
|
318
|
-
'@xsi:type' => "#{Bing::Ads::API::V11::NAMESPACE_IDENTIFIER}:#{campaign[:bidding_scheme]}"
|
319
|
-
}
|
320
|
-
end
|
321
|
-
campaign[:languages] = { 'ins1:string' => campaign[:languages] } if campaign[:languages]
|
322
|
-
# TODO UrlCustomParameters
|
323
|
-
# TODO Settings
|
324
|
-
Bing::Ads::Utils.camelcase_keys(campaign)
|
325
|
-
end
|
326
|
-
|
327
|
-
def prepare_ad_group(ad_group)
|
328
|
-
ad_group = Bing::Ads::Utils.sort_keys(ad_group)
|
329
|
-
ad_group[:ad_rotation] = { type: ad_group[:ad_rotation] } if ad_group[:ad_rotation]
|
330
|
-
if ad_group[:bidding_scheme]
|
331
|
-
# TODO support MaxClicksBiddingScheme, MaxConversionsBiddingScheme and TargetCpaBiddingScheme
|
332
|
-
ad_group[:bidding_scheme] = {
|
333
|
-
type: ad_group[:bidding_scheme],
|
334
|
-
'@xsi:type' => "#{Bing::Ads::API::V11::NAMESPACE_IDENTIFIER}:#{ad_group[:bidding_scheme]}"
|
335
|
-
}
|
336
|
-
end
|
337
|
-
ad_group[:content_match_bid] = { amount: ad_group[:content_match_bid] } if ad_group[:content_match_bid]
|
338
|
-
ad_group[:end_date] = date_hash(ad_group[:end_date]) if ad_group[:end_date]
|
339
|
-
ad_group[:search_bid] = { amount: ad_group[:search_bid] } if ad_group[:search_bid]
|
340
|
-
ad_group[:start_date] = date_hash(ad_group[:start_date]) if ad_group[:start_date]
|
341
|
-
# TODO UrlCustomParameters
|
342
|
-
Bing::Ads::Utils.camelcase_keys(ad_group)
|
343
|
-
end
|
344
|
-
|
345
|
-
def prepare_ad(ad)
|
346
|
-
ad = Bing::Ads::Utils.sort_keys(ad)
|
347
|
-
ad['@xsi:type'] = "#{Bing::Ads::API::V11::NAMESPACE_IDENTIFIER}:#{ad[:type]}"
|
348
|
-
ad[:final_mobile_urls] = { 'ins1:string' => ad[:final_mobile_urls] } if ad[:final_mobile_urls]
|
349
|
-
ad[:final_urls] = { 'ins1:string' => ad[:final_urls] } if ad[:final_urls]
|
350
|
-
# TODO FinalAppUrls
|
351
|
-
Bing::Ads::Utils.camelcase_keys(ad)
|
352
|
-
end
|
353
|
-
|
354
|
-
def prepare_keyword(keyword)
|
355
|
-
keyword = Bing::Ads::Utils.sort_keys(keyword)
|
356
|
-
# To use the AdGroup default match type bid,
|
357
|
-
# set the Amount element of the Bid object to null.
|
358
|
-
keyword[:bid] = { amount: keyword[:bid] }
|
359
|
-
if keyword[:bidding_scheme]
|
360
|
-
# TODO support MaxClicksBiddingScheme, MaxConversionsBiddingScheme and TargetCpaBiddingScheme
|
361
|
-
keyword[:bidding_scheme] = {
|
362
|
-
type: keyword[:bidding_scheme],
|
363
|
-
'@xsi:type' => "#{Bing::Ads::API::V11::NAMESPACE_IDENTIFIER}:#{keyword[:bidding_scheme]}"
|
364
|
-
}
|
365
|
-
end
|
366
|
-
keyword[:final_mobile_urls] = { 'ins1:string' => keyword[:final_mobile_urls] } if keyword[:final_mobile_urls]
|
367
|
-
keyword[:final_urls] = { 'ins1:string' => keyword[:final_urls] } if keyword[:final_urls]
|
368
|
-
# TODO FinalAppUrls
|
369
|
-
# TODO UrlCustomParameters
|
370
|
-
Bing::Ads::Utils.camelcase_keys(keyword)
|
371
|
-
end
|
372
|
-
|
373
|
-
def date_hash(date)
|
374
|
-
date = Date.parse(date) if date.is_a?(String)
|
375
|
-
{ day: date.day, month: date.month, year: date.year }
|
376
|
-
end
|
377
|
-
|
378
312
|
def validate_limits!(type, operation, array)
|
379
313
|
limit = Bing::Ads::API::V11.constants.limits.per_call.send(type)
|
380
314
|
if array.size > limit
|
data/lib/bing/ads/utils.rb
CHANGED
@@ -8,10 +8,29 @@ module Bing
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
def sort_keys(object)
|
12
|
-
|
11
|
+
def sort_keys(object, ordered_keys_array=nil)
|
12
|
+
if ordered_keys_array
|
13
|
+
object = sort_by_ordered_keys(object, ordered_keys_array)
|
14
|
+
else
|
15
|
+
object = sort_alphabetically(object)
|
16
|
+
end
|
13
17
|
object.symbolize_keys!
|
14
18
|
end
|
19
|
+
|
20
|
+
def date_hash(date)
|
21
|
+
date = Date.parse(date) if date.is_a?(String)
|
22
|
+
{ day: date.day, month: date.month, year: date.year }
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def sort_by_ordered_keys(object, ordered_keys_array)
|
28
|
+
Hash[ object.sort_by { |k, _| ordered_keys_array.index(k.to_sym) || (10000 + k.to_s.ord) } ]
|
29
|
+
end
|
30
|
+
|
31
|
+
def sort_alphabetically(object)
|
32
|
+
Hash[ object.sort_by { |key, val| key.to_s } ]
|
33
|
+
end
|
15
34
|
end
|
16
35
|
end
|
17
36
|
end
|
data/lib/bing/ads/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bing-ads
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- oss92
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: savon
|
@@ -125,6 +125,11 @@ files:
|
|
125
125
|
- lib/bing/ads/api/v11/constants/limits.yml
|
126
126
|
- lib/bing/ads/api/v11/constants/time_zones.yml
|
127
127
|
- lib/bing/ads/api/v11/constants/wsdl.yml
|
128
|
+
- lib/bing/ads/api/v11/data.rb
|
129
|
+
- lib/bing/ads/api/v11/data/ad_group.rb
|
130
|
+
- lib/bing/ads/api/v11/data/campaign.rb
|
131
|
+
- lib/bing/ads/api/v11/data/expanded_text_ad.rb
|
132
|
+
- lib/bing/ads/api/v11/data/keyword.rb
|
128
133
|
- lib/bing/ads/api/v11/services.rb
|
129
134
|
- lib/bing/ads/api/v11/services/base.rb
|
130
135
|
- lib/bing/ads/api/v11/services/campaign_management.rb
|