Class: FacebookAds::AdAccount
- Defined in:
- lib/facebook_ads/ad_account.rb
Overview
Constant Summary collapse
- FIELDS =
%w[id account_id account_status age created_time currency name].freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#ad_audiences(limit: 100) ⇒ Object
AdAudience.
-
#ad_campaigns(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
AdCampaign.
-
#ad_creatives(limit: 100) ⇒ Object
AdCreative.
-
#ad_images(hashes: nil, limit: 100) ⇒ Object
AdImage.
-
#ad_insights(range: Date.today..Date.today, level: 'ad', time_increment: 1) ⇒ Object
AdInsight.
-
#ad_sets(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
AdSet.
-
#ad_users(limit: 100) ⇒ Object
AdUser.
-
#ads(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
Ad.
-
#advertisable_applications(limit: 100) ⇒ Object
AdvertisableApplication.
- #create_ad_audience_with_pixel(name:, pixel_id:, event_name:, subtype: 'WEBSITE', retention_days: 15) ⇒ Object
- #create_ad_campaign(name:, objective:, status: 'ACTIVE') ⇒ Object
- #create_ad_creative(creative, creative_type: nil, carousel: false) ⇒ Object
- #create_ad_images(urls) ⇒ Object
- #create_dynamic_ad_campaign(name:, product_catalog_id:, status: 'ACTIVE') ⇒ Object
- #delivery_estimate(targeting:, optimization_goal:, currency: 'USD') ⇒ Object
- #reach_estimate(targeting:, optimization_goal:, currency: 'USD') ⇒ Object
Methods inherited from Base
delete, #destroy, find, find_by, get, paginate, post, #save, #update
Class Method Details
.all(query = {}) ⇒ Object
9 10 11 |
# File 'lib/facebook_ads/ad_account.rb', line 9 def all(query = {}) get('/me/adaccounts', query: query, objectify: true) end |
Instance Method Details
#ad_audiences(limit: 100) ⇒ Object
AdAudience
103 104 105 |
# File 'lib/facebook_ads/ad_account.rb', line 103 def ad_audiences(limit: 100) AdAudience.paginate("/#{id}/customaudiences", query: { limit: limit }) end |
#ad_campaigns(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
AdCampaign
28 29 30 |
# File 'lib/facebook_ads/ad_account.rb', line 28 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
AdCreative
82 83 84 |
# File 'lib/facebook_ads/ad_account.rb', line 82 def ad_creatives(limit: 100) AdCreative.paginate("/#{id}/adcreatives", query: { limit: limit }) end |
#ad_images(hashes: nil, limit: 100) ⇒ Object
AdImage
61 62 63 64 65 66 67 |
# File 'lib/facebook_ads/ad_account.rb', line 61 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
AdInsight
123 124 125 126 127 |
# File 'lib/facebook_ads/ad_account.rb', line 123 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_sets(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
AdSet
49 50 51 |
# File 'lib/facebook_ads/ad_account.rb', line 49 def ad_sets(effective_status: ['ACTIVE'], limit: 100) AdSet.paginate("/#{id}/adsets", query: { effective_status: effective_status, limit: limit }) end |
#ad_users(limit: 100) ⇒ Object
AdUser
22 23 24 |
# File 'lib/facebook_ads/ad_account.rb', line 22 def ad_users(limit: 100) AdCampaign.paginate("/#{id}/users", query: { limit: limit }) end |
#ads(effective_status: ['ACTIVE'], limit: 100) ⇒ Object
Ad
55 56 57 |
# File 'lib/facebook_ads/ad_account.rb', line 55 def ads(effective_status: ['ACTIVE'], limit: 100) Ad.paginate("/#{id}/ads", query: { effective_status: effective_status, limit: limit }) end |
#advertisable_applications(limit: 100) ⇒ Object
AdvertisableApplication
16 17 18 |
# File 'lib/facebook_ads/ad_account.rb', line 16 def advertisable_applications(limit: 100) AdvertisableApplication.paginate("/#{id}/advertisable_applications", query: { limit: limit }) end |
#create_ad_audience_with_pixel(name:, pixel_id:, event_name:, subtype: 'WEBSITE', retention_days: 15) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/facebook_ads/ad_account.rb', line 107 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
32 33 34 35 36 37 38 |
# File 'lib/facebook_ads/ad_account.rb', line 32 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, creative_type: nil, carousel: false) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/facebook_ads/ad_account.rb', line 86 def create_ad_creative(creative, creative_type: nil, carousel: false) # Support old deprecated carousel param return create_carousel_ad_creative(creative) if carousel case creative_type when 'carousel' create_carousel_ad_creative(creative) when 'link' create_link_ad_creative(creative) when 'image' create_image_ad_creative(creative) else create_image_ad_creative(creative) end end |
#create_ad_images(urls) ⇒ Object
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/facebook_ads/ad_account.rb', line 69 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
40 41 42 43 44 45 |
# File 'lib/facebook_ads/ad_account.rb', line 40 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 |
#delivery_estimate(targeting:, optimization_goal:, currency: 'USD') ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/facebook_ads/ad_account.rb', line 149 def delivery_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, optimization_goal: optimization_goal, currency: currency } self.class.get("/#{id}/delivery_estimate", query: query, objectify: false) end |
#reach_estimate(targeting:, optimization_goal:, currency: 'USD') ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/facebook_ads/ad_account.rb', line 129 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 |