Facebook商务软件开发包
facebook-business的Python项目详细描述
面向python的facebook业务sdk
简介
facebook的business sdk是一站式服务,帮助我们的合作伙伴更好地为他们的业务服务。合作伙伴正在使用多个facebook api来满足客户的需求。采用所有这些api并在各种平台上保持它们的最新状态可能会非常耗时,而且最终会令人望而却步。为此,facebook开发了business sdk,将许多api捆绑到一个sdk中,以便于实现和维护。business sdk是marketing api sdk的升级版本,它包括marketing api以及来自不同平台(如pages、business manager、instagram等)的许多facebook api。
快速启动
《商业sdk入门指南》
python是目前第三方开发人员最流行的语言。facebook_business
是一个python包,它在python应用程序和业务sdk中的facebook api之间提供接口。本教程介绍使用sdk所需的基本知识,并为读者提供一些练习。
注意:Facebook商业
包与Python2和3兼容!
先决条件
注册应用程序
要开始使用sdk,必须有一个应用程序 注册地:developers.facebook.com
要管理营销API,请访问 应用程序仪表板 并将营销API产品添加到您的应用程序中。
重要信息:为了安全起见,建议您打开"应用程序机密" 应用程序设置中的"服务器API调用证明"->;"高级"页。
获取访问令牌
当有人使用Facebook登录连接应用程序并批准请求时 对于权限,应用程序获取一个访问令牌,该令牌提供临时的、安全的 访问Facebook API。
访问令牌是一个不透明的字符串,用于标识用户、应用程序或页面。
例如,要访问营销api,需要生成用户访问令牌
为您的应用程序请求ads_management
权限;以访问页面api,
您需要为您的应用程序生成一个页面访问令牌,并请求管理页面
权限。
参考我们的 访问令牌指南了解更多信息。
现在,我们可以使用 图形资源管理器 获取访问令牌。
安装软件包
安装sdk最简单的方法是在shell中通过pip来实现。
注意:对于python3,请改用pip3
和python3
。
注意:如果有人抱怨权限问题,请使用sudo。(可能) 如果您使用的是系统安装的python,则会发生这种情况。)
如果没有pip:
easy_install pip
现在执行pip:
pip install facebook_business
如果您需要最新版本而不是 pypi.python.org存储库, 查看 从github下载存储库或下载发布tarball。一旦你得到了 软件包已下载并解压缩,请安装:
python setup.py install
太好了,现在您可以使用sdk了!
引导
创建test.py
创建包含以下内容的test.py文件(假设您的系统使用Python2.7并安装在/opt/homebrew下)。更新到正确的python位置。):
importsyssys.path.append('/opt/homebrew/lib/python2.7/site-packages')# Replace this with the place you installed facebookads using pipsys.path.append('/opt/homebrew/lib/python2.7/site-packages/facebook_business-3.0.0-py2.7.egg-info')# same as abovefromfacebook_business.apiimportFacebookAdsApifromfacebook_business.adobjects.adaccountimportAdAccountmy_app_id='your-app-id'my_app_secret='your-appsecret'my_access_token='your-page-access-token'FacebookAdsApi.init(my_app_id,my_app_secret,my_access_token)my_account=AdAccount('act_<your-adaccount-id>')campaigns=my_account.get_campaigns()print(campaigns)
测试您的安装
使用以下命令测试安装:
pythontest.py
你应该在终端窗口看到结果。如果它抱怨令牌已过期,请重复上述"先决条件"部分中描述的请求页面访问令牌的过程。
注意:在本教程的其余部分中,我们将使用objects模块。你可以 也可以直接使用adobjects下的各个类文件。
了解积垢
sdk实现了crud(创建、读取、更新、删除)设计。物体 与探索图形相关的位于 Facebook商业套餐。
图中的所有对象都是abstractobject
的实例。有些物体可以
直接查询,因此是abstractcrudobject
的实例(一个子类
抽象对象。这两个抽象类都位于
facebook\u business.adobjects
facebook\u business下有一个附加文件夹adobjects
。在这下面你会看到每个广告对象的文件
在我们的营销API中。这些文件是从我们的api自动生成的,因此
与api所能提供的功能相当。基于什么是crud操作
在每个对象上执行时,您将看到其中存在以下方法:
API获取
API更新
API删除
创建xxx
获取xxx
例如,campaign有所有这些方法,但adaccount没有。阅读 有关详细信息的市场营销API文档 广告有多不同 使用对象
abstractcrudobject中有一些不推荐使用的函数,如
远程创建
远程读取
远程更新
远程删除
请停止使用它们,因为我们可能会计划很快弃用它们。
浏览图表
sdk抽象api的方式是通过定义表示对象的类
在图表上。这些类定义及其帮助程序位于
facebook\u business.adobjects
初始化对象
看看abstractobject和abstractcrudobject方法 更多信息。图形子类上的大多数对象都来自这两个对象中的一个。
当实例化一个ad对象时,如果它已经存在,则可以指定它的id
定义fbid
参数。另外,如果您想与
使用特定的api对象而不是默认的api,可以指定
api
参数。
边缘
看看一个对象的方法,看看我们可以通过什么关联
迭代。例如,aduser
对象有一个方法
返回adaccount
对象的迭代器。
广告账户
大多数与广告相关的操作都在广告帐户的上下文中。你可以去 广告管理器查看帐户 你有权这么做。你们大多数人可能都有个人帐户。
让我们获取具有给定访问令牌的用户的所有广告帐户。我只 拥有一个帐户,以便打印以下内容:
>>>me=adobjects.AdUser(fbid='me')>>>my_accounts=list(me.get_ad_accounts())>>>print(my_accounts)[{'account_id':u'17842443','id':u'act_17842443'}]>>>type(my_accounts[0])<class'facebook_business.adobjects.AdAccount'>
警告:我们不指定关键字参数api=当实例化时
这里的
aduser
对象是因为我们已经在
引导。
注意:我们用list()包装
get_ad_accounts
的返回值
因为get_ad_accounts
返回一个edgeiterator
对象(位于
facebook\u business.adobjects
)我们希望立即获得完整的列表,而不是
让迭代器懒洋洋地加载帐户。
为了我们的目的,我们可以选择一个帐户并在它的 语境:
>>>my_account=my_accounts[0]
或者如果您已经知道您的帐户ID:
>>>my_account=adobjects.AdAccount('act_17842443')
创建
让我们创建一个活动。它在账户的上下文中,即其母公司 应该是帐户。
fields=[]params={adobjects.Campaign.Field.name:'Conversions Campaign',adobjects.Campaign.Field.configured_status:adobjects.Campaign.Status.paused,}campaign=AdAccount(id).create_campaign(fields,params)
然后我们将详细介绍这个活动。找出什么属性
要定义,应该查看对象的可用字段(位于
campaign.field
)并查看广告对象的文档(例如
活动)。
注意:要查找字段,请查看adobjects下的单个类文件 目录。
如果有错误,将引发异常。可能的例外及其
有关说明,请参见facebook\u business.exceptions
阅读
我们还可以从api中读取对象的属性,前提是
已创建并具有节点路径。访问对象的属性是
很简单,因为abstractobject
实现了collections.mutablemapping
。
您可以像访问字典的键一样访问它们:
easy_install pip
0
更新
要更新对象,可以修改其属性,然后调用
api_update
方法将对象与服务器同步。让我们纠正
将"Campain"键入"Campaign":
easy_install pip
1
您可以在广告管理器中看到结果。
删除
如果我们决定不再需要我们创建的活动:
easy_install pip
2
有用的参数
多个访问令牌
在整个文档中,在进行任何api调用之前都会调用方法facebookadsapi.init。这个 方法设置要在任何地方使用的默认facebookadsapi对象。简化了使用 但当使用sdk的系统代表多个用户进行调用时,这是不可行的。
这不可行的原因是因为每个用户都应该有自己的facebooksession,有自己的facebooksession 访问令牌,而不是对每个会话使用相同的会话。每个会话都应用于创建 分离FaceBookADSAPI对象。请参见下面的示例:
easy_install pip
3
在sdk示例中,我们总是将单个facebookadsapi对象设置为默认对象。 但是,使用multiples access_令牌需要使用multiples api。我们可以设定违约 对于用户的api,但是对于其他用户,我们将使用它的api对象作为参数。在下面的例子中, 我们创建两个aduser,第一个使用默认api,第二个使用其api对象:
easy_install pip
4
从上面创建相同对象的另一种方法是:
easy_install pip
5
从这里开始,这些对象的所有以下工作流保持不变。唯一的例外是 classmethods调用,我们现在应该在这里传递要用作最后一个参数的api 每次通话。例如,对aduser.get_by_ids方法的调用应该如下:
easy_install pip
6
积垢
所有crud调用都支持一个带字典的关键字参数
在需要高级修改时将参数名映射到值。你
可以将参数名列表作为
{对象类}.field
。在field类下面可能还有其他类
其中包含作为属性的父级值的有效字段
属性。
api_update
和create_xxx
支持afiles
关键字参数
它接受一个字典,将文件引用名映射到二进制打开的文件
对象。
api-get
支持一个字段的关键字参数,这是一种方便的方法
指定"fields"参数。
字段
获取字段列表
应该在通话中阅读。有效字段可以作为
类字段。
边缘
当初始化edgeiterator或调用
adaccount.get\u广告活动
:
- 您可以指定一个
字段
参数,该参数接受要读取的字段列表 正在读取的对象。
- 您可以指定一个
params
参数,它可以帮助您指定或筛选 边缘更精确。
批量调用
将大量调用组合到一个http请求中是有效的。 sdk使这个过程变得简单。您可以将调用组合到一个实例中 (facebook\business.api中提供)。容易得到 对于您的api实例:
easy_install pip
7
调用可以添加到批处理中,而不是立即执行:
easy_install pip
8
完成向批处理添加呼叫后,您可以发送请求:
easy_install pip
9
请按照 市场营销API文档中的批量调用指南。有最优的 每批呼叫数。另外,你可能需要注意这个价格 限制为批处理调用只会提高网络性能,而每个调用都会 单独计数以达到速率限制。
例外情况
有关可能引发的异常列表,请参见 SDK.
测试
单元测试
单元测试不需要访问令牌或网络访问。运行它们 使用默认安装的python,如下所示:
pip install facebook_business
0
您还可以使用tox运行具有多个python版本的单元测试:
pip install facebook_business
1
您可以通过安装
蟒蛇。在ubuntu上你可以使用
死蛇ppa。
在其他发行版上,您可以
从源代码构建,然后使用
sudo make altinstall
以避免与安装的系统发生冲突
版本:
示例
用法示例位于examples/
文件夹中。
调试
如果此sdk不能按预期工作,则可能是sdk问题或api问题。
这可以通过构造一个原始curl请求并查看响应是否如预期的那样来确定
例如:
pip install facebook_business
2
运行此代码时,此curl请求将打印到控制台:
pip install facebook_business
3
sdk代码生成
我们的sdk是从sdk codegen中自动生成的。如果您想了解有关如何生成sdk代码的更多信息,请检查此存储库。
问题
由于我们希望更有效地处理错误,我们决定关闭github中的问题报告,并转到我们专用的错误报告通道。 如果您在使用business sdk(python)时遇到错误,请在我们的开发者错误报告频道中报告此问题。
许可证
facebook business sdk for python的许可证文件位于此源树的根目录下。