1 适用分析模型
事件分析、漏斗分析、留存分析和session分析
2 使用流程
2.1 新建报表
点击Quick Tracking平台首页的「行为分析」模块,进入到「行为分析」功能首页,在「行为分析」首页可通过筛选框与搜索框筛选快速找到需要导出数据的应用,具体如下图:
点击「行为分析」-「分析」进入到「行为洞察」页面,根据数据导出需求,创建报表:
2.2 获取报表ID
点击右上角功能区「更多」按钮,进入“报表列表”,查看已经保存的报表,点击「复制报表ID」进行复制。
2.3 使用openapi获取报表数据
2.3.1 权限校验
鉴权依据
API ID、API Secret
注:由于数据敏感,所以只在主账号中可见,具体展示位置为:
“管理控制台”--〉“采集信息”
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获取方式如下:
打开需要进行导出数据的报表,在页面URL中,platform后的数字即为dataSourceId;
或者可以打开点击右键,选择“检查”——》“Network”,即可看到dataSourceId。
{
"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":[
]
}