引流
java接入pangle广告收入API、穿山甲广告接入API、pangle广告收入接入
进入正题
背景:针对在pangle上面投放广告,获取广告收入数据,后续根据收入数据进行分析,整理财务报表等。
接入Pangle广告收入,访问接口地址示例:https://open-api.pangleglobal.com/union_pangle/open/api/rt/income?currency=cny&date=2021-01-12&role_id=459&sign_type=MD5&time_zone=0&user_id=459&version=2.0×tamp=1615778032&sign=598b733d2eb8d5ef7fb326fc2061dfa1&dimensions=ad_slot_type,region
通过网络请求进行数据拉取。
Request
必传参数:
- user_id
- role_id
- version
- date
- sign
- sign_type
如下图所示:
其中重要的参数:role_id、user_id 可以进行配置查询
官方地址:https://www.csjplatform.com/
另外一个重要参数就是根据MD5进行签名校验的sign值。
Response
pangle会在每天下午的14.00进行数据推送,通过api可以拉取到 T-1 天的数据。
获取sign
public class PangLeUtil {
// 必传参数
private static int user_id = 1234567;
private static int role_id = 1234567;
private static String version = "2.0";
// 根据自己的项目来
private static String secure_key = "*************************=";
private static String sign_type_md5 = "MD5";
private static final String KEY_USER_ID = "user_id";
private static final String KEY_ROLE_ID = "role_id";
private static final String KEY_VERSION = "version";
private static final String KEY_SIGN = "sign";
private static final String KEY_SIGN_TYPE = "sign_type";
// pull data url
private static final String PANGLE_HOST = "https://open-api.pangleglobal.com";
public static Map<String, String> signGen(Map<String, String> params) {
Map<String, String> result = new HashMap<>();
try {
if (params == null || params.isEmpty()) {
System.out.println("Invalid params: " + params);
return result;
}
if (user_id != 0) {
params.put(KEY_USER_ID, String.valueOf(user_id));
}
if (role_id != 0) {
params.put(KEY_ROLE_ID, String.valueOf(role_id));
}
params.put(KEY_VERSION, version);
params.put(KEY_SIGN_TYPE, sign_type_md5);
List<Map.Entry<String, String>> paramOrders = new ArrayList<>(params.entrySet());
paramOrders.sort(Map.Entry.comparingByKey());
StringBuilder rawStrBuilder = new StringBuilder();
for (Map.Entry<String, String> entry : paramOrders) {
String key = entry.getKey();
String value = entry.getValue();
if (value == null || value.isEmpty()) {
continue;
}
rawStrBuilder.append(key).append("=").append(value).append("&");
}
String rawStr = rawStrBuilder.toString();
if (rawStr.isEmpty()) {
return result;
}
String signStr = rawStr.substring(0, rawStr.length() - 1) + secure_key;
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(signStr.getBytes());
byte[] byteData = md.digest();
StringBuilder signBuilder = new StringBuilder();
for (byte byteDatum : byteData) {
signBuilder.append(Integer.toString((byteDatum & 0xff) + 0x100, 16).substring(1));
}
String sign = signBuilder.toString();
result.put(KEY_SIGN, sign);
result.put("url", rawStr + "sign=" + sign);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return result;
}
public static String getSignedUrl(Map<String, String> params) {
return signGen(params).get("url");
}
public static String getMediaRtIncome(Map<String, String> params) {
String result = getSignedUrl(params);
if (result == null || result.isEmpty()) {
return "";
}
return PANGLE_HOST + "/union_pangle/open/api/rt/income?" + result;
}
可以通过我上面的代码获取到sign。
后续就是拿到上面的 url 进行 网络请求,获取返回值,根据自己的业务做后续处理即可。
public void demo() {
// http请求
// ... 业务处理
}