分析数据

1 适用分析模型

事件分析、漏斗分析、留存分析和session分析

2 使用流程

2.1 新建报表

点击Quick Tracking平台首页的「行为分析」模块,进入到「行为分析」功能首页,在「行为分析」首页可通过筛选框与搜索框筛选快速找到需要导出数据的应用,具体如下图:image.pngimage.png

点击「行为分析」-「分析」进入到「行为洞察」页面,根据数据导出需求,创建报表:image.png

2.2 获取报表ID

点击右上角功能区「更多」按钮,进入“报表列表”,查看已经保存的报表,点击「复制报表ID」进行复制。image.png

image.png

2.3 使用openapi获取报表数据

2.3.1 权限校验

鉴权依据

API ID、API Secret

注:由于数据敏感,所以只在主账号中可见,具体展示位置为:

“管理控制台”--〉“采集信息”image.png

URL参数

http://xxx.yyy.com/api/{service}?api_id=abcdef&api_sign=abcdef&api_ts=123456

参数名

描述

备注

api_id

API ID

Quick Tracking后台主账号可查看

api_sign

签名

具体逻辑见“鉴权签名”

api_ts

时间戳

毫秒(该时间戳务必写为「请求时的时间戳,时区和QuickTracking服务部署的服务器一致」,如果该时间与QuickTracking服务收到请求时的时间戳差异较大,会报错。)

http://xxx.yyy.com/

前台页面管理域名

登录Quick Tracking后浏览器前台展示域名

body参数

{
    "dataSourceId": "32772108106530",
    "reportId":"rh2m151qj7bmh67uiqv46il4vfn8vckc",
    "timeUnit":"day",
    "fromDate":"2021-12-01",
    "toDate": "2021-12-23"
}

鉴权签名

方法名 + 参数按照key进行字母排序

/**
 * Quick Tracking后台主账号可查看
 */
String secret = "abcdef";

/**
 * 当前要请求的服务名
 */
String service = "analysis.report.data";

/**
 * 1.获取URL参数,如apiId=abcdef&sign=abcdef&ts=123456
 * 2.按照key排序,移除sign,结果apiId=abcdef&ts=123456
 */
String queryString = sort("api_id=abcdef&api_ts=123456");

/**
 * POST接口,body内容
 */
String bodyString = "{
    "dataSourceId": "32772108106530",
    "reportId":"rh2m151qj7bmh67uiqv46il4vfn8vckc",
    "timeUnit":"day",
    "fromDate":"2021-12-01",
    "toDate": "2021-12-23"
}";

String source = service
    + "\n" 
    + queryString
    + "\n"
    + bodyString;

用API Secret对source进行加密

String sign = new HmacUtils(HmacAlgorithms.HMAC_SHA_1, secret).hmacHex(source);

sign = 1cfc10a297397e91f1e50e1f41ac24b8c45fd53d

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>3.3.0</version>
</dependency>
package com.alibaba.umeng.base.product.advanced.controller;

import com.alibaba.fastjson.JSONObject;
import okhttp3.*;
import org.apache.commons.codec.digest.HmacAlgorithms;
import org.apache.commons.codec.digest.HmacUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

/**
 * @author mingpeng.spc
 * @date 2022/01/07
 */
public class OpenApiControllerTest {

    private static final MediaType APPLICATION_JSON = MediaType.parse("application/json; charset=utf-8");

    private final static Logger LOGGER = LoggerFactory.getLogger(OpenApiControllerTest.class);

