php对接谷歌admob广告收益reporting api分享

今天收到需求,需要对接reporting api接口,拉取广告收益回来。网上找到文档开始对接,对接完成了,今天分享给大家一些心得

在这里插入图片描述

文档地址:https://developers.google.com/admob/api/v1/reporting?hl=zh-cn#php-client-library

因为接口使用的google OAuth 2.0 授权,所以首先我们要去开发者后台创建一条数据,拿到ClientId,ClientSecret 并下载client_secret.json文件,然后可以开始接入了,下面是示例代码:
#主要是获取accessToken
// Create an AdMob Client.
$client = new Google_Client();
$client->addScope('https://www.googleapis.com/auth/admob.readonly');
$client->setApplicationName('AdMob API PHP Quickstart');
$client->setAccessType('offline');

// Be sure to replace the content of client_secrets.json with your developer
// credentials.
$client->setAuthConfig('client_secrets.json');

// Create the URL for the authorization prompt.
$authUrl = $client->createAuthUrl();

// Once the authorization prompt has been accepted, exchange the
// authorization code for an access and refresh token.
$client->authenticate($_GET['code']);
$client->getAccessToken();
这里有个问题,就是虽然这样可以获取到access_token,但是这里是需要在网页打开authUrl,然后google账号
授权之后,进行一个302跳转之后拿到code,最后在获取到access_token,但是我是想通过脚本去定时获取收益,
所以不可能每次手动去授权,所以这里我们要找到另一个办法获取这个access_token,因为之前接入过google
登录支付,知道有个方法,就是利用refresh_token去拿取access_token,所以现在的问题就是先拿到refresh_token
如何拿取refresh_token?

最常见的一个方法就是利用postman或者curl,或者你熟悉的http工具,创建http请求

地址:https://accounts.google.com/o/oauth2/token
请求方式:post
参数:
grant_type=authorization_code
code=获取到的code(需要看看code中是否有%号,如果有需要urldecode)
client_id=创建api项目是的clientId(客户端ID)
client_secret=创建api项目时的clientSecret(客户端密钥)
在这里插入图片描述

这里的参数唯一每次变的就是code这个值,这个值怎么拿呢,我们打印上一步的$authUrl = $client->createAuthUrl();
然后在浏览器访问这个链接,它会进行一次跳转,跳转之后参数里面会有一个code参数,我们拿到之后就可以请求了,
记住首次请求才会返回refresh_token,这个时候我们需要记住保存,如果忘记保存,也有办法,这个可自行查阅

在这里插入图片描述

通过refresh_token 换取access_token

拿到这个值之后,那我们就可以通过它去拿到access_token了

			$post_data = [
                'refresh_token' => self::RefreshToken,
                'client_id' => self::ClientId,
                'client_secret' => self::ClientSecret,
                'grant_type' => 'refresh_token',
            ];
            $request_uri = 'https://www.googleapis.com/oauth2/v4/token';
            $client = new Client();
            $response = $client->request('POST', $request_uri, ['json' => $post_data]);
            $result = json_decode($response->getBody()->getContents(), true);
            Redis::setex('google_api_access_token', 3600, $result['access_token']);
            $access_token = $result['access_token'];
获取广告收益

参数都有了,现在我们就可以拿取广告收益了

$client = new \Google_Client();
        $client->addScope(['https://www.googleapis.com/auth/admob.readonly', 'https://www.googleapis.com/auth/admob.report']);
        $json_file = dirname(__FILE__) . '/lib/admob/client_secret.json';
        #$client->setAccessType('offline');
        $client->setAuthConfig($json_file);
        #自己封装一个获取token方法
        $access_token = $this->get_access_token();
        $client->setAccessToken($access_token);
        $service = new \Google_Service_AdMob($client);

        $now_time = strtotime($date);
        #设置日期
        $startDate = new \Google_Service_AdMob_Date();
        $startDate->setYear(date('Y', $now_time));
        $startDate->setMonth(date('m', $now_time));
        $startDate->setDay(date('d', $now_time));

        $endDate = new \Google_Service_AdMob_Date();
        $endDate->setYear(date('Y', $now_time));
        $endDate->setMonth(date('m', $now_time));
        $endDate->setDay(date('d', $now_time));
        #AccountName 是后台的项目ID 能通过一个获取所有的
        $result = get_object_vars(self::run($service, self::AccountName, $startDate, $endDate));
