You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							97 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							97 lines
						
					
					
						
							2.9 KiB
						
					
					
				| package com.zc.business.controller; | |
| 
 | |
| import com.alibaba.fastjson.JSONArray; | |
| import com.alibaba.fastjson.JSONObject; | |
| import com.ruoyi.common.core.domain.AjaxResult; | |
| import com.zc.common.core.httpclient.OkHttp; | |
| import com.zc.common.core.httpclient.exception.HttpException; | |
| import io.swagger.annotations.Api; | |
| import io.swagger.annotations.ApiOperation; | |
| import okhttp3.Response; | |
| import org.jsoup.Jsoup; | |
| import org.jsoup.nodes.Document; | |
| import org.jsoup.nodes.Element; | |
| import org.jsoup.select.Elements; | |
| import org.springframework.web.bind.annotation.*; | |
| 
 | |
| import java.io.IOException; | |
| 
 | |
| /** | |
|  * 全国气象数据 | |
|  * | |
|  * @author xiepufeng | |
|  */ | |
| @Api(tags = "全国气象数据") | |
| @RestController | |
| @RequestMapping("/business/nmc") | |
| public class DcNmcController { | |
| 
 | |
|     /** | |
|      * 雷达数据 | |
|      */ | |
|     @ApiOperation("雷达数据") | |
|     @GetMapping("/radar") | |
|     public AjaxResult radar() throws HttpException, IOException { | |
| 
 | |
|         OkHttp okHttp = new OkHttp(); | |
|         Response response // 请求响应 | |
|                 = okHttp | |
|                 .url("http://www.nmc.cn/publish/radar/chinaall.html") // 请求地址 | |
|                 .get(); // 请求方法 | |
|  | |
|         String html = response.body().string(); | |
| 
 | |
|         return AjaxResult.success(parseHtmlContent(html)); | |
|     } | |
| 
 | |
| 
 | |
|     /** | |
|      * 解析HTML内容,提取特定标签下的数据。 | |
|      * | |
|      * @param htmlContent 要解析的HTML字符串。 | |
|      * @return 返回一个JSONArray对象,包含解析得到的数据项。如果无法找到指定内容或解析失败,则返回空数组。 | |
|      */ | |
|     private static JSONArray parseHtmlContent(String htmlContent) { | |
|         // 使用Jsoup解析HTML字符串 | |
|         Document doc = Jsoup.parse(htmlContent, "UTF-8"); | |
| 
 | |
|         // 尝试获取指定ID的元素 | |
|         Element tabContent = doc.getElementById("myTabContent"); | |
|         if (tabContent == null) { | |
|             // 如果找不到指定ID的元素,直接返回空数组 | |
|             return new JSONArray(); | |
|         } | |
| 
 | |
|         // 获取目标元素列表 | |
|         Elements targetElements = tabContent.child(0).child(0).children(); | |
| 
 | |
|         // 如果目标元素列表为空,同样返回空数组 | |
|         if (targetElements.isEmpty()) { | |
|             return new JSONArray(); | |
|         } | |
| 
 | |
|         // 初始化结果数组 | |
|         JSONArray jsonArray = new JSONArray(); | |
| 
 | |
|         // 遍历目标元素列表,提取每项数据 | |
|         for (Element targetElement : targetElements) { | |
|             // 提取"data-img"和"data-time"属性值 | |
|             String dataImg = targetElement.attr("data-img"); | |
|             String dataTime = targetElement.attr("data-time"); | |
| 
 | |
|             // 创建JSONObject,将提取到的数据项添加进去 | |
|             JSONObject jsonObject = new JSONObject(); | |
|             jsonObject.put("img", dataImg); | |
|             jsonObject.put("time", dataTime); | |
| 
 | |
|             // 将JSONObject添加到结果数组 | |
|             jsonArray.add(jsonObject); | |
|         } | |
| 
 | |
|         // 返回填充好的结果数组 | |
|         return jsonArray; | |
|     } | |
| 
 | |
| 
 | |
| 
 | |
| }
 | |
| 
 |