facebookads 0.0.1 → 0.2.9
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/LICENSE.txt +17 -0
- data/README.md +222 -0
- data/lib/facebook_ads/ad_object.rb +177 -0
- data/lib/facebook_ads/ad_objects/ad.rb +215 -0
- data/lib/facebook_ads/ad_objects/ad_account.rb +665 -0
- data/lib/facebook_ads/ad_objects/ad_account_roas.rb +97 -0
- data/lib/facebook_ads/ad_objects/ad_account_targeting_unified.rb +136 -0
- data/lib/facebook_ads/ad_objects/ad_account_user.rb +39 -0
- data/lib/facebook_ads/ad_objects/ad_activity.rb +123 -0
- data/lib/facebook_ads/ad_objects/ad_async_request.rb +66 -0
- data/lib/facebook_ads/ad_objects/ad_async_request_set.rb +68 -0
- data/lib/facebook_ads/ad_objects/ad_async_request_set_notification_result.rb +38 -0
- data/lib/facebook_ads/ad_objects/ad_creative.rb +163 -0
- data/lib/facebook_ads/ad_objects/ad_creative_link_data.rb +62 -0
- data/lib/facebook_ads/ad_objects/ad_creative_link_data_app_link_spec.rb +40 -0
- data/lib/facebook_ads/ad_objects/ad_creative_link_data_call_to_action.rb +75 -0
- data/lib/facebook_ads/ad_objects/ad_creative_link_data_call_to_action_value.rb +46 -0
- data/lib/facebook_ads/ad_objects/ad_creative_link_data_child_attachment.rb +47 -0
- data/lib/facebook_ads/ad_objects/ad_creative_object_story_spec.rb +43 -0
- data/lib/facebook_ads/ad_objects/ad_creative_offer_data.rb +44 -0
- data/lib/facebook_ads/ad_objects/ad_creative_photo_data.rb +42 -0
- data/lib/facebook_ads/ad_objects/ad_creative_place_data.rb +41 -0
- data/lib/facebook_ads/ad_objects/ad_creative_text_data.rb +37 -0
- data/lib/facebook_ads/ad_objects/ad_creative_video_data.rb +48 -0
- data/lib/facebook_ads/ad_objects/ad_image.rb +58 -0
- data/lib/facebook_ads/ad_objects/ad_keyword_stats.rb +55 -0
- data/lib/facebook_ads/ad_objects/ad_label.rb +57 -0
- data/lib/facebook_ads/ad_objects/ad_place_page_set.rb +44 -0
- data/lib/facebook_ads/ad_objects/ad_preview.rb +54 -0
- data/lib/facebook_ads/ad_objects/ad_promoted_object.rb +64 -0
- data/lib/facebook_ads/ad_objects/ad_recommendation.rb +55 -0
- data/lib/facebook_ads/ad_objects/ad_recommendation_data.rb +37 -0
- data/lib/facebook_ads/ad_objects/ad_report_run.rb +70 -0
- data/lib/facebook_ads/ad_objects/ad_set.rb +267 -0
- data/lib/facebook_ads/ad_objects/ad_study.rb +69 -0
- data/lib/facebook_ads/ad_objects/ad_study_cell.rb +39 -0
- data/lib/facebook_ads/ad_objects/ad_study_objective.rb +59 -0
- data/lib/facebook_ads/ad_objects/ad_video.rb +25 -0
- data/lib/facebook_ads/ad_objects/adgroup_placement_specific_review_feedback.rb +43 -0
- data/lib/facebook_ads/ad_objects/adgroup_relevance_score.rb +40 -0
- data/lib/facebook_ads/ad_objects/adgroup_review_feedback.rb +38 -0
- data/lib/facebook_ads/ad_objects/ads_action_stats.rb +53 -0
- data/lib/facebook_ads/ad_objects/ads_data_partner.rb +37 -0
- data/lib/facebook_ads/ad_objects/ads_image_crops.rb +42 -0
- data/lib/facebook_ads/ad_objects/ads_insights.rb +225 -0
- data/lib/facebook_ads/ad_objects/ads_pixel.rb +64 -0
- data/lib/facebook_ads/ad_objects/ads_pixel_stats.rb +39 -0
- data/lib/facebook_ads/ad_objects/ads_pixel_stats_result.rb +50 -0
- data/lib/facebook_ads/ad_objects/agency_client_declaration.rb +48 -0
- data/lib/facebook_ads/ad_objects/android_app_link.rb +40 -0
- data/lib/facebook_ads/ad_objects/app_links.rb +43 -0
- data/lib/facebook_ads/ad_objects/broad_targeting_categories.rb +46 -0
- data/lib/facebook_ads/ad_objects/business.rb +242 -0
- data/lib/facebook_ads/ad_objects/business_ad_account_request.rb +37 -0
- data/lib/facebook_ads/ad_objects/business_page_request.rb +37 -0
- data/lib/facebook_ads/ad_objects/campaign.rb +211 -0
- data/lib/facebook_ads/ad_objects/conversion_action_query.rb +63 -0
- data/lib/facebook_ads/ad_objects/custom_audience.rb +166 -0
- data/lib/facebook_ads/ad_objects/custom_audience_ad_account.rb +36 -0
- data/lib/facebook_ads/ad_objects/custom_audience_data_source.rb +94 -0
- data/lib/facebook_ads/ad_objects/custom_audience_permission.rb +41 -0
- data/lib/facebook_ads/ad_objects/custom_audience_prefill_state.rb +39 -0
- data/lib/facebook_ads/ad_objects/custom_audience_session.rb +44 -0
- data/lib/facebook_ads/ad_objects/custom_audience_status.rb +38 -0
- data/lib/facebook_ads/ad_objects/custom_audiences_tos.rb +38 -0
- data/lib/facebook_ads/ad_objects/custom_conversion.rb +78 -0
- data/lib/facebook_ads/ad_objects/custom_conversion_stats_result.rb +50 -0
- data/lib/facebook_ads/ad_objects/day_part.rb +40 -0
- data/lib/facebook_ads/ad_objects/delivery_check.rb +40 -0
- data/lib/facebook_ads/ad_objects/delivery_check_extra_info.rb +39 -0
- data/lib/facebook_ads/ad_objects/delivery_estimate.rb +41 -0
- data/lib/facebook_ads/ad_objects/domain.rb +37 -0
- data/lib/facebook_ads/ad_objects/event.rb +74 -0
- data/lib/facebook_ads/ad_objects/event_source_group.rb +43 -0
- data/lib/facebook_ads/ad_objects/external_event_source.rb +38 -0
- data/lib/facebook_ads/ad_objects/flexible_targeting.rb +64 -0
- data/lib/facebook_ads/ad_objects/funding_source_details.rb +39 -0
- data/lib/facebook_ads/ad_objects/funding_source_details_coupon.rb +40 -0
- data/lib/facebook_ads/ad_objects/helpers/custom_audience_helpers.rb +170 -0
- data/lib/facebook_ads/ad_objects/hotel.rb +61 -0
- data/lib/facebook_ads/ad_objects/hotel_room.rb +44 -0
- data/lib/facebook_ads/ad_objects/id_name.rb +37 -0
- data/lib/facebook_ads/ad_objects/ios_app_link.rb +39 -0
- data/lib/facebook_ads/ad_objects/lead.rb +47 -0
- data/lib/facebook_ads/ad_objects/lead_gen_qualifier.rb +40 -0
- data/lib/facebook_ads/ad_objects/lead_gen_question.rb +40 -0
- data/lib/facebook_ads/ad_objects/lead_gen_question_option.rb +38 -0
- data/lib/facebook_ads/ad_objects/leadgen_form.rb +70 -0
- data/lib/facebook_ads/ad_objects/legacy_business_ad_account_request.rb +38 -0
- data/lib/facebook_ads/ad_objects/lookalike_spec.rb +43 -0
- data/lib/facebook_ads/ad_objects/minimum_budget.rb +41 -0
- data/lib/facebook_ads/ad_objects/offsite_pixel.rb +57 -0
- data/lib/facebook_ads/ad_objects/outcome_prediction_point.rb +40 -0
- data/lib/facebook_ads/ad_objects/partner_category.rb +51 -0
- data/lib/facebook_ads/ad_objects/product_catalog.rb +257 -0
- data/lib/facebook_ads/ad_objects/product_catalog_hotel_rooms_batch.rb +50 -0
- data/lib/facebook_ads/ad_objects/product_catalog_image_settings.rb +38 -0
- data/lib/facebook_ads/ad_objects/product_catalog_image_settings_operation.rb +37 -0
- data/lib/facebook_ads/ad_objects/product_catalog_pricing_variables_batch.rb +50 -0
- data/lib/facebook_ads/ad_objects/product_feed.rb +88 -0
- data/lib/facebook_ads/ad_objects/product_feed_schedule.rb +61 -0
- data/lib/facebook_ads/ad_objects/product_feed_upload.rb +48 -0
- data/lib/facebook_ads/ad_objects/product_feed_upload_error.rb +49 -0
- data/lib/facebook_ads/ad_objects/product_feed_upload_error_sample.rb +37 -0
- data/lib/facebook_ads/ad_objects/product_group.rb +98 -0
- data/lib/facebook_ads/ad_objects/product_item.rb +147 -0
- data/lib/facebook_ads/ad_objects/product_item_commerce_insights.rb +39 -0
- data/lib/facebook_ads/ad_objects/product_set.rb +49 -0
- data/lib/facebook_ads/ad_objects/product_variant.rb +39 -0
- data/lib/facebook_ads/ad_objects/profile_picture_source.rb +52 -0
- data/lib/facebook_ads/ad_objects/rate_card.rb +39 -0
- data/lib/facebook_ads/ad_objects/reach_estimate.rb +60 -0
- data/lib/facebook_ads/ad_objects/reach_frequency_prediction.rb +89 -0
- data/lib/facebook_ads/ad_objects/reach_frequency_spec.rb +42 -0
- data/lib/facebook_ads/ad_objects/rev_share_policy.rb +38 -0
- data/lib/facebook_ads/ad_objects/roas_cohorts_data.rb +41 -0
- data/lib/facebook_ads/ad_objects/roas_cohorts_per_cohort_interval_unit.rb +38 -0
- data/lib/facebook_ads/ad_objects/targeting.rb +133 -0
- data/lib/facebook_ads/ad_objects/targeting_dynamic_rule.rb +44 -0
- data/lib/facebook_ads/ad_objects/targeting_geo_location.rb +47 -0
- data/lib/facebook_ads/ad_objects/targeting_geo_location_city.rb +43 -0
- data/lib/facebook_ads/ad_objects/targeting_geo_location_custom_location.rb +50 -0
- data/lib/facebook_ads/ad_objects/targeting_geo_location_electoral_district.rb +40 -0
- data/lib/facebook_ads/ad_objects/targeting_geo_location_market.rb +40 -0
- data/lib/facebook_ads/ad_objects/targeting_geo_location_place.rb +45 -0
- data/lib/facebook_ads/ad_objects/targeting_geo_location_political_district.rb +40 -0
- data/lib/facebook_ads/ad_objects/targeting_geo_location_region.rb +39 -0
- data/lib/facebook_ads/ad_objects/targeting_geo_location_zip.rb +41 -0
- data/lib/facebook_ads/ad_objects/targeting_product_audience_spec.rb +39 -0
- data/lib/facebook_ads/ad_objects/targeting_product_audience_sub_spec.rb +38 -0
- data/lib/facebook_ads/ad_objects/targeting_sentence_line.rb +38 -0
- data/lib/facebook_ads/ad_objects/transaction.rb +56 -0
- data/lib/facebook_ads/ad_objects/transaction_currency_amount.rb +39 -0
- data/lib/facebook_ads/ad_objects/user.rb +127 -0
- data/lib/facebook_ads/ad_objects/user_lead_gen_disclaimer_response.rb +38 -0
- data/lib/facebook_ads/ad_objects/user_lead_gen_field_data.rb +38 -0
- data/lib/facebook_ads/ad_objects/video_thumbnail.rb +42 -0
- data/lib/facebook_ads/ad_objects/web_app_link.rb +38 -0
- data/lib/facebook_ads/ad_objects/windows_app_link.rb +40 -0
- data/lib/facebook_ads/ad_objects/windows_phone_app_link.rb +39 -0
- data/lib/facebook_ads/api_request.rb +123 -0
- data/lib/facebook_ads/api_response.rb +47 -0
- data/lib/facebook_ads/batch_api/batch.rb +86 -0
- data/lib/facebook_ads/batch_api/batch_proxy.rb +67 -0
- data/lib/facebook_ads/config.rb +43 -0
- data/lib/facebook_ads/edge.rb +184 -0
- data/lib/facebook_ads/errors.rb +55 -0
- data/lib/facebook_ads/field_types/ad_object.rb +37 -0
- data/lib/facebook_ads/field_types/base.rb +33 -0
- data/lib/facebook_ads/field_types/boolean.rb +25 -0
- data/lib/facebook_ads/field_types/datetime.rb +47 -0
- data/lib/facebook_ads/field_types/double.rb +29 -0
- data/lib/facebook_ads/field_types/enum.rb +31 -0
- data/lib/facebook_ads/field_types/integer.rb +33 -0
- data/lib/facebook_ads/field_types/list.rb +57 -0
- data/lib/facebook_ads/field_types/object.rb +33 -0
- data/lib/facebook_ads/field_types/string_type.rb +34 -0
- data/lib/facebook_ads/field_types/upload_file.rb +121 -0
- data/lib/facebook_ads/field_types.rb +65 -0
- data/lib/facebook_ads/fields.rb +66 -0
- data/lib/facebook_ads/helpers/edge_helpers.rb +57 -0
- data/lib/facebook_ads/helpers/node_helpers.rb +80 -0
- data/lib/facebook_ads/helpers/shortcuts.rb +34 -0
- data/lib/facebook_ads/param_set.rb +74 -0
- data/lib/facebook_ads/ruby2patch.rb +27 -0
- data/lib/facebook_ads/session.rb +99 -0
- data/lib/facebook_ads/utils/utils.rb +29 -0
- data/lib/facebook_ads/version.rb +24 -0
- data/lib/facebook_ads/videos/video_io.rb +25 -0
- data/lib/facebook_ads/videos/video_request.rb +42 -0
- data/lib/facebook_ads.rb +72 -0
- metadata +337 -13
- data/lib/facebookads.rb +0 -5
@@ -0,0 +1,80 @@
|
|
1
|
+
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
+
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
+
# in connection with the web services and APIs provided by Facebook.
|
6
|
+
#
|
7
|
+
# As with any software that integrates with the Facebook platform, your use of
|
8
|
+
# this software is subject to the Facebook Platform Policy
|
9
|
+
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
+
# included in all copies or substantial portions of the software.
|
11
|
+
#
|
12
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
module FacebookAds
|
20
|
+
module GraphNodes
|
21
|
+
def self.included(base)
|
22
|
+
base.extend ClassMethods
|
23
|
+
end
|
24
|
+
|
25
|
+
module ClassMethods
|
26
|
+
def has_no_get
|
27
|
+
include NodeHasNoGet
|
28
|
+
end
|
29
|
+
|
30
|
+
def has_no_id
|
31
|
+
include NodeHasNoID
|
32
|
+
end
|
33
|
+
|
34
|
+
def has_no_post
|
35
|
+
include NodeHasNoPost
|
36
|
+
end
|
37
|
+
|
38
|
+
def has_no_delete
|
39
|
+
include NodeHasNoDelete
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
module NodeHasNoGet
|
45
|
+
def load!
|
46
|
+
raise 'load! is not supported for this object'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
module NodeHasNoID
|
51
|
+
def self.included(base)
|
52
|
+
base.send(:include, NodeHasNoGet)
|
53
|
+
base.instance_eval do
|
54
|
+
def get(id, *args)
|
55
|
+
raise '#get is not supported for this object'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def id
|
61
|
+
raise 'This node has no id'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
module NodeHasNoPost
|
66
|
+
def self.included(base)
|
67
|
+
base.class_eval do
|
68
|
+
undef :save
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
module NodeHasNoDelete
|
74
|
+
def self.included(base)
|
75
|
+
base.class_eval do
|
76
|
+
undef :destroy
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
+
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
+
# in connection with the web services and APIs provided by Facebook.
|
6
|
+
#
|
7
|
+
# As with any software that integrates with the Facebook platform, your use of
|
8
|
+
# this software is subject to the Facebook Platform Policy
|
9
|
+
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
+
# included in all copies or substantial portions of the software.
|
11
|
+
#
|
12
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
module FacebookAds
|
20
|
+
module Shortcuts
|
21
|
+
def me
|
22
|
+
User.get('me')
|
23
|
+
end
|
24
|
+
|
25
|
+
def ad_account(act_id)
|
26
|
+
act_id = 'act_' + act_id unless id =~ /^act_/
|
27
|
+
AdAccount.get(act_id)
|
28
|
+
end
|
29
|
+
|
30
|
+
def business(biz_id)
|
31
|
+
Business.get(biz_id)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
+
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
+
# in connection with the web services and APIs provided by Facebook.
|
6
|
+
#
|
7
|
+
# As with any software that integrates with the Facebook platform, your use of
|
8
|
+
# this software is subject to the Facebook Platform Policy
|
9
|
+
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
+
# included in all copies or substantial portions of the software.
|
11
|
+
#
|
12
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
module FacebookAds
|
20
|
+
class ParamSet
|
21
|
+
def initialize
|
22
|
+
@params = {}
|
23
|
+
@accepts_files = false
|
24
|
+
end
|
25
|
+
|
26
|
+
def has_param(name, type)
|
27
|
+
@params[name.to_sym] = FieldTypes.for(type)
|
28
|
+
end
|
29
|
+
|
30
|
+
def accepts_files!
|
31
|
+
@accepts_files = true
|
32
|
+
end
|
33
|
+
|
34
|
+
def accepts_files?
|
35
|
+
@accepts_files
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_params(data)
|
39
|
+
Hash[data.map do |key,val|
|
40
|
+
key = key.to_sym
|
41
|
+
field_type = @params[key]
|
42
|
+
|
43
|
+
if (!field_type && accepts_files? && FieldTypes::UploadFile.acceptable?(val))
|
44
|
+
field_type = FieldTypes::UploadFile.new
|
45
|
+
end
|
46
|
+
|
47
|
+
if (!field_type && val.is_a?(Array)) # dynamic ads
|
48
|
+
val = JSON.generate(val)
|
49
|
+
end
|
50
|
+
|
51
|
+
[key, (field_type ? field_type.serialize(val) : val)]
|
52
|
+
# TODO CollectionProxy=
|
53
|
+
end]
|
54
|
+
end
|
55
|
+
|
56
|
+
def from_params(data)
|
57
|
+
Hash[data.map do |key,val|
|
58
|
+
key = key.to_sym
|
59
|
+
field_type = @params[key]
|
60
|
+
|
61
|
+
[key, (field_type ? field_type.deserialize(val) : val)]
|
62
|
+
end]
|
63
|
+
end
|
64
|
+
|
65
|
+
# TODO
|
66
|
+
def deserialize(data)
|
67
|
+
from_params(data)
|
68
|
+
end
|
69
|
+
|
70
|
+
def empty?
|
71
|
+
@params.empty?
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
+
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
+
# in connection with the web services and APIs provided by Facebook.
|
6
|
+
#
|
7
|
+
# As with any software that integrates with the Facebook platform, your use of
|
8
|
+
# this software is subject to the Facebook Platform Policy
|
9
|
+
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
+
# included in all copies or substantial portions of the software.
|
11
|
+
#
|
12
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
class Hash
|
20
|
+
def dig(k, *ks)
|
21
|
+
key?(k) ? (ks.empty? ? self[k] : self[k].dig(*ks)) : nil
|
22
|
+
end unless method_defined?(:dig)
|
23
|
+
|
24
|
+
def compact
|
25
|
+
self.select { |_, value| !value.nil? }
|
26
|
+
end unless method_defined?(:compact)
|
27
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
+
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
+
# in connection with the web services and APIs provided by Facebook.
|
6
|
+
#
|
7
|
+
# As with any software that integrates with the Facebook platform, your use of
|
8
|
+
# this software is subject to the Facebook Platform Policy
|
9
|
+
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
+
# included in all copies or substantial portions of the software.
|
11
|
+
#
|
12
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
require 'faraday'
|
20
|
+
require 'openssl'
|
21
|
+
require 'logger'
|
22
|
+
require 'facebook_ads/videos/video_request'
|
23
|
+
|
24
|
+
module FacebookAds
|
25
|
+
class Session
|
26
|
+
attr_accessor :access_token, :app_secret, :api_version, :server_host
|
27
|
+
|
28
|
+
def initialize(access_token: nil,
|
29
|
+
app_secret: nil,
|
30
|
+
server_host: FacebookAds.config.server_host,
|
31
|
+
api_version: FacebookAds.config.api_version)
|
32
|
+
@access_token = access_token
|
33
|
+
@app_secret = app_secret
|
34
|
+
@server_host = server_host
|
35
|
+
@api_version = api_version
|
36
|
+
end
|
37
|
+
|
38
|
+
def request(method, path, params = nil)
|
39
|
+
path.gsub!(/^\//,'') #
|
40
|
+
case method
|
41
|
+
when :get, :post, :delete
|
42
|
+
api_conn.send(method, path, params) do |req|
|
43
|
+
req.headers[:user_agent] = "fb-ruby-ads-api-sdk-#{VERSION}".freeze
|
44
|
+
req.params[:access_token] = access_token
|
45
|
+
req.params[:appsecret_proof] = appsecret_proof if app_secret
|
46
|
+
end
|
47
|
+
else
|
48
|
+
raise 'Unsupported HTTP method: ' + method
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def appsecret_proof
|
53
|
+
OpenSSL::HMAC.hexdigest(
|
54
|
+
OpenSSL::Digest.new('sha256'),
|
55
|
+
@app_secret,
|
56
|
+
@access_token
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
def api_conn
|
62
|
+
@api_conn ||= Faraday.new(url: api_base_path) do |faraday|
|
63
|
+
faraday.use FacebookAds::HTTPService::VideoRequest
|
64
|
+
faraday.request :multipart
|
65
|
+
# TODO Json Request
|
66
|
+
# TODO URL Encode - stringify json
|
67
|
+
faraday.request :url_encoded
|
68
|
+
|
69
|
+
faraday.response :logger, Utils.logger, bodies: FacebookAds.config.log_api_bodies
|
70
|
+
faraday.adapter Faraday.default_adapter
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def api_base_path
|
75
|
+
"https://#{self.server_host}/#{self.api_version}/".freeze
|
76
|
+
end
|
77
|
+
|
78
|
+
class << self
|
79
|
+
def default_session
|
80
|
+
# TODO
|
81
|
+
@default_session ||= new( access_token: FacebookAds.config.access_token,
|
82
|
+
app_secret: FacebookAds.config.app_secret)
|
83
|
+
end
|
84
|
+
|
85
|
+
def default_session=(session)
|
86
|
+
# TODO
|
87
|
+
@default_session = session
|
88
|
+
end
|
89
|
+
|
90
|
+
def current_session
|
91
|
+
@@current_session ||= default_session
|
92
|
+
end
|
93
|
+
|
94
|
+
def current_session=(session)
|
95
|
+
@@current_session = session
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
+
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
+
# in connection with the web services and APIs provided by Facebook.
|
6
|
+
#
|
7
|
+
# As with any software that integrates with the Facebook platform, your use of
|
8
|
+
# this software is subject to the Facebook Platform Policy
|
9
|
+
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
+
# included in all copies or substantial portions of the software.
|
11
|
+
#
|
12
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
require 'logger'
|
20
|
+
|
21
|
+
module FacebookAds
|
22
|
+
module Utils
|
23
|
+
extend self
|
24
|
+
|
25
|
+
attr_accessor :logger
|
26
|
+
self.logger = Logger.new(STDERR)
|
27
|
+
self.logger.level = Logger::ERROR
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
+
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
+
# in connection with the web services and APIs provided by Facebook.
|
6
|
+
#
|
7
|
+
# As with any software that integrates with the Facebook platform, your use of
|
8
|
+
# this software is subject to the Facebook Platform Policy
|
9
|
+
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
+
# included in all copies or substantial portions of the software.
|
11
|
+
#
|
12
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
# FB:AUTOGEN
|
20
|
+
|
21
|
+
module FacebookAds
|
22
|
+
VERSION = '0.2.9'
|
23
|
+
API_VERSION = '2.9'
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
+
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
+
# in connection with the web services and APIs provided by Facebook.
|
6
|
+
#
|
7
|
+
# As with any software that integrates with the Facebook platform, your use of
|
8
|
+
# this software is subject to the Facebook Platform Policy
|
9
|
+
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
+
# included in all copies or substantial portions of the software.
|
11
|
+
#
|
12
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
module FacebookAds
|
20
|
+
class VideoIO < ::UploadIO
|
21
|
+
def is_video?
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
+
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
+
# in connection with the web services and APIs provided by Facebook.
|
6
|
+
#
|
7
|
+
# As with any software that integrates with the Facebook platform, your use of
|
8
|
+
# this software is subject to the Facebook Platform Policy
|
9
|
+
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
+
# included in all copies or substantial portions of the software.
|
11
|
+
#
|
12
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
require 'faraday'
|
20
|
+
|
21
|
+
module FacebookAds
|
22
|
+
module HTTPService
|
23
|
+
class VideoRequest < Faraday::Middleware
|
24
|
+
def call(env)
|
25
|
+
if env.body && body_has_video?(env.body)
|
26
|
+
env.url.host = env.url.host.gsub(/^graph/, 'graph-video')
|
27
|
+
end
|
28
|
+
@app.call env
|
29
|
+
end
|
30
|
+
|
31
|
+
def body_has_video?(body)
|
32
|
+
if body.respond_to?(:each) && !body.is_a?(String)
|
33
|
+
(body.respond_to?(:values) ? body.values : body).any? do |val|
|
34
|
+
val.is_a?(FacebookAds::VideoIO)
|
35
|
+
end
|
36
|
+
else
|
37
|
+
false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|