获取数据
采用 oAuth2 协议的认证授权方式
- 授权:先通过官网申请的授权网址,使用自己的回调方法,
获取到appid
和secret
,存入快手账户库 - 获取Token:从回调方法中获取到
appid
、secret
和auth_code
,
获取到access_token
、refresh_token
和advertiser_id
,存入redis库 - 刷新Token:获取到access_oken有效期只有一天,refresh_token有效期30天。
当出现过期时,根据refresh_token重新获取access_token,同时access_token和refresh_token的有效期自动刷新 - 使用快手提供的魔力建站-线索信息查询接口
- 当请求带有起始、终止时间时,使用请求参数;反之使用当前时间的前一分钟时间
- 查询出所有的快手账户,遍历执行查询
- 通过access_token等参数调用快手接口,获取线索id
- 将所有线索入库(当多次获取同一时间段数据时用于去重)
- 取出线索中有用的数据,保存到mongdb(用于实现半小时去重)
- 再将数据放入mq中,进行分发处理
注意点
- 回调函数在申请账号前已经固定,变动一次不易,尽量不要改
- 当获取时间段较长时,回复的数据可能偏多,所以采用分页
int count = jsonObject.getJSONObject("data").getInteger("total_count");
logger.info("4.获取快手数目: {},主账号:{}", count, account.getAdvertiserId());
if (count == 0) {
logger.info("5.无新数据,不需要再次请求");
return;
}
//直接处理
…………
//新增数据小于PAGE_SIZE不用执行翻页获取
if (count < PAGE_SIZE) {
logger.info("7.不需要分页:{},{}", count, PAGE_SIZE);
return;
}
logger.info("7.需要分页:{},{}", count, PAGE_SIZE);
int t = (int) Math.ceil((count / 100.0));
for (int i = 2; i <= t; i++) {
paramBean.setPage(i);
String response1 = crm_chance_pull(paramBean, account.getAdvertiserId(), token);
JSONObject jsonObject1 = JSON.parseObject(response1);
JSONArray list = (JSONArray) jsonObject1.getJSONObject("data").get("details");
logger.info("{}结果:{}", account.getAdvertiserId(), jsonObject1);
…………
}
- mongo实现半小时去重的方法
long date = System.currentTimeMillis() - 30 * 60 * 1000;
Query query = Query.query(Criteria.where("md5").is(md5).and("createTime").gt(date)).with(sort);
return template.count(query, InputChanceRecord.class) > 0;