public static function run($service, $accountName, $startDate, $endDate)
    {
        // Generate mediation report.
        $mediationReportRequest = self::createMediationReportRequest($startDate, $endDate);

        $mediationReportResponse = $service->accounts_mediationReport->generate(
            $accountName,
            $mediationReportRequest
        );
        // Convert mediation report response to a simple object.
        $mediationReportResponse = $mediationReportResponse->tosimpleObject();
        // Print each record in the report.
        return $mediationReportResponse ?: [];
    }

    /**
     * 这个方法主要是设置我们的一些配置和一些维度的参数等等
     * Generates a mediation report request.
     */
    public static function createMediationReportRequest($startDate, $endDate)
    {
        /*
         * AdMob API only supports the account default timezone and
         * "America/Los_Angeles", see
         * https://developers.google.com/admob/api/v1/reference/rest/v1/accounts.mediationReport/generate
         * for more information.
         */

        // Specify date range.
        $dateRange = new \Google_Service_AdMob_DateRange();
        $dateRange->setStartDate($startDate);
        $dateRange->setEndDate($endDate);

        $localization = new \Google_Service_AdMob_LocalizationSettings();
        $localization->setCurrencyCode('USD');

        $reportSpec = new \Google_Service_AdMob_MediationReportSpec();
        $reportSpec->setMetrics(['CLICKS', 'AD_REQUESTS', 'ESTIMATED_EARNINGS', 'IMPRESSIONS', 'MATCHED_REQUESTS']);
        $reportSpec->setDimensions(['APP', 'PLATFORM', 'AD_SOURCE', 'DATE', 'FORMAT']);
        $reportSpec->setDateRange($dateRange);
        $reportSpec->setLocalizationSettings($localization);

        // Create mediation report request.
        $mediationReportRequest = new \Google_Service_AdMob_GenerateMediationReportRequest();
        $mediationReportRequest->setReportSpec($reportSpec);

        return $mediationReportRequest;
    }

最后获取到返回的信息之后,因为收益他的单位不一样,我们需要将它转成我们需要到金额$metricValues[‘ESTIMATED_EARNINGS’][‘microsValue’] / 1000000,这里我们用到的是美元,
大家根据自己的需要修改一下

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

闪回技术

目录 闪回技术 恢复mybonus表 彻底删除mybonus表 清空回收站 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 闪回技术 Flash Back 给予用户最为直接的支持之一就是给了用户后悔的机会 但是现在如果用户想去操作这个…

全网最完整的iperf测试工具使用说明

文章目录 前言iPerf 2.0、iPerf 3.0 和 iPerf 3.1 之间的变化iPerf 3 用户文档iPerf 2.0.6、iPerf 2.0.7 和 iPerf 2.0.8 之间的更改iPerf 2 用户文档调整 TCP 连接调整 UDP 连接组 播IPv6 模式使用代表性流测量带宽将服务器作为守护程序运行 前言 iPerf - TCP、UDP 和 SCTP 的…

VUE实现Provide的计算属性

通过此篇可以学到: 如何使用Providerinject进行“跨代”传值如何实现一个计算属性的Provider如何解决告警“injection "xxxxx" not found. ” 一、描述 目前需要创建一个计算属性传入Provide,并且能够被其他组件Inject 二、实现 父组件 .…

每日一题——LeetCode1678.设计Goal解析器

方法一 splice 将字符串转为数组,对数组进行遍历,碰到G保持不变,继续循环,碰到 ( 看他后一位,是 ) 则删除两个元素,添加一个 o ,不是则删除四个元素,添加元素 al ,最后将…

Python—实例练习

1.编写程序x1,请先输入a和b两个整数,然后编写程序并输出 # (1)计算并显示a的绝对值; print("请输入a:") aint(input())if a>0:print(a) else:print(-a) # (2)两数中的最大值; a int(input()) b int(…

ProcessOn:让你的思维导图与流程图绘制更加高效

ProcessOn:让你的思维导图与流程图绘制更加高效 在当今这个信息爆炸的时代,有效地组织和呈现我们的想法变得尤为重要。无论是学生、教师、项目经理还是设计师,一个好的思维导图或流程图工具都能让我们的工作和学习更加高效。今天&#xff0c…

