适用功能
Quick Tracking「行为分析」-「用户洞察」-「人群管理」-「创建人群」
使用流程
1.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 | 时间戳 | 毫秒 重要 该时间戳务必写为:请求时的时间戳,时区和Quick Tracking服务部署的服务器一致。如果该时间与Quick Tracking服务收到请求时的时间戳差异较大,会报错。 |
前台页面管理域名 | 登录Quick Tracking后浏览器前台展示域名 |
body参数
{
"name": "人群上传api",
"idType": "userid",
"idList": ["userid1", "userid2"]
}鉴权签名
方法名 + 参数按照key进行字母排序。
/**
* Quick Tracking后台主账号可查看
*/
String secret = "abcdef";
/**
* 当前要请求的服务名
*/
String service = "portrait.userGroup.upload";
/**
* 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 = "{
"name": "人群上传api",
"idType": "userid",
"idList": ["userid1", "userid2"]
}";
String source = service
+ "\n"
+ queryString
+ "\n"
+ bodyString;用API Secret对source进行加密
String sign = new HmacUtils(HmacAlgorithms.HMAC_SHA_1, secret).hmacHex(source);<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 demo
*/
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.xxxx-poc.com/api/";
String service = "portrait.userGroup.upload";
String apiId = "axxxxxxxxxxxxV8p";
String apiSecret = "xexxxxxxxxxxxxxxxxxxxxxxxxxxCu8";
/**
* 构造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("name", "人群上传api");
body.put("idType", "userid");
body.put("idList", Arrays.asList("userid1", "userid2"));
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;
}
}1.2 人群上传
portrait.userGroup.upload
请求
idType枚举值:userid/utdid/imei/idfa
idList大小限制:100w,仅支持明文上传
{
"name": "人群上传api",
"idType": "userid",
"idList": ["userid1", "userid2"]
}响应
响应中有本次人群上传的uploadId
{
"code": 200,
"msg": "SUCCESS",
"sCode": 200,
"sMsg": "SUCCESS",
"data": {
"uploadId": "upload_000_8dk6fd_b5onq2vjamm8",
"groupId": "group_000_8dk6fd_b5onq2vlsiyo",
"status": "uploading"
},
"success": true
}1.3 人群上传状态
portrait.userGroup.uploadStatus
请求
请求中必须包含本次人群上传返回的uploadId
{
"uploadId": "upload_000_8dk6fd_b5onq2vjamm8"
}响应
返回人群上传状态
{
"code": 200,
"msg": "SUCCESS",
"sCode": 200,
"sMsg": "SUCCESS",
"data": {
"status": "done",
"percent": 100.0,
"total": 2,
"match": 0,
"matchRatio": 0.0
},
"success": true
}该文章对您有帮助吗?