From 38474ea9b30d6c4c5474d954207599090aeb6b62 Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 5 Oct 2018 10:14:29 -0700 Subject: [PATCH 01/14] Create class --- lib/facebook_ads/ad_set_activity.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 lib/facebook_ads/ad_set_activity.rb diff --git a/lib/facebook_ads/ad_set_activity.rb b/lib/facebook_ads/ad_set_activity.rb new file mode 100644 index 0000000..b00f0e0 --- /dev/null +++ b/lib/facebook_ads/ad_set_activity.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module FacebookAds + # https://developers.facebook.com/docs/marketing-api/reference/ad-activity/ + # curl -G + # \ -d 'fields=actor_id,actor_name,event_time,event_type,extra_data,translated_event_type' + # \ -d 'access_token=' \ https://graph.facebook.com/v3.1//activities? + class AdSetActivity < Base + FIELDS = %w[ + actor_id + actor_name + event_time + event_type + extra_data + translated_event_type + ].freeze + end +end From 3326b48c1ba86f763aa8037aeb03e3976a3a028d Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 5 Oct 2018 10:30:15 -0700 Subject: [PATCH 02/14] Add ad_set --- lib/facebook_ads/ad_set_activity.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/facebook_ads/ad_set_activity.rb b/lib/facebook_ads/ad_set_activity.rb index b00f0e0..c499f68 100644 --- a/lib/facebook_ads/ad_set_activity.rb +++ b/lib/facebook_ads/ad_set_activity.rb @@ -3,8 +3,8 @@ module FacebookAds # https://developers.facebook.com/docs/marketing-api/reference/ad-activity/ # curl -G - # \ -d 'fields=actor_id,actor_name,event_time,event_type,extra_data,translated_event_type' - # \ -d 'access_token=' \ https://graph.facebook.com/v3.1//activities? + # -d 'fields=actor_id,actor_name,event_time,event_type,extra_data,translated_event_type' + # -d 'access_token=' https://graph.facebook.com/v3.1//activities? class AdSetActivity < Base FIELDS = %w[ actor_id @@ -14,5 +14,9 @@ class AdSetActivity < Base extra_data translated_event_type ].freeze + + def ad_set + @ad_set ||= AdSet.find(ad_set_id) + end end end From 590f14425a19864141e3faa422118a4e85ed50eb Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 5 Oct 2018 12:52:21 -0700 Subject: [PATCH 03/14] Added activities to ad_set and event_types --- lib/facebook_ads/ad_set.rb | 4 ++ lib/facebook_ads/ad_set_activity.rb | 71 ++++++++++++++++++++++++++++- 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/lib/facebook_ads/ad_set.rb b/lib/facebook_ads/ad_set.rb index 96a0c24..b78037f 100644 --- a/lib/facebook_ads/ad_set.rb +++ b/lib/facebook_ads/ad_set.rb @@ -108,5 +108,9 @@ def ad_insights(range: Date.today..Date.today, level: nil, breakdowns: [], field AdInsight.paginate("/#{id}/insights", query: query) end + + def activities(fields: AdSetActivity.FIELDS) + AdSetActivity.get("/#{id}/activities", query: { fields: fields }, objectify: true) + end end end diff --git a/lib/facebook_ads/ad_set_activity.rb b/lib/facebook_ads/ad_set_activity.rb index c499f68..8bb77fa 100644 --- a/lib/facebook_ads/ad_set_activity.rb +++ b/lib/facebook_ads/ad_set_activity.rb @@ -4,7 +4,7 @@ module FacebookAds # https://developers.facebook.com/docs/marketing-api/reference/ad-activity/ # curl -G # -d 'fields=actor_id,actor_name,event_time,event_type,extra_data,translated_event_type' - # -d 'access_token=' https://graph.facebook.com/v3.1//activities? + # -d 'access_token=' https://graph.facebook.com/v3.1//activities class AdSetActivity < Base FIELDS = %w[ actor_id @@ -15,6 +15,75 @@ class AdSetActivity < Base translated_event_type ].freeze + EVENT_TYPES = %w[ + ad_account_update + spend_limit + ad_account_reset_spend_limit + ad_account_remove_spend_limit + ad_account_set_business_information + ad_account_update_status + ad_account_add_user_to_role + ad_account_remove_user_from_role + add_images + edit_images + delete_images + ad_account_billing_charge + ad_account_billing_charge_failed + ad_account_billing_chargeback + ad_account_billing_chargeback_reversal + ad_account_billing_decline + ad_account_billing_refund + billing_event + add_funding_source + remove_funding_source + create_campaign_group + update_campaign_name + update_campaign_run_status + update_campaign_group_spend_cap + create_campaign_legacy + update_campaign_budget + update_campaign_duration + campaign_ended + create_ad_set + update_ad_set_bidding + update_ad_set_bid_strategy + update_ad_set_budget + update_ad_set_duration + update_ad_set_run_status + update_ad_set_name + update_ad_set_optimization_goal + update_ad_set_target_spec + update_ad_set_bid_adjustments + create_ad + ad_review_approved + ad_review_declined + update_ad_creative + edit_and_update_ad_creative + update_ad_bid_info + update_ad_bid_type + update_ad_run_status + update_ad_run_status_to_be_set_after_review + update_ad_friendly_name + update_ad_targets_spec + update_adgroup_stop_delivery + first_delivery_event + create_audience + update_audience + delete_audience + share_audience + receive_audience + unshare_audience + remove_shared_audience + unknown + account_spending_limit_reached + campaign_spending_limit_reached + lifetime_budget_spent + funding_event_initiated + funding_event_successful + update_ad_labels + di_ad_set_learning_stage_exit + ].freeze + def ad_set @ad_set ||= AdSet.find(ad_set_id) end From 3d06bdb9430cd3e394e2a1e96c65d2ddde5e7376 Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 5 Oct 2018 12:56:24 -0700 Subject: [PATCH 04/14] Added categories --- lib/facebook_ads/ad_set_activity.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/facebook_ads/ad_set_activity.rb b/lib/facebook_ads/ad_set_activity.rb index 8bb77fa..2df3b62 100644 --- a/lib/facebook_ads/ad_set_activity.rb +++ b/lib/facebook_ads/ad_set_activity.rb @@ -15,6 +15,19 @@ class AdSetActivity < Base translated_event_type ].freeze + CATEGORIES = %w[ + ACCOUNT + AD + AD_SET + AUDIENCE + BID + BUDGET + CAMPAIGN + DATE + STATUS + TARGETING + ].freeze + EVENT_TYPES = %w[ ad_account_update spend_limit From 92e2d0687772e0992f0adbd7bbac1d48b14774b5 Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 5 Oct 2018 13:00:26 -0700 Subject: [PATCH 05/14] Added parent finding --- lib/facebook_ads/ad_set_activity.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/facebook_ads/ad_set_activity.rb b/lib/facebook_ads/ad_set_activity.rb index 2df3b62..be7eea2 100644 --- a/lib/facebook_ads/ad_set_activity.rb +++ b/lib/facebook_ads/ad_set_activity.rb @@ -97,6 +97,14 @@ class AdSetActivity < Base di_ad_set_learning_stage_exit ].freeze + def ad_account + @ad_account ||= AdAccount.find(account_id) + end + + def ad_campaign + @campaign ||= AdCampaign.find(campaign_id) + end + def ad_set @ad_set ||= AdSet.find(ad_set_id) end From 9a68dd2d4693b8a288faa3b42472c0d4ada40404 Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 5 Oct 2018 13:09:52 -0700 Subject: [PATCH 06/14] Adjust params --- lib/facebook_ads/ad_set.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/facebook_ads/ad_set.rb b/lib/facebook_ads/ad_set.rb index b78037f..1c0fa44 100644 --- a/lib/facebook_ads/ad_set.rb +++ b/lib/facebook_ads/ad_set.rb @@ -109,8 +109,8 @@ def ad_insights(range: Date.today..Date.today, level: nil, breakdowns: [], field AdInsight.paginate("/#{id}/insights", query: query) end - def activities(fields: AdSetActivity.FIELDS) - AdSetActivity.get("/#{id}/activities", query: { fields: fields }, objectify: true) + def activities(fields = AdSetActivity::FIELDS) + AdSetActivity.get("/#{id}/activities", query: { fields: fields.join(',') }, objectify: true) end end end From 1567bb633d740a61866fde32df16f168bd53bcb5 Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 5 Oct 2018 13:19:27 -0700 Subject: [PATCH 07/14] Objectify --- lib/facebook_ads/ad_set.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/facebook_ads/ad_set.rb b/lib/facebook_ads/ad_set.rb index 1c0fa44..447992b 100644 --- a/lib/facebook_ads/ad_set.rb +++ b/lib/facebook_ads/ad_set.rb @@ -109,8 +109,8 @@ def ad_insights(range: Date.today..Date.today, level: nil, breakdowns: [], field AdInsight.paginate("/#{id}/insights", query: query) end - def activities(fields = AdSetActivity::FIELDS) - AdSetActivity.get("/#{id}/activities", query: { fields: fields.join(',') }, objectify: true) + def activities + AdSetActivity.get("/#{id}/activities", objectify: true) end end end From 84016bb43c9466666b97d317ae4b264c24787a38 Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 5 Oct 2018 13:43:48 -0700 Subject: [PATCH 08/14] Filters to last 24 hr --- lib/facebook_ads/ad_set.rb | 5 +++-- lib/facebook_ads/ad_set_activity.rb | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/facebook_ads/ad_set.rb b/lib/facebook_ads/ad_set.rb index 447992b..02b8629 100644 --- a/lib/facebook_ads/ad_set.rb +++ b/lib/facebook_ads/ad_set.rb @@ -109,8 +109,9 @@ def ad_insights(range: Date.today..Date.today, level: nil, breakdowns: [], field AdInsight.paginate("/#{id}/insights", query: query) end + # Retrieves activities for ad set in last 24 hours def activities - AdSetActivity.get("/#{id}/activities", objectify: true) + AdSetActivity.get("/#{id}/activities", objectify: true).select { |activity| activity['event_time'] > 1.day.ago } end end -end +end \ No newline at end of file diff --git a/lib/facebook_ads/ad_set_activity.rb b/lib/facebook_ads/ad_set_activity.rb index be7eea2..7f94bfd 100644 --- a/lib/facebook_ads/ad_set_activity.rb +++ b/lib/facebook_ads/ad_set_activity.rb @@ -11,8 +11,6 @@ class AdSetActivity < Base actor_name event_time event_type - extra_data - translated_event_type ].freeze CATEGORIES = %w[ From 86499658c7324e755319b00124b2d3c043201d87 Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 5 Oct 2018 13:46:42 -0700 Subject: [PATCH 09/14] Add extra_data --- lib/facebook_ads/ad_set_activity.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/facebook_ads/ad_set_activity.rb b/lib/facebook_ads/ad_set_activity.rb index 7f94bfd..792d906 100644 --- a/lib/facebook_ads/ad_set_activity.rb +++ b/lib/facebook_ads/ad_set_activity.rb @@ -11,6 +11,7 @@ class AdSetActivity < Base actor_name event_time event_type + extra_data ].freeze CATEGORIES = %w[ From c903e074054b160ebcf575e2c1fb6f768719e0ad Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 5 Oct 2018 13:51:46 -0700 Subject: [PATCH 10/14] Create empty spec --- spec/facebook_ads/ad_set_activity_spec | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 spec/facebook_ads/ad_set_activity_spec diff --git a/spec/facebook_ads/ad_set_activity_spec b/spec/facebook_ads/ad_set_activity_spec new file mode 100644 index 0000000..2b94753 --- /dev/null +++ b/spec/facebook_ads/ad_set_activity_spec @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe FacebookAds::AdSetActivity do +end From cfc5fc0e90cf1e0fba4bd3664f11d71f770b6d7c Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Mon, 15 Oct 2018 13:17:30 -0700 Subject: [PATCH 11/14] Added final newline --- lib/facebook_ads/ad_set.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/facebook_ads/ad_set.rb b/lib/facebook_ads/ad_set.rb index 02b8629..7b9734b 100644 --- a/lib/facebook_ads/ad_set.rb +++ b/lib/facebook_ads/ad_set.rb @@ -114,4 +114,4 @@ def activities AdSetActivity.get("/#{id}/activities", objectify: true).select { |activity| activity['event_time'] > 1.day.ago } end end -end \ No newline at end of file +end From 5c95d6df545edb23745256a287986727a9cc33dc Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 16 Nov 2018 09:07:08 -0800 Subject: [PATCH 12/14] Comment --- lib/facebook_ads/ad_set_activity.rb | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/lib/facebook_ads/ad_set_activity.rb b/lib/facebook_ads/ad_set_activity.rb index 792d906..992676a 100644 --- a/lib/facebook_ads/ad_set_activity.rb +++ b/lib/facebook_ads/ad_set_activity.rb @@ -96,13 +96,7 @@ class AdSetActivity < Base di_ad_set_learning_stage_exit ].freeze - def ad_account - @ad_account ||= AdAccount.find(account_id) - end - - def ad_campaign - @campaign ||= AdCampaign.find(campaign_id) - end + # belongs_to ad_set def ad_set @ad_set ||= AdSet.find(ad_set_id) From 0ae842240d1d741a87683d1b6d176906832a5bd0 Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Fri, 16 Nov 2018 09:09:30 -0800 Subject: [PATCH 13/14] Refactor --- .../{ad_set_activity_spec => ad_set_activity_spec.rb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spec/facebook_ads/{ad_set_activity_spec => ad_set_activity_spec.rb} (100%) diff --git a/spec/facebook_ads/ad_set_activity_spec b/spec/facebook_ads/ad_set_activity_spec.rb similarity index 100% rename from spec/facebook_ads/ad_set_activity_spec rename to spec/facebook_ads/ad_set_activity_spec.rb From 27db814aecb54e6b932f20d221d7b1a92229c03b Mon Sep 17 00:00:00 2001 From: Adam Mosharrafa Date: Mon, 26 Nov 2018 09:21:11 -0800 Subject: [PATCH 14/14] Pass date range as param --- lib/facebook_ads/ad_set.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/facebook_ads/ad_set.rb b/lib/facebook_ads/ad_set.rb index 7b9734b..5e04a23 100644 --- a/lib/facebook_ads/ad_set.rb +++ b/lib/facebook_ads/ad_set.rb @@ -109,9 +109,9 @@ def ad_insights(range: Date.today..Date.today, level: nil, breakdowns: [], field AdInsight.paginate("/#{id}/insights", query: query) end - # Retrieves activities for ad set in last 24 hours - def activities - AdSetActivity.get("/#{id}/activities", objectify: true).select { |activity| activity['event_time'] > 1.day.ago } + # Retrieves activities for ad set (in last 24 hours by default) + def activities(since = 1.day.ago) + AdSetActivity.get("/#{id}/activities", objectify: true).select { |activity| activity['event_time'] > since } end end end