Class: TheTradeDeskAds::AdAdvertiser
- Defined in:
- lib/the_trade_desk_ads/ad_advertiser.rb
Overview
An ad advertiser has many ad campaigns, ad images, and ad creatives. developers.facebook.com/docs/marketing-api/reference/ad-account
Constant Summary collapse
- FIELDS =
%w[PartnerId AdvertiserId AdvertiserName Description CurrencyCode AttributionClickLookbackWindowInSeconds AttributionImpressionLookbackWindowInSeconds ClickDedupWindowInSeconds ConversionDedupWindowInSeconds DefaultRightMediaOfferTypeId IndustryCategoryId Keywords FacebookAttributes Availability LogoURL DomainAddress].freeze
- AVAILABILITIES =
%w[Available Archived]
- SORTING_FIELDS =
{"Name": "Name", "Description": "Description"}
Class Method Summary collapse
- .all(query = {}) ⇒ Object
-
.facets(query = {}) ⇒ Object
facets = TheTradeDeskAds::AdAdvertiser.facets.
- .find_by(conditions) ⇒ Object
Instance Method Summary collapse
-
#ad_audiences ⇒ Object
has_many ad_audiences.
-
#ad_campaigns(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
has_many campaigns.
-
#ad_creatives(limit: 100) ⇒ Object
has_many ad_creatives.
-
#ad_images(hashes: nil, limit: 100) ⇒ Object
has_many ad_images.
-
#ad_insights(range: Date.today..Date.today, level: 'ad', time_increment: 1) ⇒ Object
has_many ad_insights.
-
#ad_partner ⇒ Object
belongs_to partner.
-
#ad_sets(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
has_many ad_sets.
-
#ads(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
has_many ads.
-
#applications ⇒ Object
has_many applications.
-
#audiences(search_terms: nil, sort_fields: nil, page_start_index: 0, page_size: 10) ⇒ Object
has_many audiences advertiser = TheTradeDeskAds::AdAdvertiser.find(“qckmczk”) advertiser_audiencess = advertiser.audiences.
-
#create_ad_audience_with_pixel(name:, pixel_id:, event_name:, subtype: 'WEBSITE', retention_days: 15) ⇒ Object
has_many ad_audiences.
- #create_ad_campaign(name:, objective:, status: 'ACTIVE') ⇒ Object
- #create_ad_creative(creative, carousel: true) ⇒ Object
- #create_ad_images(urls) ⇒ Object
- #create_dynamic_ad_campaign(name:, product_catalog_id:, status: 'ACTIVE') ⇒ Object
- #reach_estimate(targeting:, optimization_goal:, currency: 'USD') ⇒ Object
Methods inherited from Base
auth, delete, #destroy, find, get, paginate, post, #save, #update
Class Method Details
.all(query = {}) ⇒ Object
21 22 23 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 21 def all(query = {}) get('/me/adaccounts', query: query, objectify: true) end |
.facets(query = {}) ⇒ Object
facets = TheTradeDeskAds::AdAdvertiser.facets
17 18 19 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 17 def facets(query = {}) get('advertiser/query/facets', query: query, objectify: false) end |
.find_by(conditions) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 25 def find_by(conditions) all.detect do |object| conditions.all? do |key, value| object.send(key) == value end end end |
Instance Method Details
#ad_audiences ⇒ Object
has_many ad_audiences
122 123 124 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 122 def ad_audiences AdAudience.paginate("/#{id}/customaudiences") end |
#ad_campaigns(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
has_many campaigns
58 59 60 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 58 def ad_campaigns(effective_status: ['ACTIVE'], limit: 100) AdCampaign.paginate("/#{id}/campaigns", query: { effective_status: effective_status, limit: limit }) end |
#ad_creatives(limit: 100) ⇒ Object
has_many ad_creatives
100 101 102 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 100 def ad_creatives(limit: 100) AdCreative.paginate("/#{id}/adcreatives", query: { limit: limit }) end |
#ad_images(hashes: nil, limit: 100) ⇒ Object
has_many ad_images
79 80 81 82 83 84 85 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 79 def ad_images(hashes: nil, limit: 100) if !hashes.nil? AdImage.get("/#{id}/adimages", query: { hashes: hashes }, objectify: true) else AdImage.paginate("/#{id}/adimages", query: { limit: limit }) end end |
#ad_insights(range: Date.today..Date.today, level: 'ad', time_increment: 1) ⇒ Object
has_many ad_insights
128 129 130 131 132 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 128 def ad_insights(range: Date.today..Date.today, level: 'ad', time_increment: 1) ad_campaigns.map do |ad_campaign| ad_campaign.ad_insights(range: range, level: level, time_increment: time_increment) end.flatten end |
#ad_partner ⇒ Object
belongs_to partner
36 37 38 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 36 def ad_partner AdPartner.find(self.PartnerId) end |
#ad_sets(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
has_many ad_sets
110 111 112 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 110 def ad_sets(effective_status: ['ACTIVE'], limit: 100) AdSet.paginate("/#{id}/adsets", query: { effective_status: effective_status, limit: limit }) end |
#ads(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
has_many ads
116 117 118 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 116 def ads(effective_status: ['ACTIVE'], limit: 100) Ad.paginate("/#{id}/ads", query: { effective_status: effective_status, limit: limit }) end |
#applications ⇒ Object
has_many applications
155 156 157 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 155 def applications self.class.get("/#{id}/advertisable_applications", objectify: false) end |
#audiences(search_terms: nil, sort_fields: nil, page_start_index: 0, page_size: 10) ⇒ Object
has_many audiences advertiser = TheTradeDeskAds::AdAdvertiser.find(“qckmczk”) advertiser_audiencess = advertiser.audiences
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 44 def audiences(search_terms: nil, sort_fields: nil, page_start_index: 0, page_size: 10) query = { "AdvertiserId": self.AdvertiserId, "SearchTerms": search_terms, "SortFields": sort_fields, "PageStartIndex": page_start_index, "PageSize": page_size } query.delete_if { |_k, v| v.nil? } AdAudience.post('audience/query/advertiser', query: query, objectify: true) end |
#create_ad_audience_with_pixel(name:, pixel_id:, event_name:, subtype: 'WEBSITE', retention_days: 15) ⇒ Object
has_many ad_audiences
161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 161 def create_ad_audience_with_pixel(name:, pixel_id:, event_name:, subtype: 'WEBSITE', retention_days: 15) query = { name: name, pixel_id: pixel_id, subtype: subtype, retention_days: retention_days, rule: { event: { i_contains: event_name } }.to_json, prefill: 1 } result = AdAudience.post("/#{id}/customaudiences", query: query) AdAudience.find(result['id']) end |
#create_ad_campaign(name:, objective:, status: 'ACTIVE') ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 62 def create_ad_campaign(name:, objective:, status: 'ACTIVE') raise Exception, "Objective must be one of: #{AdCampaign::OBJECTIVES.join(', ')}" unless AdCampaign::OBJECTIVES.include?(objective) raise Exception, "Status must be one of: #{AdCampaign::STATUSES.join(', ')}" unless AdCampaign::STATUSES.include?(status) query = { name: name, objective: objective, status: status } result = AdCampaign.post("/#{id}/campaigns", query: query) AdCampaign.find(result['id']) end |
#create_ad_creative(creative, carousel: true) ⇒ Object
104 105 106 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 104 def create_ad_creative(creative, carousel: true) carousel ? create_carousel_ad_creative(creative) : create_image_ad_creative(creative) end |
#create_ad_images(urls) ⇒ Object
87 88 89 90 91 92 93 94 95 96 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 87 def create_ad_images(urls) files = urls.map do |url| name, path = download(url) [name, File.open(path)] end.to_h response = AdImage.post("/#{id}/adimages", query: files) files.values.each { |file| File.delete(file.path) } !response['images'].nil? ? ad_images(hashes: response['images'].map { |_key, hash| hash['hash'] }) : [] end |
#create_dynamic_ad_campaign(name:, product_catalog_id:, status: 'ACTIVE') ⇒ Object
70 71 72 73 74 75 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 70 def create_dynamic_ad_campaign(name:, product_catalog_id:, status: 'ACTIVE') raise Exception, "Status must be one of: #{AdCampaign::STATUSES.join(', ')}" unless AdCampaign::STATUSES.include?(status) query = { name: name, objective: 'PRODUCT_CATALOG_SALES', status: status, promoted_object: { product_catalog_id: product_catalog_id } } result = AdCampaign.post("/#{id}/campaigns", query: query) AdCampaign.find(result['id']) end |
#reach_estimate(targeting:, optimization_goal:, currency: 'USD') ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/the_trade_desk_ads/ad_advertiser.rb', line 134 def reach_estimate(targeting:, optimization_goal:, currency: 'USD') raise Exception, "Optimization goal must be one of: #{AdSet::OPTIMIZATION_GOALS.join(', ')}" unless AdSet::OPTIMIZATION_GOALS.include?(optimization_goal) if targeting.is_a?(AdTargeting) if targeting.validate! targeting = targeting.to_hash else raise Exception, 'The provided targeting spec is not valid.' end end query = { targeting_spec: targeting.to_json, optimize_for: optimization_goal, currency: currency } self.class.get("/#{id}/reachestimate", query: query, objectify: false) end |