Facebook广告投放数据API对接流程

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除

作者:zhu6201976

一、需求背景

App在Facebook、Google等巨头进行广告投放,想要拿到实时广告投放效果数据,如曝光、点击、花费、触达等核心指标并进行分析,可对接官方API实现。因对接过程十分复杂,此处以Facebook为例,进行简单记录。

二、对接流程

1.文档地址

https://developers.facebook.com/docs/marketing-api/insights

2. access_token获取

a. 创建App https://developers.facebook.com/apps

b. 添加产品

  • 点击进入某个App --> Add products to your app --> Marketing API --> Set up

  • 点击左下角Marketing API --> Tools --> 勾选token权限 --> Get Token 即可生成一个长效token,有效期2个月,过期后需要重新生成 步骤相同

c. 查看access_token有效期(可选)

复制保存步骤2生成的token,查看有效期。

地址:https://developers.facebook.com/tools/debug/accesstoken

如图所示,通过此种方式,可以获取到一个有效期2个月的长效access_token。

三、示例代码

获取到长效access_token后,我们可以开始请求广告数据了。

    def __init__(self, **kwargs):super().__init__(**kwargs)self.api_url = 'https://graph.facebook.com'self.api_version = 'v19.0'

1. 获取所有广告账号adaccount

    def start_requests(self):page = 1url = f'{self.api_url}/{self.api_version}/me/adaccounts?'params = {'fields': 'id,name','access_token': self.access_token}url = f'{url}{urlencode(params)}'yield scrapy.Request(url, meta={'page': page}, priority=1, callback=self.parse_adaccounts)

通过该API,可以获取到所有广告账号,分页返回,每页25条。fields字段控制返回的字段,此处为account_id、account_name。

后续翻页控制代码:

resp_str = resp.body.decode('utf-8', 'ignore')
resp_dict = json.loads(resp_str)
next_url = resp_dict.get('paging', {}).get('next')
if next_url:page += 1yield scrapy.Request(next_url, meta={'page': page}, priority=1, callback=self.parse_adaccounts)

2. 获取广告账号广告量

为什么要获取广告账号广告量?因为如果某个广告账号下根本没有投放广告,则无需后续请求,提高效率,减少请求次数。

    def get_adaccount_ads_volume_req(self, ad_account_id, ad_account_name):"""构造账号广告量查询请求https://developers.facebook.com/docs/marketing-api/insights-api/ads-volume:param ad_account_id::return:"""url = f'{self.api_url}/{self.api_version}/{ad_account_id}/ads_volume?'params = {'access_token': self.access_token}url = f'{url}{urlencode(params)}'return scrapy.Request(url,meta={'ad_account_id': ad_account_id,'ad_account_name': ad_account_name},priority=2,callback=self.parse_adaccount_ads_volume)

解析账号广告量响应代码:

        resp_str = resp.body.decode('utf-8', 'ignore')resp_dict = json.loads(resp_str)# self.logger.info(f'{method_name} {ad_account_id} {resp_dict}')ads_volume = resp_dict.get('data', [])self.logger.info(f'{method_name} {ad_account_id} 提取到 {len(ads_volume)} ads_volume')for volume in ads_volume:ads_running_or_in_review_count = volume.get('ads_running_or_in_review_count', 0)if ads_running_or_in_review_count > 0:yield self.get_campaigns_req(ad_account_id, ad_account_name, page=1)

3. 获取广告账号所有campaign

    def get_campaigns_req(self, ad_account_id, ad_account_name, page):"""构造启动campaigns请求:param ad_account_id::param ad_account_name::param page::return:"""url = f'{self.api_url}/{self.api_version}/{ad_account_id}/campaigns?'params = {'effective_status': "['ACTIVE', 'PAUSED']",'fields': 'id,name','access_token': self.access_token,}url = f'{url}{urlencode(params)}'return scrapy.Request(url,meta={'ad_account_id': ad_account_id,'ad_account_name': ad_account_name,'page': page},priority=2,callback=self.parse_get_campaigns)

4. 对campaign聚合获取所有广告

