拉取 google play console后台内购数据收入。

1:查看官方文档:

https://support.google.com/googleplay/android-developer/answer/6135870?visit_id=638180953496505768-3845517287&p=stats_export&rd=1#export

这里采用 从Google Cloud Storage 下载报表-》使用用户端程式库和服务帐户下载报表

2:准备工作。

 1; 从文档的步骤开始,新建立项目。注意是google developers console后台,不是google play console后台。新建项目,在 IAM和管理中-》添加一个服务账号-》生成秘钥。下载的json文件保留。

2;添加权限。需要将这里添加的服务账号邮件添加到 goole play console 后台, 权限需要有能下载报表的权限

    

 3:Storage sdk初始化

文档中表示,google play console后台的内购收入会每天往Google Cloud Storage的某个zip包添加数据,

我们需要从storage中下载zip包,解析里面的数据就行。通过上面的关联,我们可以通过新建的google cloud账号api去下载google play每天更新的storage中的zip.

在后台开启api权限

添加storage SDK 参考:https://cloud.google.com/storage/docs/reference/libraries#client-libraries-install-java

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.13.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
</dependency>

storage初始化

    public void initApay() {
String projectId = "pc-api-8153";//准备工作中那个新建项目的id-- projectId
InputStream is = AndroidPayHelper.class.getResourceAsStream("/firebaseauth/pay_android_key.json");//下载的json文件
try {
GoogleCredentials credentials = GoogleCredentials.fromStream(is)
.createScoped(Lists.newArrayList("https://www.googleapis.com/auth/devstorage.read_only")); Storage storage = StorageOptions.newBuilder()
.setCredentials(credentials)
.setProjectId(projectId)
.build()
.getService();
} catch (IOException e) {
System.out.println(e);
}
}

4:数据拉取

参考:https://cloud.google.com/storage/docs/downloading-objects?hl=zh-CN#storage-download-object-java

1,google play 后台查看storage的url和bucket:类似--  gs://pubsite_prod_8153303996/sales/

,

2,得到的是 gs://pubsite_prod_8153303996/sales/ 其中pubsite_prod_8153303996 就是bucketName(注意:这个是复制出来的,跟前面项目的projectId不是一个)。展示一下storage下面的文件。

     String bucketName = "pubsite_prod_8153303996";
Page<Blob> buckets = storage.list(bucketName);
for (Blob bucket : buckets.iterateAll()) {
System.out.println(bucket.getName());
}

打印出来的会有很多,只需要注意 sales开头的就行:这些就是需要下载的内购数据。

sales/salesreport_202302.zip
sales/salesreport_202303.zip
sales/salesreport_202304.zip

3,zip数据下载

        String bucketName = "pubsite_prod_8153303996";
BlobId blobId = BlobId.of(bucketName, "sales/salesreport_202304.zip");
Blob blob = storage.get(blobId);
byte[] content = blob.getContent(); try {
byte[] bytes = GzipUtils.unZip(content);
String body = new String(bytes, StandardCharsets.UTF_8);
putData(body);
} catch (Exception e) {
TaskLoggerUtil.Error(className + " unzip error:", e);
}

4,下载的锁zip包,需要解析:

public static byte[] unZip(byte[] data) throws IOException {
byte[] b = null;
ByteArrayInputStream bis = new ByteArrayInputStream(data);
ZipInputStream zip = new ZipInputStream(bis);
while (zip.getNextEntry() != null) {
byte[] buf = new byte[1024];
int num = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((num = zip.read(buf, 0, buf.length)) != -1) {
baos.write(buf, 0, num);
}
b = baos.toByteArray();
baos.flush();
baos.close();
}
zip.close();
bis.close(); return b;
}

5,分析数据

        String cDate = "2023-04-23";//表里的数据是这个月所有数据,如果只需要一天的,需要筛选
String[] separated = datas.split("\n");//拆分行
int len = separated.length;
for (int i = 1; i < len; i++) {
String[] row = separated[i].split(",");//拆分列,每一行数据是通过,组成的 //日期
String date = DateUtils.dateConvertionYs(String.valueOf(row[1]));//这里是将yyyy/MM/dd转为yyyy-MM-dd方便比较
if (!cDate.equals(date)) continue; String packId = row[6];//包名
//收益
float proceeds = Float.parseFloat(row[12]);//收入
}

5:展示数据

数据跟ios一样,需要自己通过汇率转为一种货币,方便计算。

参考文档:https://support.google.com/googleplay/android-developer/answer/6135870?visit_id=638180953496505768-3845517287&p=stats_export&rd=1#export

https://cloud.google.com/storage/docs/downloading-objects?hl=zh-CN#storage-download-object-java

