1、后端天行微信热搜榜接口实现
This commit is contained in:
parent
ea6149e91c
commit
47b3f68b9d
|
|
@ -33,6 +33,8 @@ public class ApiConst {
|
||||||
|
|
||||||
public static final String TIANXING_TOPSEARCHALLNETWORK= "天行-全网热搜榜";
|
public static final String TIANXING_TOPSEARCHALLNETWORK= "天行-全网热搜榜";
|
||||||
|
|
||||||
|
public static final String TIANXING_TOPSEARCHWECHAT= "天行-微信热搜榜";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -64,6 +66,8 @@ public class ApiConst {
|
||||||
|
|
||||||
public static final String TIANXING_TOPSEARCHALLNETWORK_URL= "http://api.tianapi.com/networkhot/index";
|
public static final String TIANXING_TOPSEARCHALLNETWORK_URL= "http://api.tianapi.com/networkhot/index";
|
||||||
|
|
||||||
|
public static final String TIANXING_TOPSEARCHALLWECHAT_URL= "http://api.tianapi.com/wxhottopic/index";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.xjs.common.client.api.tianxing;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.xjs.common.aop.ApiLog;
|
||||||
|
import com.xjs.common.client.factory.TianXingQWRSFeignFactory;
|
||||||
|
import com.xjs.common.client.factory.TianXingWXRSFeignFactory;
|
||||||
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
|
import static com.xjs.consts.ApiConst.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 天行微信热搜feign
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-01-11
|
||||||
|
*/
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
@FeignClient(name = "tianXingWXRS",url = TIANXING_TOPSEARCHALLWECHAT_URL,fallbackFactory = TianXingWXRSFeignFactory.class)
|
||||||
|
public interface TianXingWXRSFeignClient {
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
@ApiLog(name = TIANXING_TOPSEARCHWECHAT,
|
||||||
|
url = TIANXING_TOPSEARCHALLWECHAT_URL,
|
||||||
|
method = "Get")
|
||||||
|
JSONObject topSearchApi(@RequestParam("key") String key);
|
||||||
|
}
|
||||||
|
|
@ -18,7 +18,7 @@ public class TianXingQWRSFeignFactory implements FallbackFactory<TianXingQWRSFei
|
||||||
@Override
|
@Override
|
||||||
public TianXingQWRSFeignClient create(Throwable cause) {
|
public TianXingQWRSFeignClient create(Throwable cause) {
|
||||||
log.error("api模块天行全网热搜榜服务调用失败:{},执行降级处理", cause.getMessage());
|
log.error("api模块天行全网热搜榜服务调用失败:{},执行降级处理", cause.getMessage());
|
||||||
return requestBody -> {
|
return key -> {
|
||||||
JSONObject jsonObject = new JSONObject();
|
JSONObject jsonObject = new JSONObject();
|
||||||
//构建一个异常json给下层接口处理
|
//构建一个异常json给下层接口处理
|
||||||
jsonObject.put("error", R.FAIL);
|
jsonObject.put("error", R.FAIL);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
package com.xjs.common.client.factory;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.xjs.common.client.api.tianxing.TianXingWXRSFeignClient;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-01-11
|
||||||
|
*/
|
||||||
|
@Log4j2
|
||||||
|
@Component
|
||||||
|
public class TianXingWXRSFeignFactory implements FallbackFactory<TianXingWXRSFeignClient> {
|
||||||
|
@Override
|
||||||
|
public TianXingWXRSFeignClient create(Throwable cause) {
|
||||||
|
log.error("api模块天行微信热搜榜服务调用失败:{},执行降级处理", cause.getMessage());
|
||||||
|
return key -> {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
//构建一个异常json给下层接口处理
|
||||||
|
jsonObject.put("error", R.FAIL);
|
||||||
|
return jsonObject;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,7 @@ import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||||
import com.ruoyi.common.log.annotation.Log;
|
import com.ruoyi.common.log.annotation.Log;
|
||||||
import com.ruoyi.common.security.annotation.RequiresLogin;
|
import com.ruoyi.common.security.annotation.RequiresLogin;
|
||||||
import com.xjs.topsearch.domain.ApiTopsearchAllnetwork;
|
import com.xjs.topsearch.domain.ApiTopsearchAllnetwork;
|
||||||
|
import com.xjs.topsearch.domain.ApiTopsearchWechat;
|
||||||
import com.xjs.topsearch.factory.TopserachFactory;
|
import com.xjs.topsearch.factory.TopserachFactory;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
|
@ -31,6 +32,8 @@ public class ApiTopSearchController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private TopserachFactory<ApiTopsearchAllnetwork> tianXingTopsearchAllnetworkFactory;
|
private TopserachFactory<ApiTopsearchAllnetwork> tianXingTopsearchAllnetworkFactory;
|
||||||
|
@Autowired
|
||||||
|
private TopserachFactory<ApiTopsearchWechat> tianXingTopsearchWechatFactory;
|
||||||
|
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
|
|
@ -41,7 +44,7 @@ public class ApiTopSearchController {
|
||||||
//获取全网热搜
|
//获取全网热搜
|
||||||
List<ApiTopsearchAllnetwork> allnetworkList = tianXingTopsearchAllnetworkFactory.topSearchApi();
|
List<ApiTopsearchAllnetwork> allnetworkList = tianXingTopsearchAllnetworkFactory.topSearchApi();
|
||||||
//获取微博热搜
|
//获取微博热搜
|
||||||
|
List<ApiTopsearchWechat> wechatList = tianXingTopsearchWechatFactory.topSearchApi();
|
||||||
//获取抖音热搜
|
//获取抖音热搜
|
||||||
|
|
||||||
//获取微信热搜
|
//获取微信热搜
|
||||||
|
|
@ -51,6 +54,7 @@ public class ApiTopSearchController {
|
||||||
|
|
||||||
Map<String, List> listHashMap = new HashMap<>();
|
Map<String, List> listHashMap = new HashMap<>();
|
||||||
listHashMap.put("allnetworkList", allnetworkList);
|
listHashMap.put("allnetworkList", allnetworkList);
|
||||||
|
listHashMap.put("wechatList", wechatList);
|
||||||
|
|
||||||
return AjaxResult.success(listHashMap);
|
return AjaxResult.success(listHashMap);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.xjs.topsearch.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.ruoyi.common.core.annotation.Excel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信热搜榜实体
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-01-11
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("api_topsearch_wechat")
|
||||||
|
public class ApiTopsearchWechat implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 主键 */
|
||||||
|
@TableId("id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 话题 */
|
||||||
|
@Excel(name = "话题")
|
||||||
|
private String word;
|
||||||
|
|
||||||
|
|
||||||
|
@Excel(name = "创建时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -41,9 +41,7 @@ public class TianXingTopsearchAllnetworkFactory implements TopserachFactory<ApiT
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<ApiTopsearchAllnetwork> topSearchApi() {
|
public List<ApiTopsearchAllnetwork> topSearchApi() {
|
||||||
String key = tianXingProperties.getKey();
|
JSONObject jsonObject = tianXingQWRSFeignClient.topSearchApi(tianXingProperties.getKey());
|
||||||
Map<Object, Object> map = MapUtil.builder().put("key", key).map();
|
|
||||||
JSONObject jsonObject = tianXingQWRSFeignClient.topSearchApi(key);
|
|
||||||
if (!jsonObject.containsKey("error")) {
|
if (!jsonObject.containsKey("error")) {
|
||||||
if (jsonObject.getInteger("code") == HttpStatus.SUCCESS) {
|
if (jsonObject.getInteger("code") == HttpStatus.SUCCESS) {
|
||||||
JSONArray newslist = jsonObject.getJSONArray("newslist");
|
JSONArray newslist = jsonObject.getJSONArray("newslist");
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
package com.xjs.topsearch.factory.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.ruoyi.common.core.constant.HttpStatus;
|
||||||
|
import com.xjs.common.client.api.tianxing.TianXingWXRSFeignClient;
|
||||||
|
import com.xjs.config.TianXingProperties;
|
||||||
|
import com.xjs.topsearch.domain.ApiTopsearchAllnetwork;
|
||||||
|
import com.xjs.topsearch.domain.ApiTopsearchWechat;
|
||||||
|
import com.xjs.topsearch.factory.TopserachFactory;
|
||||||
|
import com.xjs.topsearch.service.ApiTopsearchWechatService;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信热搜api工厂实现
|
||||||
|
*
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-01-11
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Log4j2
|
||||||
|
public class TianXingTopsearchWechatFactory implements TopserachFactory<ApiTopsearchWechat> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TianXingProperties tianXingProperties;
|
||||||
|
@Autowired
|
||||||
|
private TianXingWXRSFeignClient tianXingWXRSFeignClient;
|
||||||
|
@Autowired
|
||||||
|
private ApiTopsearchWechatService apiTopsearchWechatService;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public List<ApiTopsearchWechat> topSearchApi() {
|
||||||
|
JSONObject jsonObject = tianXingWXRSFeignClient.topSearchApi(tianXingProperties.getKey());
|
||||||
|
if (!jsonObject.containsKey("error")) {
|
||||||
|
if (jsonObject.getInteger("code") == HttpStatus.SUCCESS) {
|
||||||
|
JSONArray newslist = jsonObject.getJSONArray("newslist");
|
||||||
|
List<ApiTopsearchWechat> collect = newslist.stream().map(arrayJson -> {
|
||||||
|
ApiTopsearchWechat apiTopsearchWechat = new ApiTopsearchWechat();
|
||||||
|
JSONObject json = (JSONObject) arrayJson;
|
||||||
|
apiTopsearchWechat.setWord(json.getString("word"));
|
||||||
|
return apiTopsearchWechat;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
log.info("微信热搜批量插入成功了嘛---" + apiTopsearchWechatService.saveBatch(collect));
|
||||||
|
return collect;
|
||||||
|
} else {
|
||||||
|
log.error("天行微信热搜服务调用成功,但返回异常");
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.error("天行微信热搜服务调用失败,被降级!!");
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.xjs.topsearch.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.xjs.topsearch.domain.ApiTopsearchWechat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-01-11
|
||||||
|
*/
|
||||||
|
public interface ApiTopsearchWechatMapper extends BaseMapper<ApiTopsearchWechat> {
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.xjs.topsearch.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.xjs.topsearch.domain.ApiTopsearchWechat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-01-11
|
||||||
|
*/
|
||||||
|
public interface ApiTopsearchWechatService extends IService<ApiTopsearchWechat> {
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.xjs.topsearch.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.xjs.topsearch.domain.ApiTopsearchWechat;
|
||||||
|
import com.xjs.topsearch.mapper.ApiTopsearchWechatMapper;
|
||||||
|
import com.xjs.topsearch.service.ApiTopsearchWechatService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xiejs
|
||||||
|
* @since 2022-01-11
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class ApiTopsearchWechatServiceImpl extends ServiceImpl<ApiTopsearchWechatMapper, ApiTopsearchWechat> implements ApiTopsearchWechatService {
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue