开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情
简介
本文主要通过第三方平台接口,根据个人所需进行包装整理,输出个人所需的文案效果。
接口平台
在这里我们主要使用天行数据平台提供接口支持,平台主要提供各类新闻、早安晚安短语、神回复段子等接口,可根据个人喜欢进行注册使用。平台有提供免费接口,有意向的可以自己注册一个账号看看。
服务搭建
使用idea创建一个spring-boot项目,这里我们使用的是2.2.5.RELEASE版本:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
该项目主要通过本地定义接口,通过http协议调用第三方API接口获取相应数据,根据个人需要做号数据转换,主要使用maven做依赖管理,pom文件模块依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- lombok提高开发效率 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<!-- http服务包,调用第三方api -->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<!-- json转换包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.80</version>
</dependency>
接口定义与实现
- 创建
TianXingController控制器接口,这里以神回复、it新闻资讯为例:
@RestController
@RequestMapping("/tianxing")
public class TianXingController {
@Autowired
private ITianXingService tianXingService;
@GetMapping("/godreply")
public String godReply() {
return tianXingService.godReply();
}
@GetMapping("/itnews")
public String itNews() {
return tianXingService.itNews();
}
}
ITianXingService接口定义:
public interface ITianXingService {
/**
* 神回复
* @return
*/
String godReply();
/**
* IT资讯
* @return
*/
String itNews();
}
- 天行
API接口地址信息:
public interface TxApiConstants {
// 注册后通过平台获取
String CZB_API_KEY = "7e3443****************0668";
/**
* 神回复
*/
String GOD_REPLY = "/godreply/index?key=" + CZB_API_KEY;
Integer NEWS_NUM = 10;
/**
* IT新闻
*/
String NEWS_TYPE_IT = "/it/index?key=" + CZB_API_KEY + "&num=%s";
}
-
根据自己需要,随便点击一个接口进去即可看到详细接口信息:
-
service接口实现:
@Slf4j
@Service
public class TianXingServiceImpl implements ITianXingService {
@Autowired
private TianXingConfig tianXingConfig;
@Override
public String godReply() {
TianXingResult tianXingResult = sendRequest(TxApiConstants.GOD_REPLY);
if (!tianXingResult.isSuccess()) {
return errorResult(tianXingResult);
}
TianXingGodReplyDetail godReplyDetail = JSONObject.parseObject(tianXingResult.getResult(), TianXingGodReplyDetail.class);
return godReplyDetail.getTitle() + "\n" + godReplyDetail.getContent();
}
@Override
public String itNews() {
TianXingResult tianXingResult = sendRequest(TxApiConstants.NEWS_TYPE_IT, TxApiConstants.NEWS_NUM);
return packageNewsResult(tianXingResult);
}
/**
* 调用天行api
*/
private TianXingResult sendRequest(String api, Object... params) {
HttpClient httpClient = new HttpClient();
// 构造api接口url及参数信息
HttpMethod httpMethod = new GetMethod(tianXingConfig.getApiUrl() + String.format(api, params));
try {
log.info("send tianxing request api:{}, params:{}", api, params);
int responseCode = httpClient.executeMethod(httpMethod);
if (responseCode != 200) {
TianXingResult.error("" + responseCode, "http error!");
}
// 返回数据处理
String responseBody = new String(httpMethod.getResponseBody());
log.info("send tianxing response:{}", responseBody);
TianXingResult tianXingResult = JSONObject.parseObject(responseBody, TianXingResult.class);
return tianXingResult;
}
catch (IOException e) {
log.error(api, e);
return TianXingResult.error("error!");
}
}
/**
* 新闻接口数据包装
*/
private String packageNewsResult(TianXingResult tianXingResult) {
if (!tianXingResult.isSuccess()) {
return errorResult(tianXingResult);
}
TianXingNewsPageResult tianXingPageResult = JSONObject.parseObject(tianXingResult.getResult(), TianXingNewsPageResult.class);
StringBuilder sb = new StringBuilder();
List<TianXingNewsDetail> newslist = tianXingPageResult.getNewslist();
if (newslist == null) {
newslist = tianXingPageResult.getList();
if (newslist == null) {
return sb.toString();
}
}
// 构造返回自己所需的数据结构
for (int i = 1; i <= newslist.size(); i++) {
TianXingNewsDetail tianXingNewsDetail = newslist.get(i - 1);
sb.append(i + ".").append(tianXingNewsDetail.getTitle()).append("\n").append(tianXingNewsDetail.getUrl());
if (i < newslist.size()) {
sb.append("\n");
}
}
return sb.toString();
}
/**
* 错误信息包装
*/
private String errorResult(TianXingResult tianXingResult) {
return String.format("%s-%s", tianXingResult.getCode(), tianXingResult.getMsg());
}
}
接口测试
- 可以引入
spring-boot-starter-test包进行测试:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
引入@SpringBootTest注解,对接口进行单元测试:
@Slf4j
@SpringBootTest
class DailyRecommendApplicationTests {
@Autowired
private ITianXingService tianXingService;
@Test
void testTianXing() {
log.info("testTianXing it news result:{}", tianXingService.itNews());
log.info("testTianXing god reply result:{}", tianXingService.godReply());
}
}
测试结果:
- 使用
controller调用测试: 我们最初已经定义了controller入口,也可以根据controller入口使用postman工具进行直接调用获取结果,这里就不再做具体的演示。
备注
本文纯属娱乐使用,商业用途请谨慎遵循相应使用规范。
注:本文纯属个人喜好,无任何广告意图。