    public static void main(String[] args) {

        String URL = "http://pre.aplus.emas-poc.com/api/";
        String service = "analysis.report.data";

        String apiId = "avWYU24hvdl62V8p";
        String apiSecret = "xezIgkcrtZ2yLQA4LYgBuyUo6Re2hCu8";

        /**
         * 构造URL参数
         */
        String query = new StringBuilder()
                .append("api_id=").append(apiId)
                .append("&")
                .append("api_ts=").append(System.currentTimeMillis())
                .toString();

        /**
         * 构造body参数
         */
        JSONObject body = new JSONObject();
        body.put("dataSourceId", "69412108036695");
        body.put("reportId", "7f6o7no8gks3uebieto2lmlv6o6728bj");
        body.put("timeUnit", "day");
        body.put("fromDate", "2021-12-31");
        body.put("toDate", "2022-01-06");

        String bodyString = body.toJSONString();

        /**
         * service
         * query
         * body
         */
        StringBuilder valueToDigest = new StringBuilder()
                .append(service)
                .append("\n")
                .append(query)
                .append("\n")
                .append(bodyString);

        String sign = new HmacUtils(HmacAlgorithms.HMAC_SHA_1, apiSecret).hmacHex(valueToDigest.toString());

        try {
            Response response = post(URL + service + "?" + query + "&api_sign=" + sign, bodyString);
            System.out.println(response.body().string());
        } catch (Exception e) {
            LOGGER.info("invoke post error", e);
        }
    }

    /**
     * HTTP Post
     * @param URL URL
     * @param body 请求body
     * @return
     */
    private static Response post(String URL, String body) throws IOException {

        LOGGER.info("http post start, URL = {}, body = {}", URL, body);

        RequestBody requestBody = RequestBody.create(APPLICATION_JSON, body);
        Request request = new Request.Builder()
                .URL(URL)
                .post(requestBody)
                .build();
        Response response = new OkHttpClient().newCall(request).execute();

        LOGGER.info("http post success");

        return response;
    }
}

2.3.2 数据获取

请求:

名称

类型

是否必须

描述

dataSourceId

String

必填

reportId

String

必填

报表id

timeUnit

String

必填

hour/day/week/month

fromDate

String

必填

yyyy-MM-dd

toDate

String

必填

yyyy-MM-dd

dataSourceId获取方式如下:

  1. 打开需要进行导出数据的报表,在页面URL中,platform后的数字即为dataSourceId;

  2. 或者可以打开点击右键,选择“检查”——》“Network”,即可看到dataSourceId。image.png

{
    "dataSourceId":"74612111122219",
    "reportId":"on3t8cosv298bt80it2st38o562ga95u",
    "timeUnit":"day",//请求为小时颗粒度,需要fromDate和toDate相等才可
    "fromDate":"2021-12-08",
    "toDate":"2021-12-14"
}

返回:

{
  //返回日期
    "date":[  
        "2021-12-08",
        "2021-12-09",
        "2021-12-10",
        "2021-12-11",
        "2021-12-12",
        "2021-12-13",
        "2021-12-14"
    ],
  //分组名称
    "groupNames":[

    ],
  //指标名称
    "indicatorNames":[
        "邀请点击人数",
        "邀请成功领取奖励",
        "邀请成功转化率"
    ],
    "firstTitle":"指标名称",
    "total":3,
  //数据返回
    "data":[
        [ //指标一的返回结果数据
            "邀请点击人数", //指标一名称
            1501, //指标一在所选时间范围内的合计结果
            162,  //最小日期结果数据
            547,
            176,
            187,
            128,
            237,
            183  //最大(近)日期结果数据
        ],
        [
          //指标二的返回结果数据
            "邀请成功领取奖励",//指标二名称
            185,  //指标二在所选时间范围内的合计结果
            28,   //最小日期结果数据
            67,
            11,
            14,
            17,
            32,
            16  //最大(近)日期结果数据
        ],
        [
          //指标三的返回结果数据
            "邀请成功转化率",
            0.1232,  //指标二在所选时间范围内的合计结果
            0.1728,  //最小日期结果数据
            0.1224,
            0.0625,
            0.0748,
            0.1328,
            0.135,
            0.0874  //最大(近)日期结果数据
        ]
    ],
    "groupKeys":[

    ],
    "groupTitle":[

    ]
}