我们将使用 Spring Boot 框架来快速构建API,并使用 Jsoup 库来解析HTML。
1. 环境准备
需要以下工具:
JDK 11+:确保已安装Java开发工具包。
Maven:用于管理项目依赖。
Spring Boot:用于快速构建API。
Jsoup:用于解析HTML。
可以通过 Spring Initializr 快速生成一个Spring Boot项目,选择以下依赖:
Spring Web:用于构建Web API。
Spring Boot DevTools:用于开发时热加载。
或者直接使用以下Maven依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.15.3</version> </dependency> </dependencies>
创建一个简单的Java类来表示TDK(Title、Description、Keywords)。
public class TDK { private String title; private String description; private String keywords; // Getters and Setters public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getKeywords() { return keywords; } public void setKeywords(String keywords) { this.keywords = keywords; } }
编写一个服务类来获取网站的TDK信息。
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.springframework.stereotype.Service; @Service public class TDKService { public TDK getTDK(String url) { try { // 使用Jsoup获取网页内容 Document doc = Jsoup.connect(url).get(); // 解析Title String title = doc.title(); // 解析Description Element descriptionElement = doc.select("meta[name=description]").first(); String description = descriptionElement != null ? descriptionElement.attr("content") : null; // 解析Keywords Element keywordsElement = doc.select("meta[name=keywords]").first(); String keywords = keywordsElement != null ? keywordsElement.attr("content") : null; // 返回TDK对象 TDK tdk = new TDK(); tdk.setTitle(title); tdk.setDescription(description); tdk.setKeywords(keywords); return tdk; } catch (Exception e) { throw new RuntimeException("Failed to fetch TDK: " + e.getMessage()); } } }
编写一个控制器类来处理HTTP请求。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class TDKController { @Autowired private TDKService tdkService; @GetMapping("/tdk") public TDK getTDK(@RequestParam String url) { if (url == null || url.isEmpty()) { throw new IllegalArgumentException("URL parameter is required"); } return tdkService.getTDK(url); } }
确保主应用程序类能够启动Spring Boot应用。
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class TDKApplication { public static void main(String[] args) { SpringApplication.run(TDKApplication.class, args); } }
在项目根目录下运行以下命令:
mvn spring-boot:run
或者直接在IDE中运行 TDKApplication
类。
启动后,访问以下URL来测试API:
http://localhost:8080/tdk?url=https://example.com
如果查询成功,API将返回以下JSON:
{ "title": "Example Domain", "description": "This is an example domain.", "keywords": "example, domain" }
如果URL参数缺失或无效,API将返回错误信息:
{ "error": "URL parameter is required" }
你可以将项目打包为JAR文件并部署到服务器上:
mvn clean package java -jar target/your-project-name.jar
URL验证:在实际应用中,建议对输入的URL进行验证,确保其格式正确。
异常处理:代码中已经包含了一些基本的异常处理,但你可以根据需求进一步扩展。
性能优化:如果查询的网站较大或响应较慢,可以考虑使用异步处理或设置超时。