数据报表API
大约 4 分钟
数据报表API
更新日志
更新日期 | 更新说明 |
---|---|
2024年3月6日 | 文档初建 |
1.权限认证
API 通过参数签名的方式进行权限控制,签名所需的 accessKey 和 securityKey,请到变现平台-账号管理- 密钥信息中获取,如果为空,请联系对应商务获取
2.签名生成
使用 accessKey、timeStamp、nonce和securityKey作md5,生成本次请求的sign
2.1 签名代码示例
下面举例说明如何生成签名和调用接口
public static void main(String[] args) {
String accessKey = "cqAkc7nE1X2etiQR";
String secureKey = "5361dec44de774d9adaf46a98ce9a910427885bd";
// 接口url
String url = "https://lemon.gameley.com/flowapi/adn/mediaDataReport/reportApi";
String timeStamp = System.currentTimeMillis() + "";
Integer random = (int)(Math.random()*10);
// 签名
TreeMap<String, Object> treeMap = new TreeMap<>();
treeMap.put("accessKey",accessKey);
treeMap.put("timeStamp",timeStamp);
treeMap.put("nonce",random.toString());
String sign = getSign(treeMap, secureKey);
System.out.println(sign);
//请求体参数
JSONObject data = new JSONObject();
data.put("strTime","2024-02-26");
String body = HttpUtil.createPost(url)
.header("accessKey",accessKey)
.header("sign",sign)
.header("timeStamp",timeStamp)
.header("nonce",random.toString())
.body(data.toString())
.execute().body();
System.out.println(JSON.toJSON(body));
}
/**
* 获取密钥
* @param request 签名的参数
* @param secure_key secureKey
* @return 参数拼接的字符串
*/
public static String getSign(Map<String, Object> request, String secure_key) {
Set<Map.Entry<String, Object>> entries = request.entrySet();
String str = "";
int i = 0;
for (Map.Entry<String, Object> e : entries) {
i++;
str += e.getKey();
str += "=";
str += e.getValue().toString();
if (i != request.size()) {
str += "&";
}
}
str += secure_key;
return getMD5Str(str);
}
/**
* Md5加密
* @param str 参数拼接的字符串
* @return sign签名结果
*/
public static String getMD5Str(String str) {
byte[] digest = null;
try {
MessageDigest md5 = MessageDigest.getInstance("md5");
digest = md5.digest(str.getBytes("utf-8"));
} catch (Exception e) {
e.printStackTrace();
}
StringBuilder md5StrBuilder = new StringBuilder();
for (byte tmp : Objects.requireNonNull(digest)) {
md5StrBuilder.append(String.format("%02x", tmp & 0xff));
}
return md5StrBuilder.toString();
}
3.广告数据报表API接口
请求URL: https://lemon.gameley.com/flowapi/adn/mediaDataReport/reportApi
请求方法: POST
Content-Type: application/json
参数名称 | 参数类型 | 是否必填 | 参数描述 |
---|---|---|---|
strTime | string | 是 | 数据日期,仅支持单天。日期格式为 yyyy-MM-dd |
响应参数:
响应字段 | 类型 | 描述 |
---|---|---|
flag | boolean | 返回结果 |
code | int | 返回结果状态码 |
message | string | 描述信息 |
data | resultReports[] | 数据对象 |
resultReports[]数据对象字段说明:
参数名称 | 类型 | |
---|---|---|
dateTime | Date | 日期 |
mediaAppId | int | 应用id |
mediaPosId | int | 代码位id |
adType | int | 广告类型(1开机 3信息流 4banner 5插屏 6激励视频) |
biddingType | int | 竞价类型(0 目标价 1实时竞价) |
os | int | 系统平台(1 ios,2 Android) |
requestNum | int | 广告请求 |
returnNum | int | 广告填充 |
fillRate | float | 填充率 |
showNum | int | 展示数 |
showRate | float | 展示率 |
clickNum | int | 点击数 |
clickRate | float | 点击率 |
revenue | float | 预估收益 |
ecpm | float | eCPM |
appName | string | 应用名称 |
mediaPosName | string | 代码位名称 |
accountNo | string | 账号名称 |
响应示例:
{
"flag": true,
"code": 2000,
"message": "请求成功",
"data": {
"resultReports": [
{
"dateTime": "2024-02-27 00:00:00",
"accountNo":"账号名称",
"mediaAppId": 600263,
"mediaPosId": 130000051,
"adType": 3,
"biddingType": 3,
"os": 2,
"requestNum": 0,
"returnNum": 18,
"fillRate": "0.0000",
"showNum": 16,
"showRate": "0.8889",
"clickNum": 2,
"clickRate": "0.1250",
"revenue": 0,
"ecpm": 0.0,
"appName": "kdriver-安卓测式应用",
"mediaPosName": "kdriver-代码位名称"
},
{
"dateTime": "2024-02-27 00:00:00",
"accountNo":"账号名称",
"mediaAppId": 600263,
"mediaPosId": 130000051,
"adType": 3,
"biddingType": 3,
"os": 2,
"requestNum": 0,
"returnNum": 18,
"fillRate": "0.0000",
"showNum": 16,
"showRate": "0.8889",
"clickNum": 2,
"clickRate": "0.1250",
"revenue": 0,
"ecpm": 0.0,
"appName": "kdriver-安卓测式应用",
"mediaPosName": "kdriver-代码位名称"
}
]
}
}
4.响应码
状态码 | 名称 | 描述 |
---|---|---|
2000 | 成功 | 当 API 请求被正确处理,且能按设计获取结果时,返回该状态码; |
300 | 签名错误 | 签名算法有误,或securityKey失效 |
301 | 时间戳无效或请求已过期 | |
302 | accessKey不存在 | |
303 | 必传参数不能为空 |