# experiment3
**Repository Path**: lirisheng/experiment3
## Basic Information
- **Project Name**: experiment3
- **Description**: 全球新型冠状病毒实时数据统计应用程序的设计与实现
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-05-12
- **Last Updated**: 2020-12-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 实验三 全球新型冠状病毒实时数据统计应用程序的设计与实现
## 一、 实验目的
1. 掌握使用Spring框架自带的RestTemplate工具类爬取网络数据;
2. 掌握使用Spring框架自带的计划任务功能;
3. 掌握使用Apache Commons CSV组件解释CSV文件;
4. 掌握Java 8的Stream API处理集合类型数据;
5. 了解使用模板引擎或前端框架展示数据。
## 二、 实验环境
1. JDK 1.8或更高版本
2. Maven 3.6+
3. IntelliJ IDEA
4. commons-csv 1.8+ ,vue ,axios ,echarts
## 三、实验任务
1. 编写爬取全球新型冠状病毒数据
1.导入解析csv文件的包
2.爬取数据
2. 编写用common-csv包来解析获取到的资源
3. 定时爬取全球新型冠状病毒数据
4. 启动时,自动爬取一次数据,用于初始化
5. 编写controller类
```java
@RequestMapping("/data")
@ResponseBody
public HashMap DataCos(@RequestParam("country") String coty, HttpServletResponse response) {
System.out.println("entry data");
System.out.println("cpty:"+coty);
HashMapmaps = new HashMap();
Iterable records =MyController.records;
int newWorldCount = 0;
int newCotyCount = 0;
int oldWorldCount = 0;
int oldCotyCount = 0;
HashMap citys = new HashMap();
for (CSVRecord record : records) {
newWorldCount = newWorldCount + Integer.parseInt(record.get(record.size() - 1));
oldWorldCount=oldWorldCount+Integer.parseInt(record.get(record.size() - 2));
if(record.get("Country/Region").equalsIgnoreCase(coty)){
newCotyCount=newCotyCount+ Integer.parseInt(record.get(record.size() - 1));
oldCotyCount=oldCotyCount+Integer.parseInt(record.get(record.size() - 2));
if(record.get("Province/State")!=null){
citys.put(record.get("Province/State"),Integer.parseInt(record.get(record.size() - 1)));
}
}
}
if(citys.isEmpty()){
citys.put("coty",newWorldCount);
}
maps.put("newWorldCount",newWorldCount);
maps.put("newCotyCount",newCotyCount);
maps.put("addWorldCount",newWorldCount-oldWorldCount);
maps.put("addCotyCount",newCotyCount-oldCotyCount);
maps.put("citys",citys);
//在使用axios请求的时候,返回的响应中一定要有下面的请求头
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Cache-Control","no-cache");
return maps;
}
```
6. 编写测试单元
7. 编写前端页面
## 四、实验结果截图
1. 由于使用前后端分离技术,所以直接访问vue.html(默认显示china数据)
2. 查询canada关于新型冠状病毒的数据
## 五、实验总结
1. 知道如何利用`common-csv`包去解析csv文件成集合类型,如果该vsc文件中的开头就是字段名,就不用去自己编写
字段去映射,而是该包就会自动去根据开头字段去映射数据,可以通过字段名或者索引去访问数据
```java
//解析reader中读取的csv文件
Iterable records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(reader);
//访问该数据
for(CSVRecord record : records){
System.out.println(record.get(record.size()-1));
System.out.println(record.get("Province/Stat"));
System.out.println(record.get("Country/Region"));
}
```
2. 知道定时执行任务
3. 学会了使用vue和axios(发送异步请求,接收json字符串)分离前后端,展示前端页面
4.知道使用echarts.js技术根据接收后端的json数据来画出该国的所有城市的确证案例的柱状图