├── .gitignore
├── README.md
├── ncov.war
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── wuliang
│ │ └── ncov
│ │ ├── NcovApplication.java
│ │ ├── ServletInitializer.java
│ │ ├── controller
│ │ ├── ConfirmedInformationController.java
│ │ ├── MaskController.java
│ │ ├── NcovMapsController.java
│ │ ├── NewsController.java
│ │ ├── RumorController.java
│ │ ├── SameRideController.java
│ │ ├── StatisticsController.java
│ │ └── VillageController.java
│ │ └── core
│ │ ├── ResponseMode
│ │ ├── Result.java
│ │ ├── ResultCode.java
│ │ └── ResultGenerator.java
│ │ ├── config
│ │ ├── CORSFilter.java
│ │ ├── SwaggerConfiguration.java
│ │ ├── TimeInterceptor.java
│ │ └── WebConfig.java
│ │ └── redis
│ │ ├── AbstractBaseRedisDao.java
│ │ ├── RedisConfig.java
│ │ ├── RedisDao.java
│ │ └── RedisDaoImpl.java
└── resources
│ └── application.yml
└── test
└── java
└── com
└── wuliang
└── ncov
└── NcovApplicationTests.java
/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | # 2019-nCov-api
5 | # 新冠肺炎api
6 |
7 | # 前言
8 | 本项目通过爬取腾讯、新浪、丁香园等疫情数据,获取新冠肺炎相关数据,并整合为api数据,做法简单粗暴,类似于端口转发。数据包含口罩预约、同乘车辆、疫情小区、数据分析、国内外详细数据、实时新闻动态、确诊人员信息流动轨迹、疫情谣言等。
9 | 当前接口部署到我自己的乞丐服务器上面的,可能速度有点慢,希望且用且珍惜。
10 |
11 |
12 | 接口文档浏览及测试:你的服务器ip+端口/doc.html#/home 例如:127.0.0.1:8080/doc.html
13 |
14 |
15 | 另外前期仓促之间也用flutter搞了个app,欢迎star https://github.com/LiangWuCode/2019-nCoV
16 |
17 |
18 |
19 | # 总体图
20 |
21 |
22 | # api说明
23 |
24 | **简介**:新冠肺炎api
25 |
26 |
27 | **HOST**:wuliang.art
28 |
29 |
30 | **联系人**:伍亮(qq:937743837(微信同))
31 |
32 |
33 | api名称如果包含数字,则表示返回的数据内容类似(但数据格式不一样),只是数据来源不一样,使用时甄选使用。有任何问题call
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | # 口罩信息
43 |
44 |
45 | ## 口罩预约相关信息
46 |
47 |
48 | **接口地址**:`/ncov/mask/gauzeMask`
49 |
50 |
51 | **请求方式**:`GET`
52 |
53 |
54 | **请求数据类型**:`*`
55 |
56 |
57 | **响应数据类型**:`*/*`
58 |
59 |
60 | **接口描述**:`获取相关城市的口罩预约信息`
61 |
62 |
63 |
64 | # 同乘车辆
65 |
66 |
67 | ## 查询同程车辆数据1
68 |
69 |
70 | **接口地址**:`/ncov/sameRide/getSameRide1`
71 |
72 |
73 | **请求方式**:`GET`
74 |
75 |
76 | **接口描述**:根据乘车日期或者是乘车车次返回相关车辆信息
77 |
78 |
79 | **请求参数**:
80 |
81 |
82 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
83 | | -------- | -------- | ----- | -------- | -------- | ------ |
84 | |date|date|query|false|string||
85 | |no|no|query|false|string||
86 |
87 |
88 | ## 查询同程车辆数据2
89 |
90 |
91 | **接口地址**:`/ncov/sameRide/getSameRide2`
92 |
93 |
94 | **请求方式**:`GET`
95 |
96 |
97 | **接口描述**:可根据起始日期、结束日期、车次、车站、车辆类型等查询车辆的相关数据信息。
98 |
99 |
100 | **请求参数**:
101 |
102 |
103 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
104 | | -------- | -------- | ----- | -------- | -------- | ------ |
105 | |endDate|endDate|query|false|string||
106 | |no|no|query|false|string||
107 | |page|page|query|false|integer(int32)||
108 | |position|position|query|false|string||
109 | |size|size|query|false|integer(int32)||
110 | |startDate|startDate|query|false|string||
111 | |type|type|query|false|integer(int32)||
112 |
113 |
114 |
115 | ## 获取所有同乘车辆数据
116 |
117 |
118 | **接口地址**:`/ncov/sameRide/getSameRideAll`
119 |
120 |
121 | **请求方式**:`GET`
122 |
123 |
124 | **接口描述**:获取所有的目前渠道报道出来车次,该接口返回数量较大,可能会缓慢,不建议频繁调取。
125 |
126 |
127 |
128 | # 小区数据
129 |
130 |
131 | ## 获取小区数据1
132 |
133 |
134 | **接口地址**:`/ncov/village/getVillage1`
135 |
136 |
137 | **请求方式**:`GET`
138 |
139 |
140 |
141 | **接口描述**:根据城市的名称获取当前城市确诊小区的信息。例如:西安
142 |
143 |
144 | **请求参数**:
145 |
146 |
147 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
148 | | -------- | -------- | ----- | -------- | -------- | ------ |
149 | |cityName|cityName|query|true|string||
150 |
151 |
152 | ## 获取小区数据2
153 |
154 |
155 | **接口地址**:`/ncov/village/getVillage2`
156 |
157 |
158 | **请求方式**:`GET`
159 |
160 |
161 | **接口描述**:根据城市的名称获取当前城市确诊小区的信息。例如:西安
162 |
163 |
164 | **请求参数**:
165 |
166 |
167 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
168 | | -------- | -------- | ----- | -------- | -------- | ------ |
169 | |cityName|cityName|query|true|string||
170 |
171 |
172 |
173 | ## 根据小区名称查询疫情小区
174 |
175 |
176 | **接口地址**:`/ncov/village/getVillageByCommunityName`
177 |
178 |
179 | **请求方式**:`GET`
180 |
181 |
182 | **接口描述**:根据小区的名称进行模糊搜索,查询疫情小区
183 |
184 |
185 | **请求参数**:
186 |
187 |
188 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
189 | | -------- | -------- | ----- | -------- | -------- | ------ |
190 | |communityName|communityName|query|true|string||
191 |
192 |
193 |
194 | # 数据分析
195 |
196 |
197 | ## 每日数据分析
198 |
199 |
200 | **接口地址**:`/ncov/dnalysis/everyday`
201 |
202 |
203 | **请求方式**:`GET`
204 |
205 |
206 | **接口描述**:对每日的疫情数据进行解读,以及以后趋势的分析,返回的为一个图片链接。
207 |
208 |
209 |
210 | ## 疫情地图数据
211 |
212 |
213 | **接口地址**:`/ncov/dnalysis/ncovMaps`
214 |
215 |
216 | **请求方式**:`GET`
217 |
218 |
219 | **接口描述**:该接口,主要是对于疫情的一些图表信息的整理,方便于进行图表的渲染展示,例如柱状图、折线图等等。
220 |
221 |
222 |
223 | # 数据统计
224 |
225 |
226 | ## 根据省市名称获取当前市区历史数据
227 |
228 |
229 | **接口地址**:`/ncov/statistics/getCityHistoryList`
230 |
231 |
232 | **请求方式**:`GET`
233 |
234 | **接口描述**:根据省的名称、市的名称获取当前市区的历史数据。
235 |
236 |
237 | **请求参数**:
238 |
239 |
240 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
241 | | -------- | -------- | ----- | -------- | -------- | ------ |
242 | |cityName|cityName|query|true|string||
243 | |provinceName|provinceName|query|true|string||
244 |
245 |
246 | ## 根据市级名称获取县区级数据
247 |
248 |
249 | **接口地址**:`/ncov/statistics/getCountyList`
250 |
251 |
252 | **请求方式**:`GET`
253 |
254 |
255 | **接口描述**:根据市区的名称获取县级历史数据,该接口可能存在数据缺失的情况。例如:安康
256 |
257 |
258 | **请求参数**:
259 |
260 |
261 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
262 | | -------- | -------- | ----- | -------- | -------- | ------ |
263 | |cityName|cityName|query|true|string||
264 |
265 |
266 | ## 根据省的名称获取该省的历史数据
267 |
268 |
269 | **接口地址**:`/ncov/statistics/getProvinceHistoryList`
270 |
271 |
272 | **请求方式**:`GET`
273 |
274 |
275 | **接口描述**:
276 |
277 |
278 | **请求参数**:根据省的名称获取该省的历史数据。例如:陕西
279 |
280 |
281 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
282 | | -------- | -------- | ----- | -------- | -------- | ------ |
283 | |provinceName|provinceName|query|true|string||
284 |
285 |
286 | ## 数据统计1
287 |
288 |
289 | **接口地址**:`/ncov/statistics/totalDataOne`
290 |
291 |
292 | **请求方式**:`GET`
293 |
294 |
295 | **接口描述**:获取国内以及国外的相关疫情数据。
296 |
297 |
298 | **请求参数**:
299 |
300 |
301 | ## 数据统计3
302 |
303 |
304 | **接口地址**:`/ncov/statistics/totalDataThree`
305 |
306 |
307 | **请求方式**:`GET`
308 |
309 |
310 | **接口描述**:取国内以及国外的相关疫情数据。
311 |
312 |
313 | ## 数据统计2
314 |
315 |
316 | **接口地址**:`/ncov/statistics/totalDataTwo`
317 |
318 |
319 | **请求方式**:`GET`
320 |
321 |
322 |
323 | **接口描述**:取国内以及国外的相关疫情数据。
324 |
325 |
326 |
327 | # 新闻数据
328 |
329 |
330 | ## 根据市的名称获取该市的新闻信息
331 |
332 |
333 | **接口地址**:`/ncov/news/getCityNewsList`
334 |
335 |
336 | **请求方式**:`GET`
337 |
338 |
339 | **接口描述**:获取当前市区的新闻,根据市的名称。例如:安康
340 |
341 |
342 | **请求参数**:
343 |
344 |
345 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
346 | | -------- | -------- | ----- | -------- | -------- | ------ |
347 | |cityName|cityName|query|true|string||
348 |
349 | ## 关于疫情百科知识 (检查诊断)
350 |
351 |
352 | **接口地址**:`/ncov/news/getDiagnoseList`
353 |
354 |
355 | **请求方式**:`GET`
356 |
357 |
358 |
359 | **接口描述**:
360 |
361 |
362 | **请求参数**:
363 |
364 |
365 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
366 | | -------- | -------- | ----- | -------- | -------- | ------ |
367 | |count|count|query|true|integer(int32)||
368 |
369 | ## 关于疫情百科知识 (预防指南)
370 |
371 |
372 | **接口地址**:`/ncov/news/getGuideList`
373 |
374 |
375 | **请求方式**:`GET`
376 |
377 |
378 |
379 | **接口描述**:
380 |
381 |
382 | **请求参数**:
383 |
384 |
385 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
386 | | -------- | -------- | ----- | -------- | -------- | ------ |
387 | |count|count|query|true|integer(int32)||
388 |
389 |
390 | # 确诊信息
391 |
392 |
393 | ## 根据省名称,获取确诊人员信息
394 |
395 |
396 | **接口地址**:`/ncov/confirmedInformation/getGuideListByProvinceName`
397 |
398 |
399 | **请求方式**:`GET`
400 |
401 |
402 | **接口描述**:查询当前省,确证人员的信息,包括人员轨迹等。
403 |
404 |
405 | **请求参数**:
406 |
407 |
408 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
409 | | -------- | -------- | ----- | -------- | -------- | ------ |
410 | |num|num|query|true|integer(int32)||
411 | |page|page|query|true|integer(int32)||
412 | |provinceName|provinceName|query|true|string||
413 |
414 |
415 | ## 根据省市名称,获取当前市确诊人员信息
416 |
417 |
418 | **接口地址**:`/ncov/confirmedInformation/getGuideListByProvinceNameAndCityName`
419 |
420 |
421 | **请求方式**:`GET`
422 |
423 |
424 | **接口描述**:查询当前省,确证人员的信息,包括人员轨迹等。
425 |
426 |
427 | **请求参数**:
428 |
429 |
430 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
431 | | -------- | -------- | ----- | -------- | -------- | ------ |
432 | |cityName|cityName|query|true|string||
433 | |page|page|query|true|integer(int32)||
434 | |provinceName|provinceName|query|true|string||
435 |
436 |
437 | # 谣言
438 |
439 |
440 | ## 根据谣言id获取谣言详情
441 |
442 |
443 | **接口地址**:`/ncov/rumor/getRumorDetail`
444 |
445 |
446 | **请求方式**:`GET`
447 |
448 | **接口描述**:根据谣言接口列表,返回的数据的id,查询当前谣言的具体信息。
449 |
450 |
451 | **请求参数**:
452 |
453 |
454 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
455 | | -------- | -------- | ----- | -------- | -------- | ------ |
456 | |id|id|query|true|string||
457 |
458 |
459 | ## 谣言数据列表
460 |
461 |
462 | **接口地址**:`/ncov/rumor/getRumorList`
463 |
464 |
465 | **请求方式**:`GET`
466 |
467 | **接口描述**:获取谣言列表数据。
468 |
469 |
470 | **请求参数**:
471 |
472 |
473 | | 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
474 | | -------- | -------- | ----- | -------- | -------- | ------ |
475 | |page|page|query|true|integer(int32)||
476 |
477 |
478 | # 尾巴
479 | 在家这段时间是大学毕业以后最闲的了,等着复工,也是由于闲才来做一些自己喜欢的东西,写写代码,吹吹牛逼,
480 | 陪陪家人,准备准备面试,疫情结束以后肯定会重新换工作,希望一切顺利吧。
481 | 疫情定会结束,曙光就在前方。武汉加油!中国加油!
482 |
483 |
484 | **另数据为自己爬取的,所以不保证数据的有效性,合法性,如涉及到侵权,请联系删除,定做妥善处理。**
485 |
--------------------------------------------------------------------------------
/ncov.war:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LiangWuCode/2019-nCov-api/ba01e17b097d56371fc87efe3c1982b4d559fde1/ncov.war
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 2.2.4.RELEASE
9 |
10 |
11 | com.wuliang
12 | ncov
13 | 0.0.1-SNAPSHOT
14 | war
15 | ncov
16 | Demo project for Spring Boot
17 |
18 |
19 | 1.8
20 |
21 |
22 |
23 |
24 | org.springframework.boot
25 | spring-boot-starter-web
26 |
27 |
28 |
29 | org.springframework.boot
30 | spring-boot-devtools
31 | runtime
32 | true
33 |
34 |
35 | org.projectlombok
36 | lombok
37 | true
38 |
39 |
40 | org.springframework.boot
41 | spring-boot-starter-tomcat
42 | provided
43 |
44 |
45 | org.jsoup
46 | jsoup
47 | 1.12.1
48 |
49 |
50 |
51 | cn.hutool
52 | hutool-all
53 | 5.1.2
54 |
55 |
56 |
57 | io.springfox
58 | springfox-swagger2
59 | 2.9.2
60 |
61 |
62 | com.github.xiaoymin
63 | knife4j-spring-boot-starter
64 | 2.0.1
65 |
66 |
67 |
68 | com.alibaba
69 | fastjson
70 | 1.2.62
71 |
72 |
73 | org.springframework.boot
74 | spring-boot-starter-data-redis
75 |
76 |
77 | org.springframework.boot
78 | spring-boot-starter-test
79 | test
80 |
81 |
82 | org.junit.vintage
83 | junit-vintage-engine
84 |
85 |
86 |
87 |
88 | org.springframework.boot
89 | spring-boot-starter-test
90 |
91 |
92 |
93 |
94 |
95 |
96 | org.springframework.boot
97 | spring-boot-maven-plugin
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/src/main/java/com/wuliang/ncov/NcovApplication.java:
--------------------------------------------------------------------------------
1 | package com.wuliang.ncov;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 | import org.springframework.cache.annotation.EnableCaching;
6 | import springfox.documentation.swagger2.annotations.EnableSwagger2;
7 |
8 | @SpringBootApplication
9 | @EnableSwagger2
10 | @EnableCaching
11 | public class NcovApplication {
12 |
13 | public static void main(String[] args) {
14 | SpringApplication.run(NcovApplication.class, args);
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/wuliang/ncov/ServletInitializer.java:
--------------------------------------------------------------------------------
1 | package com.wuliang.ncov;
2 |
3 | import org.springframework.boot.builder.SpringApplicationBuilder;
4 | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
5 |
6 | public class ServletInitializer extends SpringBootServletInitializer {
7 |
8 | @Override
9 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
10 | return application.sources(NcovApplication.class);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/wuliang/ncov/controller/ConfirmedInformationController.java:
--------------------------------------------------------------------------------
1 | package com.wuliang.ncov.controller;
2 |
3 | import cn.hutool.json.JSONUtil;
4 | import com.alibaba.fastjson.JSON;
5 | import com.wuliang.ncov.core.ResponseMode.Result;
6 | import com.wuliang.ncov.core.ResponseMode.ResultGenerator;
7 | import io.swagger.annotations.Api;
8 | import io.swagger.annotations.ApiOperation;
9 | import org.jsoup.Jsoup;
10 | import org.jsoup.nodes.Document;
11 | import org.springframework.web.bind.annotation.GetMapping;
12 | import org.springframework.web.bind.annotation.RequestMapping;
13 | import org.springframework.web.bind.annotation.RequestParam;
14 | import org.springframework.web.bind.annotation.RestController;
15 |
16 | import java.io.IOException;
17 |
18 | /**
19 | * 确诊信息
20 | * 伍亮
21 | */
22 | @RequestMapping("/confirmedInformation")
23 | @RestController
24 | @Api(value = "/confirmedInformation", tags = "确诊信息")
25 | public class ConfirmedInformationController {
26 |
27 | /**
28 | * 数据来源于夸克
29 | * 根据省市名称,获取当前市确诊人员信息
30 | *
31 | * @return
32 | */
33 | @GetMapping("/getGuideListByProvinceNameAndCityName")
34 | @ApiOperation("根据省市名称,获取当前市确诊人员信息")
35 | public Result getGuideListByProvinceNameAndCityName(@RequestParam("provinceName") String provinceName, @RequestParam("cityName") String cityName, @RequestParam("page") Integer page) {
36 | Object res = "";
37 | try {
38 | Document doc = Jsoup.connect("https://m.sm.cn/api/rest?format=json&from=&method=Maskbuy.areaData&prov=" + provinceName + "&city=" + cityName + "&page=" + page)
39 | .ignoreContentType(true)
40 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
41 | .header("content-type", "application/json")
42 | .timeout(5000).get();
43 | res = JSONUtil.parseObj(doc.body().html()).get("data");
44 | } catch (IOException e) {
45 | e.printStackTrace();
46 | }
47 | return ResultGenerator.genSuccessResult(JSON.parse(res.toString()));
48 | }
49 |
50 | /**
51 | * 数据来源于腾讯
52 | * 根据省名称,获取确诊人员信息
53 | *
54 | * @return
55 | */
56 | @GetMapping("/getGuideListByProvinceName")
57 | @ApiOperation("根据省名称,获取确诊人员信息")
58 | public Result getGuideList(@RequestParam("provinceName") String provinceName, @RequestParam("num") Integer num, @RequestParam("page") Integer page) {
59 | Object res = "";
60 | try {
61 | Document doc = Jsoup.connect("https://pacaio.match.qq.com/virus/trackList?province=" + provinceName + "&num=" + num + "&page=" + page)
62 | .ignoreContentType(true)
63 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
64 | .header("content-type", "application/json")
65 | .timeout(5000).get();
66 | res = JSONUtil.parseObj(doc.body().html()).get("data");
67 | } catch (IOException e) {
68 | e.printStackTrace();
69 | }
70 | return ResultGenerator.genSuccessResult(JSON.parse(res.toString()));
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/src/main/java/com/wuliang/ncov/controller/MaskController.java:
--------------------------------------------------------------------------------
1 | package com.wuliang.ncov.controller;
2 |
3 | import cn.hutool.json.JSONUtil;
4 | import com.alibaba.fastjson.JSON;
5 | import com.alibaba.fastjson.JSONArray;
6 | import com.wuliang.ncov.core.ResponseMode.Result;
7 | import com.wuliang.ncov.core.ResponseMode.ResultGenerator;
8 | import io.swagger.annotations.Api;
9 | import io.swagger.annotations.ApiOperation;
10 | import org.jsoup.Jsoup;
11 | import org.jsoup.nodes.Document;
12 | import org.springframework.web.bind.annotation.GetMapping;
13 | import org.springframework.web.bind.annotation.RequestMapping;
14 | import org.springframework.web.bind.annotation.RestController;
15 |
16 | import java.io.IOException;
17 |
18 | /**
19 | * 口罩相关信息
20 | * 伍亮
21 | */
22 | @RequestMapping("/mask")
23 | @RestController
24 | @Api(value = "/mask", tags = "口罩信息")
25 | public class MaskController {
26 |
27 |
28 | /**
29 | * 口罩预约相关信息
30 | *
31 | * @return
32 | */
33 | @GetMapping("/gauzeMask")
34 | @ApiOperation("口罩预约相关信息")
35 | public Result gauzeMask() {
36 | Object res = "";
37 | try {
38 | Document doc = Jsoup.connect("https://m.sm.cn/api/rest?format=json&uc_param_str=gicp&method=Maskbuy.mask")
39 | .ignoreContentType(true)
40 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
41 | .header("content-type", "application/json")
42 | .timeout(5000).get();
43 | res = JSONArray.parse(JSONUtil.parseObj(JSONUtil.parseObj(doc.body().html()).get("data")).get("list").toString());
44 | } catch (IOException e) {
45 | e.printStackTrace();
46 | }
47 | return ResultGenerator.genSuccessResult(JSON.parse(res.toString()));
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/main/java/com/wuliang/ncov/controller/NcovMapsController.java:
--------------------------------------------------------------------------------
1 | package com.wuliang.ncov.controller;
2 |
3 | import cn.hutool.json.JSONUtil;
4 | import com.alibaba.fastjson.JSON;
5 | import com.wuliang.ncov.core.ResponseMode.Result;
6 | import com.wuliang.ncov.core.ResponseMode.ResultGenerator;
7 | import io.swagger.annotations.Api;
8 | import io.swagger.annotations.ApiOperation;
9 | import org.jsoup.Jsoup;
10 | import org.jsoup.nodes.Document;
11 | import org.springframework.web.bind.annotation.GetMapping;
12 | import org.springframework.web.bind.annotation.RequestMapping;
13 | import org.springframework.web.bind.annotation.RestController;
14 |
15 | import java.io.IOException;
16 |
17 | /**
18 | * 数据分析
19 | * 伍亮
20 | */
21 | @RequestMapping("/dnalysis")
22 | @RestController
23 | @Api(value = "/dnalysis", tags = "数据分析")
24 | public class NcovMapsController {
25 | /**
26 | * 数据来源于腾讯
27 | * 每日数据分析
28 | *
29 | * @return
30 | */
31 | @GetMapping("/everyday")
32 | @ApiOperation("每日数据分析")
33 | public Result everyday() {
34 | Object res = "";
35 | try {
36 | Document doc = Jsoup.connect("https://eyesight.news.qq.com/ncov/alldata")
37 | .ignoreContentType(true)
38 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
39 | .header("content-type", "application/json")
40 | .timeout(5000).get();
41 | res = JSONUtil.parseObj(doc.body().html()).get("data");
42 | } catch (IOException e) {
43 | e.printStackTrace();
44 | }
45 | return ResultGenerator.genSuccessResult(JSON.parse(res.toString()));
46 | }
47 |
48 | /**
49 | * 数据来源于第三方
50 | * 疫情地图数据
51 | *
52 | * @return
53 | */
54 | @GetMapping("/ncovMaps")
55 | @ApiOperation("疫情地图数据")
56 | public Result ncovMaps() {
57 | Object res = "";
58 | try {
59 | Document doc = Jsoup.connect("http://app.21jingji.com/html/2020yiqing/json/trend.json?19")
60 | .ignoreContentType(true)
61 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
62 | .header("content-type", "application/json")
63 | .timeout(5000).get();
64 | res = JSONUtil.parseObj(doc.body().html());
65 | } catch (IOException e) {
66 | e.printStackTrace();
67 | }
68 | return ResultGenerator.genSuccessResult(res);
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/main/java/com/wuliang/ncov/controller/NewsController.java:
--------------------------------------------------------------------------------
1 | package com.wuliang.ncov.controller;
2 |
3 | import cn.hutool.core.text.UnicodeUtil;
4 | import cn.hutool.core.util.CharsetUtil;
5 | import cn.hutool.core.util.StrUtil;
6 | import cn.hutool.http.HttpUtil;
7 | import cn.hutool.json.JSONUtil;
8 | import com.alibaba.fastjson.JSON;
9 | import com.wuliang.ncov.core.ResponseMode.Result;
10 | import com.wuliang.ncov.core.ResponseMode.ResultGenerator;
11 | import io.swagger.annotations.Api;
12 | import io.swagger.annotations.ApiOperation;
13 | import org.jsoup.Jsoup;
14 | import org.jsoup.nodes.Document;
15 | import org.springframework.web.bind.annotation.GetMapping;
16 | import org.springframework.web.bind.annotation.RequestMapping;
17 | import org.springframework.web.bind.annotation.RequestParam;
18 | import org.springframework.web.bind.annotation.RestController;
19 |
20 | import java.io.IOException;
21 |
22 | /**
23 | * 新闻数据
24 | * 伍亮
25 | */
26 | @RequestMapping("/news")
27 | @RestController
28 | @Api(value = "/news", tags = "新闻数据")
29 | public class NewsController {
30 | /**
31 | * 数据来源于夸克
32 | * 根据市的名称获取该市的新闻信息
33 | *
34 | * @return
35 | */
36 | @GetMapping("/getCityNewsList")
37 | @ApiOperation("根据市的名称获取该市的新闻信息")
38 | public Result getCityNewsList(@RequestParam("cityName") String cityName) {
39 | String result2 = HttpUtil.get("https://m.sm.cn/api/rest?method=yiqing.getZixun&uc_param_str=gi&city=" + cityName, CharsetUtil.CHARSET_UTF_8);
40 | return ResultGenerator.genSuccessResult(JSONUtil.parse(UnicodeUtil.toString(result2)));
41 | }
42 |
43 | /**
44 | * 数据来源于腾讯
45 | * 关于疫情百科知识 (检查诊断)
46 | *
47 | * @return
48 | */
49 | @GetMapping("/getDiagnoseList")
50 | @ApiOperation("关于疫情百科知识 (检查诊断)")
51 | public Result getDiagnoseList(@RequestParam("count") Integer count) {
52 | String res = "";
53 | try {
54 | Document doc = Jsoup.connect("https://h5.baike.qq.com/api/jsonp/GetDocsByTag?callback=data&appid=2000000000000050&adtag=txxw.op.fybox&name=94700&count=" + count)
55 | .ignoreContentType(true)
56 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
57 | .header("content-type", "application/json")
58 | .timeout(5000).get();
59 | String newsHeadlines = StrUtil.removePrefix(doc.body().html(), "data(");
60 | newsHeadlines = StrUtil.removeSuffix(newsHeadlines, ")");
61 | res = newsHeadlines;
62 | } catch (IOException e) {
63 | e.printStackTrace();
64 | }
65 | return ResultGenerator.genSuccessResult(JSON.parse(res));
66 | }
67 |
68 |
69 | /**
70 | * 数据来源于腾讯
71 | * 关于疫情百科知识 (预防指南)
72 | *
73 | * @return
74 | */
75 | @GetMapping("/getGuideList")
76 | @ApiOperation("关于疫情百科知识 (预防指南)")
77 | public Result getGuideList(@RequestParam("count") Integer count) {
78 | String res = "";
79 | try {
80 | Document doc = Jsoup.connect("https://h5.baike.qq.com/api/jsonp/GetDocsByTag?callback=data&appid=2000000000000050&adtag=txxw.op.fybox&name=94699&count=" + count)
81 | .ignoreContentType(true)
82 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
83 | .header("content-type", "application/json")
84 | .timeout(5000).get();
85 | String newsHeadlines = StrUtil.removePrefix(doc.body().html(), "data(");
86 | newsHeadlines = StrUtil.removeSuffix(newsHeadlines, ")");
87 | res = newsHeadlines;
88 | } catch (IOException e) {
89 | e.printStackTrace();
90 | }
91 | return ResultGenerator.genSuccessResult(JSON.parse(res));
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/src/main/java/com/wuliang/ncov/controller/RumorController.java:
--------------------------------------------------------------------------------
1 | package com.wuliang.ncov.controller;
2 |
3 | import cn.hutool.json.JSONUtil;
4 | import com.alibaba.fastjson.JSON;
5 | import com.wuliang.ncov.core.ResponseMode.Result;
6 | import com.wuliang.ncov.core.ResponseMode.ResultGenerator;
7 | import io.swagger.annotations.Api;
8 | import io.swagger.annotations.ApiOperation;
9 | import org.jsoup.Jsoup;
10 | import org.jsoup.nodes.Document;
11 | import org.springframework.web.bind.annotation.GetMapping;
12 | import org.springframework.web.bind.annotation.RequestMapping;
13 | import org.springframework.web.bind.annotation.RequestParam;
14 | import org.springframework.web.bind.annotation.RestController;
15 |
16 | import java.io.IOException;
17 |
18 | /**
19 | * 谣言
20 | * 伍亮
21 | */
22 | @RequestMapping("/rumor")
23 | @RestController
24 | @Api(value = "/rumor", tags = "谣言")
25 | public class RumorController {
26 | /**
27 | * 数据来源于腾讯
28 | * 谣言数据列表
29 | *
30 | * @return
31 | */
32 | @GetMapping("/getRumorList")
33 | @ApiOperation("谣言数据列表")
34 | public Result getRumorList(@RequestParam("page") Integer page) {
35 | Object res="";
36 | try {
37 | Document doc = Jsoup.connect("https://vp.fact.qq.com/loadmore?page="+page)
38 | .ignoreContentType(true)
39 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
40 | .header("content-type", "application/json")
41 | .timeout(5000).get();
42 | res = JSONUtil.parseObj(doc.body().html()).get("content");
43 | } catch (IOException e) {
44 | e.printStackTrace();
45 | }
46 | return ResultGenerator.genSuccessResult(JSON.parse(res.toString()));
47 | }
48 |
49 | /**
50 | * 数据来源于腾讯
51 | * 谣言数据列表
52 | *
53 | * @return
54 | */
55 | @GetMapping("/getRumorDetail")
56 | @ApiOperation("根据谣言id获取谣言详情")
57 | public Result getRumorDetail(@RequestParam("id") String id) {
58 | Object res="";
59 | try {
60 | Document doc = Jsoup.connect("https://vp.fact.qq.com/miniArtData?id="+id)
61 | .ignoreContentType(true)
62 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
63 | .header("content-type", "application/json")
64 | .timeout(5000).get();
65 | res = JSONUtil.parseObj(doc.body().html()).get("content");
66 | } catch (IOException e) {
67 | e.printStackTrace();
68 | }
69 | return ResultGenerator.genSuccessResult(JSON.parse(res.toString()));
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/src/main/java/com/wuliang/ncov/controller/SameRideController.java:
--------------------------------------------------------------------------------
1 | package com.wuliang.ncov.controller;
2 |
3 | import cn.hutool.core.util.StrUtil;
4 | import cn.hutool.json.JSONObject;
5 | import cn.hutool.json.JSONUtil;
6 | import com.alibaba.fastjson.JSON;
7 | import com.alibaba.fastjson.JSONArray;
8 | import com.wuliang.ncov.core.ResponseMode.Result;
9 | import com.wuliang.ncov.core.ResponseMode.ResultGenerator;
10 | import io.swagger.annotations.Api;
11 | import io.swagger.annotations.ApiOperation;
12 | import org.jsoup.Jsoup;
13 | import org.jsoup.nodes.Document;
14 | import org.springframework.web.bind.annotation.GetMapping;
15 | import org.springframework.web.bind.annotation.RequestMapping;
16 | import org.springframework.web.bind.annotation.RequestParam;
17 | import org.springframework.web.bind.annotation.RestController;
18 |
19 | import java.io.IOException;
20 | import java.util.ArrayList;
21 | import java.util.List;
22 | import java.util.Map;
23 |
24 | /**
25 | * 同乘车辆
26 | * 伍亮
27 | */
28 | @RequestMapping("/sameRide")
29 | @RestController
30 | @Api(value = "/sameRide", tags = "同乘车辆")
31 | public class SameRideController {
32 | /**
33 | * 数据来源于腾讯
34 | * 同乘车辆查询
35 | *
36 | * @return
37 | */
38 | @GetMapping("/getSameRideAll")
39 | @ApiOperation("获取所有同乘车辆数据")
40 | public Result getSameRideAll() {
41 | Object res = "";
42 | try {
43 | Document doc = Jsoup.connect("https://rl.inews.qq.com/taf/travelFront")
44 | .ignoreContentType(true)
45 | .maxBodySize(0)
46 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
47 | .header("content-type", "application/json")
48 | .timeout(5000).get();
49 | res = JSONUtil.parseObj(doc.body().html()).get("data");
50 | } catch (IOException e) {
51 | e.printStackTrace();
52 | }
53 | return ResultGenerator.genSuccessResult(JSON.parse(res.toString()));
54 | }
55 |
56 | /**
57 | * 数据来源于腾讯
58 | * 同乘车辆查询
59 | *
60 | * @return
61 | */
62 | @GetMapping("/getSameRide1")
63 | @ApiOperation("查询同程车辆数据1")
64 | public Result getSameRide(@RequestParam(value = "no", required = false) String no, @RequestParam(value = "date", required = false) String date) {
65 | Object res = "";
66 | JSONObject json = JSONUtil.createObj();
67 | try {
68 | Document doc = Jsoup.connect("https://rl.inews.qq.com/taf/travelFront")
69 | .ignoreContentType(true)
70 | .userAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)")
71 | .header("content-type", "application/json")
72 | .timeout(5000).get();
73 | List