【项目笔记】java微服务:黑马头条(day02)

文章目录 app端文章查看,静态化freemarker,分布式文件系统minIO1)文章列表加载1.1)需求分析1.2)表结构分析1.3)导入文章数据库1.3.1)导入数据库1.3.2)导入对应的实体类 1.4)实现思路1.5)接口定义1.6)功能实现1.6.1):导入heima-leadnews-article微服务&am…

管理application的secret,在哪个level呢

从安全设计来看,访问控制是非常重要的。除非是完全公开的网页,可以没有任何限制的访问 在实施访问控制的应用application中呢,你的秘钥管理控制在哪个level呢 level -2 没有访问控制,注意这是-2 负二,不是level 2 l…

H5炫酷DJ背景引导页源码

源码名称:炫酷DJ背景引导页源码 源码介绍:一款带有动态视频背景的引导页源码,带有四个按钮,右下角也有三个按钮。 需求环境:H5 下载地址: https://www.changyouzuhao.cn/11665.html

今天做了两个工具

URL可用性检测 2.影视 第一个工具为第二个工具服务,一定程度上检测了搜集到视频解析接口是否可用。

2023年终总结——跌跌撞撞不断修正

目录 一、回顾1.一月,鼓足信心的开始2.二月,焦躁不安3.三月,路还是要一步一步的走4.四月,平平淡淡的前行5.五月,轰轰烈烈的前行6.六月,看事情更底层透彻了7.七月,设计模式升华月8.八月&#xff…

微信小程序(五十八)分步表单多页面传值

注释很详细,直接上代码 新增内容: 1.分步表单传值 2.伪数据生成 源码: app.json {"pages": ["pages/index/index","pages/building/building","pages/room/room","pages/logs/logs"],&qu…

初步了解变量

为什么需要变量 初识变量 变量的概念: 内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化 变量的构成包含三个要素:数据类型、变量名、存储的值 Java中变量声明的格式:数据类型 变量名 变量值 变量的作用&…

学习vue3第五节(reactive 及其相关)

1、定义 reactive() 创建一个响应式代理对象,不同于ref()可以创建任意类型的数据,而reactive()只能是对象,会响应式的深层次解包任何属性,将其标注为响应式 响应式是基于ES6的proxy实现的代理对象,该proxy对象与原对象…

九数分三组

枚举三位数时,不用写三个循环,写出最小和最大数循环就行。在这题里要求三个数中不能有重复的数字,先转换为字符串,再转换为字符数组进行排序,最后比较字符串就可以得出结果。这题把结果和原因调换了一下

Mysql/Redis缓存一致性

如何保证MySQL和Redis的缓存一致。从理论到实战。总结6种来感受一下。 理论知识 不好的方案 1.先写MySQL,再写Redis 图解说明: 这是一幅时序图,描述请求的先后调用顺序; 黄色的线是请求A,黑色的线是请求B; 黄色的…

[Linux][CentOs][Mysql]基于Linux-CentOs7.9系统安装并配置开机自启Mysql-8.0.28数据库

目录 一、准备工作:获取安装包和相应工具 (一)所需安装包 (二)安装包下载链接 (三)在服务器上创建文件夹并上传安装包 二、安装MySql (一)删除系统自带的mariadb …

到底什么是中台?

1.背景 最近老是听见或看见”中台“的字眼,例如数据中台、业务中台,根本搞不懂是什么,就感觉挺高大尚的。但同时,作为技术人,对于这种可能用到又一无所知的东西,心里是发慌的,因此有了这篇文章。…

unity中实现场景跳转

1,第一步创建2个场景(右键资源窗口,名字这里我取的1111和2222) 2.添加跳转按钮(双击其中一个场景并添加按钮) 3.编辑按钮的文字(将原本的按钮打开点击里面的text,就可以在右边编辑文…

改进沙猫群优化的BP神经网络ISCSO-BP(时序预测)的Matlab实现

改进沙猫群优化的BP神经网络(ISCSO-BP)是一种结合了改进的沙猫群优化算法(Improved Sand Cat Swarm Optimization, ISCSO)和反向传播(Back Propagation, BP)神经网络的模型,旨在提高时序预测的准…