diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java index 98217680..7fe4f8b4 100644 --- a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java +++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java @@ -35,6 +35,8 @@ public class ApiConst { public static final String TIANXING_TOPSEARCHWECHAT= "天行-微信热搜榜"; + public static final String TIANXING_TOPSEARCHBAIDU= "天行-百度热搜榜"; + @@ -66,7 +68,9 @@ public class ApiConst { 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"; + public static final String TIANXING_TOPSEARCHWECHAT_URL= "http://api.tianapi.com/wxhottopic/index"; + + public static final String TIANXING_TOPSEARCHBAIDU_URL= "http://api.tianapi.com/nethot/index"; diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/tianxing/TianXingBDRSFeignClient.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/tianxing/TianXingBDRSFeignClient.java new file mode 100644 index 00000000..ed84ba91 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/tianxing/TianXingBDRSFeignClient.java @@ -0,0 +1,26 @@ +package com.xjs.common.client.api.tianxing; + +import com.alibaba.fastjson.JSONObject; +import com.xjs.common.aop.ApiLog; +import com.xjs.common.client.factory.TianXingBDRSFeignFactory; +import com.xjs.common.client.factory.TianXingQWRSFeignFactory; +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远程调用api + * @author xiejs + * @since 2022-01-11 + */ +@FunctionalInterface +@FeignClient(name = "tianXingBDRS",url = TIANXING_TOPSEARCHBAIDU_URL,fallbackFactory = TianXingBDRSFeignFactory.class) +public interface TianXingBDRSFeignClient { + @GetMapping + @ApiLog(name = TIANXING_TOPSEARCHBAIDU, + url = TIANXING_TOPSEARCHBAIDU_URL, + method = "Get") + JSONObject topSearchApi(@RequestParam("key") String key); +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/tianxing/TianXingWXRSFeignClient.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/tianxing/TianXingWXRSFeignClient.java index 6a5b82c7..04d1ae34 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/tianxing/TianXingWXRSFeignClient.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/tianxing/TianXingWXRSFeignClient.java @@ -17,12 +17,12 @@ import static com.xjs.consts.ApiConst.*; */ @FunctionalInterface -@FeignClient(name = "tianXingWXRS",url = TIANXING_TOPSEARCHALLWECHAT_URL,fallbackFactory = TianXingWXRSFeignFactory.class) +@FeignClient(name = "tianXingWXRS",url = TIANXING_TOPSEARCHWECHAT_URL,fallbackFactory = TianXingWXRSFeignFactory.class) public interface TianXingWXRSFeignClient { @GetMapping @ApiLog(name = TIANXING_TOPSEARCHWECHAT, - url = TIANXING_TOPSEARCHALLWECHAT_URL, + url = TIANXING_TOPSEARCHWECHAT_URL, method = "Get") JSONObject topSearchApi(@RequestParam("key") String key); } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingBDRSFeignFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingBDRSFeignFactory.java new file mode 100644 index 00000000..ec4215cc --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingBDRSFeignFactory.java @@ -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.TianXingBDRSFeignClient; +import lombok.extern.log4j.Log4j2; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * @author xiejs + * @since 2022-01-11 + */ +@Component +@Log4j2 +public class TianXingBDRSFeignFactory implements FallbackFactory { + @Override + public TianXingBDRSFeignClient create(Throwable cause) { + log.error("api模块天行百度热搜榜服务调用失败:{},执行降级处理", cause.getMessage()); + return key -> { + JSONObject jsonObject = new JSONObject(); + //构建一个异常json给下层接口处理 + jsonObject.put("error", R.FAIL); + return jsonObject; + }; + } +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/controller/ApiTopSearchController.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/controller/ApiTopSearchController.java index a36b9029..8fa4ca80 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/controller/ApiTopSearchController.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/controller/ApiTopSearchController.java @@ -4,6 +4,7 @@ import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.security.annotation.RequiresLogin; import com.xjs.topsearch.domain.ApiTopsearchAllnetwork; +import com.xjs.topsearch.domain.ApiTopsearchBaidu; import com.xjs.topsearch.domain.ApiTopsearchWechat; import com.xjs.topsearch.factory.TopserachFactory; import io.swagger.annotations.Api; @@ -34,6 +35,8 @@ public class ApiTopSearchController { private TopserachFactory tianXingTopsearchAllnetworkFactory; @Autowired private TopserachFactory tianXingTopsearchWechatFactory; + @Autowired + private TopserachFactory tianXingTopsearchBaiduFactory; @GetMapping @@ -44,17 +47,18 @@ public class ApiTopSearchController { //获取全网热搜 List allnetworkList = tianXingTopsearchAllnetworkFactory.topSearchApi(); //获取微博热搜 - List wechatList = tianXingTopsearchWechatFactory.topSearchApi(); + //获取抖音热搜 //获取微信热搜 - + List wechatList = tianXingTopsearchWechatFactory.topSearchApi(); //获取百度热搜 - + List baiduList = tianXingTopsearchBaiduFactory.topSearchApi(); Map listHashMap = new HashMap<>(); listHashMap.put("allnetworkList", allnetworkList); listHashMap.put("wechatList", wechatList); + listHashMap.put("baiduList", baiduList); return AjaxResult.success(listHashMap); } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/domain/ApiTopsearchBaidu.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/domain/ApiTopsearchBaidu.java new file mode 100644 index 00000000..19a264a9 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/domain/ApiTopsearchBaidu.java @@ -0,0 +1,42 @@ +package com.xjs.topsearch.domain; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.ruoyi.common.core.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 天行api百度热搜榜 + * @author xiejs + * @since 2022-01-11 + */ +@Data +public class ApiTopsearchBaidu implements Serializable { + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 热搜话题 */ + @Excel(name = "热搜话题") + private String title; + + /** 简介描述 */ + @Excel(name = "简介描述") + private String digest; + + /** 热搜指数 */ + @Excel(name = "热搜指数") + private Long hotnum; + + /** 发展趋势 */ + @Excel(name = "发展趋势") + private String trend; + + @Excel(name = "创建时间",dateFormat = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/factory/impl/TianXingTopsearchBaiduFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/factory/impl/TianXingTopsearchBaiduFactory.java new file mode 100644 index 00000000..ec428b9f --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/factory/impl/TianXingTopsearchBaiduFactory.java @@ -0,0 +1,69 @@ +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.TianXingBDRSFeignClient; +import com.xjs.config.TianXingProperties; +import com.xjs.topsearch.domain.ApiTopsearchBaidu; +import com.xjs.topsearch.domain.ApiTopsearchWechat; +import com.xjs.topsearch.factory.TopserachFactory; +import com.xjs.topsearch.service.ApiTopsearchBaiduService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 天行百度热搜工厂实现 + * + * @author xiejs + * @since 2022-01-11 + */ +@Component +@Log4j2 +public class TianXingTopsearchBaiduFactory implements TopserachFactory { + @Autowired + private TianXingProperties tianXingProperties; + @Autowired + private ApiTopsearchBaiduService apiTopsearchBaiduService; + @Autowired + private TianXingBDRSFeignClient tianXingBDRSFeignClient; + + + @Override + public List topSearchApi() { + JSONObject jsonObject = tianXingBDRSFeignClient.topSearchApi(tianXingProperties.getKey()); + if (!jsonObject.containsKey("error")) { + if (jsonObject.getInteger("code") == HttpStatus.SUCCESS) { + JSONArray newslist = jsonObject.getJSONArray("newslist"); + List collect = newslist.stream().map(arrayJson -> { + ApiTopsearchBaidu apiTopsearchBaidu = new ApiTopsearchBaidu(); + JSONObject json = (JSONObject) arrayJson; + apiTopsearchBaidu.setTitle(json.getString("keyword")); + apiTopsearchBaidu.setDigest(json.getString("brief")); + apiTopsearchBaidu.setHotnum(json.getLong("index")); + apiTopsearchBaidu.setTrend(json.getString("trend")); + return apiTopsearchBaidu; + }).collect(Collectors.toList()); + log.info("百度热搜批量插入成功了嘛---" + apiTopsearchBaiduService.saveBatch(collect)); + return collect; + } else { + log.error("天行微信热搜服务调用成功,但返回异常"); + return new ArrayList<>(); + } + } else { + log.error("天行微信热搜服务调用失败,被降级!!"); + return new ArrayList<>(); + } + } + + + + + + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/mapper/ApiTopsearchBaiduMapper.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/mapper/ApiTopsearchBaiduMapper.java new file mode 100644 index 00000000..710c4e53 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/mapper/ApiTopsearchBaiduMapper.java @@ -0,0 +1,11 @@ +package com.xjs.topsearch.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xjs.topsearch.domain.ApiTopsearchBaidu; + +/** + * @author xiejs + * @since 2022-01-11 + */ +public interface ApiTopsearchBaiduMapper extends BaseMapper { +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/ApiTopsearchBaiduService.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/ApiTopsearchBaiduService.java new file mode 100644 index 00000000..7578a055 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/ApiTopsearchBaiduService.java @@ -0,0 +1,11 @@ +package com.xjs.topsearch.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xjs.topsearch.domain.ApiTopsearchBaidu; + +/** + * @author xiejs + * @since 2022-01-11 + */ +public interface ApiTopsearchBaiduService extends IService { +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/impl/ApiTopsearchBaiduServiceImpl.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/impl/ApiTopsearchBaiduServiceImpl.java new file mode 100644 index 00000000..862b2c0b --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/impl/ApiTopsearchBaiduServiceImpl.java @@ -0,0 +1,15 @@ +package com.xjs.topsearch.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xjs.topsearch.domain.ApiTopsearchBaidu; +import com.xjs.topsearch.mapper.ApiTopsearchBaiduMapper; +import com.xjs.topsearch.service.ApiTopsearchBaiduService; +import org.springframework.stereotype.Service; + +/** + * @author xiejs + * @since 2022-01-11 + */ +@Service +public class ApiTopsearchBaiduServiceImpl extends ServiceImpl implements ApiTopsearchBaiduService { +}