该步骤非常重要,我们无需通过完整路径:adaccount --> campaign --> adset --> ads 获取到广告数据,可以利用API的level进行聚合,直接在campaign层级获取到所有广告投放数据。如下所示:

    def ad_insights_req(self, ad_account_id, ad_account_name, ad_campaign_id, ad_campaign_name, d_str, page):url = f'{self.api_url}/{self.api_version}/{ad_campaign_id}/insights?'params = {'level': 'ad','fields': 'adset_id,adset_name,ad_id,ad_name,impressions,clicks,unique_clicks,spend,reach,cpc,cpm,cpp,ctr,' +'date_start,date_stop,actions,action_values',# 'date_preset': 'today',  # today,yesterday,last_7d,last_30d,...'time_range': '{"since":' + f'"{d_str}"' + "," + '"until":' + f'"{d_str}"' + "}",'access_token': self.access_token,}url = f'{url}{urlencode(params)}'return scrapy.Request(url,meta={'ad_account_id': ad_account_id,'ad_account_name': ad_account_name,'ad_campaign_id': ad_campaign_id,'ad_campaign_name': ad_campaign_name,'d_str': d_str,'page': page},priority=3,callback=self.parse_ad_insights)

 5. 解析广告数据

        for ad in ads:ad_insights_item = FbAdInsightsItem()ad_insights_item['ad_account_id'] = ad_account_idad_insights_item['ad_account_name'] = ad_account_namead_insights_item['ad_campaign_id'] = ad_campaign_idad_insights_item['ad_campaign_name'] = ad_campaign_namead_insights_item['ad_set_id'] = ad.get('adset_id', '')ad_insights_item['ad_set_name'] = ad.get('adset_name', '')ad_insights_item['ad_id'] = ad.get('ad_id', '')ad_insights_item['ad_name'] = ad.get('ad_name', '')ad_insights_item['impressions'] = ad.get('impressions', '')ad_insights_item['clicks'] = ad.get('clicks', '')ad_insights_item['unique_clicks'] = ad.get('unique_clicks', '')ad_insights_item['spend'] = ad.get('spend', '')ad_insights_item['reach'] = ad.get('reach', '')ad_insights_item['cpc'] = ad.get('cpc', '')ad_insights_item['cpm'] = ad.get('cpm', '')ad_insights_item['cpp'] = ad.get('cpp', '')ad_insights_item['ctr'] = ad.get('ctr', '')ad_insights_item['date_start'] = ad.get('date_start', '')ad_insights_item['date_stop'] = ad.get('date_stop', '')

一键三连,有需要的请私聊获取详细源码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/816262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django第三方功能的使用

Django第三方功能的使用 Django REST framework前言1、Django--Restframework--coreapi版文档BUG:AssertionError: coreapi must be installed for schema support.How to run Django with Uvicorn webserver?2、序列化类 Serializer的使用模型序列化类 ModelSerializer的使用…

4-安装并配置Grafana并导入特定的仪表板模板

要安装并配置Grafana并导入特定的仪表板模板,你可以按照以下步骤操作: 1. 安装Grafana 首先,确保你的系统中已安装了 yum,这通常是CentOS或RHEL及其衍生版本中的包管理器。然后,运行以下命令来安装Grafana Enterpris…

Axios的简明教程

Axios是什么? Axios是一个基于promise的HTTP客户端,可以在浏览器和node.js中使用。它提供了一种简单的方法来发送异步HTTP请求。与其他HTTP库(如Fetch)相比,Axios提供了更丰富的功能和更好的错误处理。例如&#xff0…

MATLAB结合C+混编循环计算多孔结构的孔径分布

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material

7天八股速记之C++后端——Day 1

坚持7天,短期内快速完成C后端面试突击。每天10题,弥补后端八股知识缺漏,熟练掌握后端的高频考点,后端面试更有把握。 1. Redis 的五种数据结构 使用场景 String(字符串): 使用场景&#xff1a…

MySQL 社区版 安装总结

很早就安装过MySQL,没有遇到过什么问题,直接next就行了,这次在新电脑上安装却遇到了一些问题,记录一下。 安装的是MySQL社区版,下载地址是www.mysql.com,进入后选择DOWNLOAD页面,选择MySQL Com…

【HBase】HBase高性能架构:如何保证大规模数据的高可用性

HBase高性能原理 HBase 能够提供高性能的数据处理能力,主要得益于其设计和架构的几个关键方面。这些设计特点使得 HBase 特别适合于大规模、分布式的环境中进行高效的数据读写操作。以下是 HBase 高性能的主要原因: 1. 基于列的存储 HBase 是一个列式…

【入门】方程的解

方程: a*ab*bc*cn&#xff0c;其中 0<a<b<c。请你求出它的所有解&#xff0c;结果按照 a 的值从小到大输出。 输入 输入一个整数 n&#xff0c;为方程等号右边的整数。 输出 输出若干行&#xff0c;每行包括 33 个空格隔开的整数&#xff0c;分别为 a,b,c 的值。 …

SqlServer专题

目录 1&#xff0c;连接数据库 2&#xff0c;连接池 1.何为连接池&#xff1f; 2.连接池运行原理。 3.如何查看连接池&#xff1f; 4.连接池注意事项。 3&#xff0c;一般SQL语句。 4&#xff0c;控制语句 1.判断语句 2.循环语句 5&#xff0c;视图 1.使用…

<计算机网络自顶向下> P2P应用

纯P2P架构 没有或者极少一直运行的Server&#xff0c;Peer节点间歇上网&#xff0c;每次IP地址都可能变化任意端系统都可以直接通信利用peer的服务能力&#xff0c;可扩展性好例子&#xff1a;文件分发; 流媒体; VoIP类别:两个节点相互上载下载文件&#xff0c;互通有无&#…

C# Solidworks二次开发:相机访问相关API详解

大家好&#xff0c;今天要介绍的API为相机相关的API&#xff0c;这篇文章比较适合女孩子&#xff0c;学会了相机就会拍照了&#xff0c;哈哈。 下面是要介绍的API: &#xff08;1&#xff09;第一个为GetFocalDistance&#xff0c;这个API的含义为获取相机的焦距&#xff0c;…

ASP.NET基于BS的图书销售管理系统的设计与实现

随着Internet的兴起&#xff0c;网络已经成为现代人生活中的一部分&#xff0c;越来越多的人喜欢在网上交易。本系统就是一个基于B/S模式的网络化的图书销售管理系统,采用的是ASP.NET技术&#xff0c;实现了用户注册信息管理、用户信息管理、图书销售点管理、图书信息管理、客户…

特征工程(IV)--特征选择

特征工程 有这么一句话在业界广泛流传&#xff1a;数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已。由此可见&#xff0c;特征工程在机器学习中占有相当重要的地位。在实际应用当中&#xff0c;可以说特征工程是机器学习成功的关键。 特征工程是…

《业务代表模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式&#xff08;极简c版&#xff09;》-CSDN博客 模式说明 方案&#xff1a; 业务代表模式将对特定业务的访问逻辑封装在一个代表对象中&#xff0c;客户端通过代表对象访问业务&#xff0c;而无需了解具体的业务逻辑。优点&#xff1a; 将业务…

【C语言】简易版扫雷+进阶版扫雷

目录 前言 一、分模块化 二、准备雷盘 2.1 游戏菜单 2.2 创建雷盘思路 2.3 构建雷盘 2.4 雷盘展示 2.4.1 初始化雷盘 2.4.2 打印雷盘 三、排雷 3.1 布置雷 3.2 排查雷 四、进阶版扫雷 总结 前言 C语言实现扫雷小游戏&#xff0c;帮我们更进一步的掌握数组、模块化…

Windows Server 2016虚拟机安装教程

一、VMware Workstation虚拟机软件的下载 官网下载入口&#xff1a;​​​​​​Download VMware Workstation Pro - VMware Customer Connect​​​​​ 下载好之后自己看着提示安装软件就好. 二、镜像文件的下载 下载网站入口&#xff1a;MSDN, 我告诉你 - 做一个安静…

Docker搭建Kanzi

Kanzi是一个虚拟形象产品&#xff0c;它具有丰富的自定义和交互能力&#xff0c;例如捏脸、换装、同步音乐动作、声源定位转向等。Kanzi的Docker镜像允许用户在容器化环境中部署和运行这些虚拟形象&#xff0c;为开发者和企业提供了便捷的解决方案。 Kanzi Docker镜像的功能 …

【Java EE】Spring核心思想(一)——IOC

文章目录 &#x1f38d;Spring 是什么&#xff1f;&#x1f384;什么是IoC呢&#xff1f;&#x1f338;传统程序开发&#x1f338;传统程序开发的缺陷&#x1f338;如何解决传统程序的缺陷&#xff1f;&#x1f338;控制反转式程序开发&#x1f338;对比总结 &#x1f332;理解…

汇编语言知识点整理(应付考试专用,想学习找其他的)

1 基础知识 1.1 信息在计算机内部的表示和存储 1.1.1 信息存储的基本概念 信息在计算机内部是以二进制数据的形式在存储器中存取的。介绍两个基本概念&#xff1a; 位&#xff08;Bit&#xff09; 计算机中最小的数据单位&#xff0c;一位有0、1两状态。Bit是计算机中最小…

MySQL优化表,表的碎片整理和空间回收,清理空间

1.sql -- 查看表占用空间大小。简单查询可以用show table status like blog_visit; select data_length, index_length, data_free, o.* from information_schema.tables o where table_schema in (lishuoboy-navigation) and table_nameblog_visit order by data_length des…