|
|
@@ -3,22 +3,28 @@ package com.fs.newAdv.integration.client.advertiser;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.http.HttpRequest;
|
|
|
import cn.hutool.http.HttpResponse;
|
|
|
+import cn.hutool.json.JSONArray;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
-import com.fs.newAdv.integration.client.AbstractApiClient;
|
|
|
-import com.fs.newAdv.integration.client.IAccessTokenClient;
|
|
|
+import com.baidu.dev2.thirdparty.jackson.core.JsonProcessingException;
|
|
|
+import com.baidu.dev2.thirdparty.jackson.databind.ObjectMapper;
|
|
|
import com.fs.common.constant.SystemConstant;
|
|
|
import com.fs.common.exception.ThirdPartyException;
|
|
|
import com.fs.newAdv.domain.PromotionAccount;
|
|
|
import com.fs.newAdv.domain.SiteStatistics;
|
|
|
import com.fs.newAdv.enums.AdvertiserTypeEnum;
|
|
|
+import com.fs.newAdv.integration.client.AbstractApiClient;
|
|
|
+import com.fs.newAdv.integration.client.IAccessTokenClient;
|
|
|
import com.fs.newAdv.vo.AccessTokenByAuthCodeVo;
|
|
|
import com.fs.newAdv.vo.AccessTokenVo;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.http.client.utils.URIBuilder;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.Map;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.net.URISyntaxException;
|
|
|
+import java.net.URL;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* 巨量引擎API客户端
|
|
|
@@ -35,7 +41,8 @@ public class OceanEngineApiClient extends AbstractApiClient implements IAccessTo
|
|
|
/**
|
|
|
* 巨量引擎转化回传API地址
|
|
|
*/
|
|
|
- private static final String CONVERSION_API_URL = "https://ad.oceanengine.com/track/activate";
|
|
|
+ private static final String CONVERSION_API_URL = "https://ad.oceanengine.com/track/activate/";
|
|
|
+ private static final String REPORT_API_URL = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
|
|
|
/**
|
|
|
* 获取Access Token
|
|
|
*/
|
|
|
@@ -127,13 +134,83 @@ public class OceanEngineApiClient extends AbstractApiClient implements IAccessTo
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public SiteStatistics getDataReport(PromotionAccount account,String startDate,String endDate) {
|
|
|
- return null;
|
|
|
+ public SiteStatistics getDataReport(PromotionAccount account,String ideaId, String startDate, String endDate) {
|
|
|
+ // 构建请求参数
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("advertiser_id", Long.valueOf(account.getAdAccountId()));
|
|
|
+ // 纬度--天
|
|
|
+ map.put("dimensions", Arrays.asList("stat_time_day"));
|
|
|
+ // 过滤条件
|
|
|
+ Map<String,Object> filters = new HashMap<>();
|
|
|
+ filters.put("field","cdp_promotion_id");
|
|
|
+ filters.put("type",2);
|
|
|
+ filters.put("operator",1);
|
|
|
+ filters.put("values ",Arrays.asList(ideaId));
|
|
|
+ map.put("filters", Arrays.asList(filters));
|
|
|
+ /**
|
|
|
+ * stat_cost 消耗(元)
|
|
|
+ * show_cnt 展示数
|
|
|
+ * cpm_platform 平均千次展现费用(元)
|
|
|
+ * click_cnt 点击数
|
|
|
+ * ctr 点击率
|
|
|
+ * cpc_platform 平均点击单价(元)
|
|
|
+ * convert_cnt 转化数
|
|
|
+ * conversion_cost 平均转化成本
|
|
|
+ * conversion_rate 转化率
|
|
|
+ */
|
|
|
+ map.put("metrics", Arrays.asList("stat_cost",
|
|
|
+ "show_cnt", "cpm_platform", "click_cnt", "ctr", "cpc_platform", "cpc_platform", "convert_cnt",
|
|
|
+ "conversion_cost", "conversion_rate"));
|
|
|
+ map.put("start_time", startDate);
|
|
|
+ map.put("end_time", endDate);
|
|
|
+ map.put("order_by", Collections.emptyList());
|
|
|
+ String url;
|
|
|
+ try {
|
|
|
+ URIBuilder ub = new URIBuilder(REPORT_API_URL);
|
|
|
+ ObjectMapper objectMapper = new ObjectMapper();
|
|
|
+ map.forEach((k, v) -> {
|
|
|
+ try {
|
|
|
+ ub.addParameter(k, v instanceof String ? (String) v : objectMapper.writeValueAsString(v));
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ url = ub.build().toURL().toString();
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ HttpResponse execute = HttpRequest.get(url)
|
|
|
+ .header("Access-Token", account.getAccessToken())
|
|
|
+ .timeout(SystemConstant.API_TIMEOUT)
|
|
|
+ .execute();
|
|
|
+ JSONObject jsonObject = JSONUtil.parseObj(execute.body());
|
|
|
+ if (jsonObject.getInt("code") != 0) {
|
|
|
+ // 刷新token重新请求
|
|
|
+ log.info("巨量刷新token重新请求");
|
|
|
+ AccessTokenVo accessTokenVo = refreshAccessToken(account.getAppId(), account.getAppSecret(), account.getRefreshToken());
|
|
|
+ execute = HttpRequest.get(url)
|
|
|
+ .header("Access-Token", accessTokenVo.getAccessToken())
|
|
|
+ .timeout(SystemConstant.API_TIMEOUT)
|
|
|
+ .execute();
|
|
|
+ jsonObject = JSONUtil.parseObj(execute.body());
|
|
|
+ }
|
|
|
+ JSONObject data = jsonObject.getJSONObject("data");
|
|
|
+ JSONArray rows = data.getJSONArray("rows");
|
|
|
+ JSONObject jsonObject1 = rows.getJSONObject(0);
|
|
|
+ JSONObject jsonObject2 = jsonObject1.getJSONObject("metrics");
|
|
|
+ SiteStatistics siteStatistics = new SiteStatistics();
|
|
|
+ siteStatistics.setImpressionCount(Integer.valueOf(jsonObject2.getStr("show_cnt")));
|
|
|
+ siteStatistics.setClickCount(Integer.valueOf(jsonObject2.getStr("click_cnt")));
|
|
|
+ siteStatistics.setActualCost(new BigDecimal(jsonObject2.getStr("stat_cost")));
|
|
|
+ siteStatistics.setAccountCost(new BigDecimal(jsonObject2.getStr("stat_cost")));
|
|
|
+ siteStatistics.setClickRate(new BigDecimal(jsonObject2.getStr("ctr")));
|
|
|
+ siteStatistics.setAvgClickPrice(new BigDecimal(jsonObject2.getStr("cpc_platform")));
|
|
|
+ return siteStatistics;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public AccessTokenVo refreshAccessToken(String appId, String appSecret, String refreshToken) {
|
|
|
- Map<String,Object> map = new HashMap<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
map.put("app_id", appId);
|
|
|
map.put("secret", appSecret);
|
|
|
map.put("refresh_token", refreshToken);
|
|
|
@@ -157,7 +234,7 @@ public class OceanEngineApiClient extends AbstractApiClient implements IAccessTo
|
|
|
|
|
|
@Override
|
|
|
public AccessTokenVo getAccessTokenByAuthCode(AccessTokenByAuthCodeVo request) {
|
|
|
- Map<String,Object> map = new HashMap<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
map.put("app_id", request.getAppId());
|
|
|
map.put("secret", request.getAppSecret());
|
|
|
map.put("auth_code", request.getAuthCode());
|
|
|
@@ -179,5 +256,7 @@ public class OceanEngineApiClient extends AbstractApiClient implements IAccessTo
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|