google play 内购数据拉取的更多相关文章

  1. Google Play内购测试

    Google Play内购测试 最近项目做海外版本,接入Google wallet支付后,测试验证比较繁琐,故记录一下. Google wallet支付方式接入完成后,需要按照如下步骤设置,才可以进行 ...

  2. 解决 MySQL 比如我要拉取一个消息表中用户id为1的前10条最新数据

    我们都知道,各种主流的社交应用或者阅读应用,基本都有列表类视图,并且都有滑到底部加载更多这一功能, 对应后端就是分页拉取数据.好处不言而喻,一般来说,这些数据项都是按时间倒序排列的,用户只关心最新的动 ...

  3. canal从mysql拉取数据,并以protobuf的格式往kafka中写数据

    大致思路: canal去mysql拉取数据,放在canal所在的节点上,并且自身对外提供一个tcp服务,我们只要写一个连接该服务的客户端,去拉取数据并且指定往kafka写数据的格式就能达到以proto ...

  4. Spark Streaming中向flume拉取数据

    在这里看到的解决方法 https://issues.apache.org/jira/browse/SPARK-1729 请是个人理解,有问题请大家留言. 其实本身flume是不支持像KAFKA一样的发 ...

  5. 用setTimeout 代替 setInterval实时拉取数据

    在开发中,我们常常碰到需要定时拉取网站数据,如: setInterval(function(){ $.ajax({ url: 'xx', success: function( response ){ ...

  6. HBase指定大量列集合的场景下并发拉取数据时卡住的问题排查

    最近遇到一例,HBase 指定大量列集合的场景下,并发拉取数据,应用卡住不响应的情形.记录一下. 问题背景 退款导出中,为了获取商品规格编码,需要从 HBase 表 T 里拉取对应的数据. T 对商品 ...

  7. 利用docker hub做中转拉取google的k8s镜像

    1.背景 部署kubernetes,需要FQ.但是在初始化的时候,即是FQ了有的镜像pull依然会超时,导致初始化失败.而你又不想使用国内的一些镜像源,因为更新不及时.很多新功能和插件都不会包括,只想 ...

  8. 数据抓取的艺术(三):抓取Google数据之心得

    本来是想把这部分内容放到前一篇<数据抓取的艺术(二):数据抓取程序优化>之中.但是随着任务的完成,我越来越感觉到其中深深的趣味,现总结如下: (1)时间     时间是一个与抓取规模相形而 ...

  9. tpot从elastic search拉攻击数据之三 用于拉取的java程序

    package download; import org.json.JSONArray; import java.io.*; import java.net.URL; import java.net. ...

  10. Mysql分片后分页排序拉取数据的方法

    高并发大流量的互联网架构,一般通过服务层来访问数据库,随着数据量的增大,数据库需要进行水平切分,分库后将数据分布到不同的数据库实例(甚至物理机器)上,以达到降低数据量,增加实例数的扩容目的. 一旦涉及 ...

随机推荐

  1. 通过百度地图 API V2.0 版本,进行地图坐标系转换

    注意 先阅读参考链接 瞭月 的文章,再阅读本文. 其中,请求参数中 model 的含义: amap/tencent - 即:GCJ02 火星坐标系,由中国国家测绘局制订的地理信息系统的坐标系统. 由 ...

  2. springboot集成docker实现自动化构建镜像说明

    springboot集成docker实现自动化构建镜像说明 文档说明 该文档仅包括通过配置springboot.docker.jenkins.git.appollo等实现持续构建,持续发布的功能,不包 ...

  3. 匿名内部类、lambda匿名函数表达式

    a.匿名内部类的定义格式: 接口名称 对象名 = new 接口名称(){ //覆盖重写所有抽象方法 }: 一. /** * lambda匿名函数的使用 * Lambda省去面向对象的条条框框,格式由3 ...

  4. 根据返回值,判断是否执行下一步的方法(Run Keyword And Return Status指令的使用)

    场景分析: 上图"通用模版测试"内容 满足,如果当前页面存在这条数据,即结束执行本条用例,自动执行下一条.如果没有,则调用新建模版关键字,执行新建模版. 脚本如下 1配置运费模版 ...

  5. kettle介绍-Step之CSV Input

    CSV Input/CSV 文件输入介绍 CSV 文件输入步骤主要用于将 CSV 格式的文本文件按照一定的格式输入至 流中 Step name:步骤的名称,在单一转换中,名称必须唯一 Filename ...

  6. 关于wireshark抓包工具抓取登录数据的一点心得

    研究这个软件很久了,一直处于门外汉状态,今天终于用它抓到点有用的东西,做个简单的笔记吧,后面再继续完善. 最近研究跨域自动登录时一直不太顺利,今天就仿照网上前辈们的方法,用wireshark先抓一下手 ...

  7. AutoFac(三)——装配扫描(批量注册之扫描模块)

    RegisterAssemblyModules() 模块扫描使用RegisterAssemblyModules()注册方法执行,该方法完全按照其名称执行.它扫描提供的Autofac模块的程序集,创建模 ...

  8. 27.4K Star!这个LLM应用宝库让你秒变AI全栈高手,RAG和AI Agent一网打尽!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 想要快速入门LLM应用开发?想要了解最新的RAG和AI Agent技术?这个收获27.4K ...

  9. idea格式化代码快捷键

    Ctrl+Alt+L Ctrl+Shift+Alt+L

  10. 【HUST】网安|操作系统实验|实验三 内存管理

    文章目录 任务 任务1 Win/Linux编写二维数组遍历程序,理解局部性的原理. 1. 提示 2. 任务代码 3. 结果及说明 任务2 Windows/Linux模拟实现OPT和LRU淘汰算法. 1 ...