首页 > 其他分享 >google play 内购数据拉取

google play 内购数据拉取

时间:2023-04-27 12:13:25浏览次数:47  
标签:内购 play google String zip storage com

拉取 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;
    }
View Code

 

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

标签:内购,play,google,String,zip,storage,com
From: https://www.cnblogs.com/cj8988/p/17358541.html

相关文章

  • playwright网络爬虫实战案例分享
    今日鸡汤不寝听金钥,因风想玉珂。大家好,我是Python进阶者。一、前言前几天在Python白银交流群【HugoLB】分享了一个playwright网络爬虫利器,如下图所示。感觉挺有意思,上手难度也不算太大,这里整理一份小教程分享给大家,后面遇到常规爬不动的网站,不妨试试看这个利器,兴许会事半功倍哦!二......
  • IOS内购数据拉取
    目标:拉取appstoreconnect内购数据拉取,自己做数据报表。1:api秘钥接口需要token,token生成需要秘钥。参考官方文档:https://developer.apple.com/documentation/appstoreconnectapi/creating_api_keys_for_app_store_connect_api 。  vendorNumber在这个界面查找: ......
  • python+playwright 学习-58 Jenkins上使用 Pipeline 运行 playwright 自动化脚本
    前言Dockerfile.focal可用于在Docker环境中运行Playwright脚本。这些镜像包括在Docker容器中运行浏览器所需的所有依赖项,还包括浏览器本身。playwright在linux系统上目前只支持Ubuntu系统的部分版本,centos和debian系统上是没法运行的。jenkins环境准备需安装2个跟d......
  • python+playwright 学习-57 svg 元素拖拽
    前言SVG英文全称为ScalablevectorGraphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过​name​()函数来进行定位。本篇讲下关于svg元素的拖拽相关操作。拖拽svg元素如图所示,svg下的circle元素是可以拖动的比如往右拖动100个像素,那么cx的值由原来的cx="100"变成......
  • playwite 安装的坑
    当在cmd下执行playwiteinstall命令报错Error:unabletoverifythefirstcertificateatTLSSocket.onConnectSecure(node:_tls_wrap:1540:34)atTLSSocket.emit(node:events:513:28)atTLSSocket._finishInit(node:_tls_wrap:959:8)atssl.onhandshak......
  • 什么是弹性(display: flex)布局 ?
    display:flex意思是弹性布局,它能够扩展和收缩flex容器内的元素,以最大限度地填充可用空间。Flex是FlexibleBox的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。.box{display:flex;}注意,设为Flex布局以后,子元素的flo......
  • python+playwright 学习-56 svg 元素定位
    前言SVG英文全称为ScalablevectorGraphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过​name​()函数来进行定位。svg元素定位如下看到的svg标签,就是svg元素用普通的标签定位,是无法定位的,如xpath的//svg只能通过name()函数来定位//*[name()="svg"]页面上用......
  • Google浏览器 查看http版本是1.1还是2.0
    1、打开网页2、F12进入开发者模式3、找到请求4、找到请求头5、找到ResPonseHeather点击Viewparsed......
  • MEMORY REPLAY WITH DATA COMPRESSION FOR CONTINUAL LEARNING--阅读笔记
    MEMORYREPLAYWITHDATACOMPRESSIONFORCONTINUALLEARNING--阅读笔记摘要:在这项工作中,我们提出了使用数据压缩(MRDC)的内存重放,以降低旧的训练样本的存储成本,从而增加它们可以存储在内存缓冲区中的数量。观察到压缩数据的质量和数量之间的权衡对于内存重放的有效性是非常重要......
  • 全球首发:Tiny10 2023 x86最终版及类似win10精简版/Win K/N版 单独添加Windows Media P
    情况:1.Windows功能列表中没有媒体功能(MediaFeatures),或该项下没有Windowsmediaplayer选项2.普通在Windows-设置-功能-可选功能中单独可以添加WMP,但实际并无效果,该组件需要相关功能包打开情况下才可以安装成功,否则尽管显示已安装,但实际Program目录下并无WindowsMediaPlayer出......