环境
红宝石 2.6.6
导轨 6.0.4.7
Gem facebookbusiness(Meta官方发布的SDK)
(※如果你用google搜索,gem 'facebook_ads' 等会出现,但请注意不是那个)
API 版本 v14.0(2022 年 8 月最新)
你想做的事
- 获取所有已通过 Meta for Developer 上的应用程序权限的广告帐户
- 获取每个广告帐户昨天的效果(展示次数、点击次数、费用等)
一点商业背景
我们公司在网络广告方面投入了很多精力,如果我们把所有业务的facebook广告账户加起来,我们大约有80个账户,包括我们不使用的那些。 (和广告公司一样)
过去,每个账户的负责人每天都要手动将信息输入到谷歌电子表格中,通过链接数据透视表和工作表进行汇总,并目视检查,这使得工作相当复杂。这次的背景是通过点击 facebook api 将其自动化到电子表格的输入。
在本文中,我将解释如何调用 facebook 信息。
前提
1. 为开发者制作 Meta 应用
如果您还没有,请创建访问令牌和应用程序机密。这里有很多日文文章,所以你不应该有任何麻烦。
2. 了解 Facebook 的广告管理架构
有用户,有广告账号,里面有campaign,有ad set等,了解imp,click,cost等PPC广告的基本结构和基本术语。好。
以这些知识为前提,我会告诉你如何真正从facebook的API的概念上来。
首先,Facebook 的 API 是什么?
・关键词是“node”和“edge”
了解更多信息官方文件我会留给你,但粗略地说......
节点:对象(接口),例如“用户”或“广告帐户”
任何熟悉 Javascript 的人都会熟悉 DOM 节点的概念。
边缘:连接物体的东西
DB 关系和 JOIN 等概念。比如你想调用一个广告账号中的(多个)campaign,你可以写成
AdAccount.campaigns
这样调用,但是这个点下面的部分是边缘。该边可以调用链接到链中对象的对象。・在 Ruby 中,您可以使用宝石“facebookbusiness”点击
这个 Gem 允许你像对象和方法一样处理上述节点和边,而不是 http 请求⇔响应的形式。
顺便一提,facebook 端的 Gem 自动更新总是命中最新的 API 版本所以,基本上维护只需要更换access_token。
准备
首先准备gem并安装它。
宝石文件gem 'facebookbusiness'
初始设定
facebook_api.rbrequire 'facebookbusiness' class FacebookAPI def initialize # facebook APIの初期設定 FacebookAds.configure do |config| config.access_token = '<発行したアクセストークン>' config.app_secret = '<発行したアプリ・シークレット>' end end end
* 在凭证中酌情包括令牌和其他项目。顺便说一句,有“短期”(1-2 小时内到期)和“长期”(2 个月)访问令牌。过去,可以从长期访问令牌发行无限期令牌,但现在似乎不可能。
1:获取您的账户信息
user = FacebooAd::User.get('me') #<FacebookAds::User {:id=>"me"}>
这里有两点
1)“我”被视为特殊节点
用户信息通常使用 .get(id) 访问,但通过指定节点“me”,API 端将通过查看请求时附加的访问令牌和应用程序机密自动拉取它。
2) 在这个阶段我还没有点击 API
简单写“get”不会命中API,API会在发送需要获取特定信息的消息的时机命中。
user = FacebooAd::User.get('me') user.name # "寺尾 たくみ"
对象持有的信息,例如
name
,称为字段。你可以在官方文档中查看这个,如果你查看gem的内容,用户.rbmodule FacebookAds class User < AdObject field :about, 'string' field :age_range, 'AgeRange' field :birthday, 'string' field :cover, 'UserCoverPhoto' field :currency, 'Currency' field :education, { list: 'object' } field :email, 'string' field :favorite_athletes, { list: 'Experience' } field :favorite_teams, { list: 'Experience' } field :first_name, 'string' field :gender, 'string' field :hometown, 'Page' field :id, 'string' ... ... ... end end
由于它们像这样排列成一排,因此您可以从该列表中搜索您想要的信息。不要害怕git克隆宝石.
此外,由于大多数对象都继承自 AdObject 类,因此您可以使用各种方便的方法。
user = FacebookAds::User.get('me') user.load! # 今すぐAPIを叩いて自身のインスタンスを書き換える user #<FacebookAds::User {:id=>"<自分のアカウントID>"}> user = FacebookAds::User.get('me',['name', 'id']) # argにほしいフィールドを配列でもたせる user.load! user.inspect #<FacebookAds::User {:id=>"<自分のアカウントID>", :name=>"寺尾 たくみ"}> user.to_hash #{:id=>"<自分のアカウントID>", :name=>"寺尾 たくみ"}
不要害怕git克隆宝石.
2:获取与您的帐户关联的广告帐户
这次我想要的是与用户关联的所有广告帐户。在此处检查宝石的边缘。
用户.rbclass User < AdObject ### 略 ### has_edge :accounts do |edge| edge.get 'Page' do |api| api.has_param :is_place, 'bool' api.has_param :is_promotable, 'bool' end ... end ### 略 ### has_edge :adaccounts do |edge| edge.get 'AdAccount' end end
有两个类似帐户的,但上面的一个可能是 Facebook 页面。原来广告账号在底部是
adaccounts
。user = FacebookAds::User.get('me') user.adaccounts #<#<Class:0x0000aaaaf8eaea18>:0x0000aaaafa39f210 @name=:adaccounts, @node=#<FacebookAds::User {:id=>"me"}>, @options={}, @should_delegate=false>
在这个阶段,它是一个普通对象,其节点(=object)是用户,边名@name 是 adaccounts。
user.adaccounts.all # allですべて取り出す #[#<FacebookAds::AdAccount {:account_id=>"xxx", :id=>"yyy"}>, #<FacebookAds::AdAccount {:account_id=>"xxx", :id=>"yyy"}>, #<FacebookAds::AdAccount {:account_id=>"xxx", :id=>"yyy"}>, #<FacebookAds::AdAccount {:account_id=>"xxx", :id=>"yyy"}>]
为了查看所有的内容,需要打API,所以取pp的结果是名为AdAccount的对象及其字段(id)如上图。
3:获取您的广告帐户数据
现在我们有了广告帐户的对象,我们要调用有关帐户执行情况的数据。 (展示次数、点击次数、费用等)
此数据位于另一个名为 AdInsights 的对象的字段中,因此我使用我的广告帐户中的 Edge 连接到 AdInsights。
user.adaccounts.each do |account| fields = %w[account_id account_name impressions inline_link_clicks spend] account.insights(fields: fields).each do |insight| insight.inspect end end #<FacebookAds::AdsInsights {:account_id=>"xx", :account_name=>"なまえ", :impressions=>"1000", :inline_link_clicks=>"100", :spend=>"10000", :date_start=>"2022-07-06", :date_stop=>"2022-08}>
关键是边缘也可以指定为字段。既然已经成功调用了数据,
insight.impressions # 1000 insight.spend # 10000
等等,随心所欲地使用它。但是,如果您尝试引用无法获取的值,则 AdObject 具有的#load! 将失败,因此请小心。特别是数值为0就不能取数值,所以如果要取便宜的瓷砖...
insight[:impressions] # 1000 insight.[:spend] # 10000 insight[:conversions] # nil
你可以用这样的符号来调用它。
4:添加参数缩小条件
默认情况下,之前调用的数据调用了一个月的聚合数据。但是,我只想调用昨天的总数并每天管理批次...因此,我们通过添加参数来缩小范围。
请注意,AdInsights 对象负责 API 之间的洞察 API,因此您应该参考该文档参考。
・图形API
・洞察API
・营销API由于分为三个API,你应该寻找你想要的对象的API并查看参考。
fields = %w[account_id account_name impressions inline_link_clicks spend] target_date = '2022-08-05' time_range = { 'since': target_date, 'until': target_date } account.insights({ fields: fields, time_range: time_range}).each do |insights| insights.inspect end
这一次,我们只用 time_range 调用了昨天的数据。如果设置了字段,请将它们插入花括号中。
综上所述
国内关于facebook的API的资料很少,尤其是取广告账号信息的那个……我希望这篇文章能帮助那些挑战 Facebook 的 API 的人。
原创声明:本文系作者授权九品源码发表,未经许可,不得转载;
原文地址:https://www.19jp.com/show-308623765.html