孤独一人也没关系,只要能发自内心地爱着一个人,人生就会有救。哪怕不能和他生活在一起。——《1Q84》

要用 Java 实现一个简单的订阅网站,可以通过类似的方式来解析 RSS 数据并显示到页面上。我们可以使用 Spring Boot 来搭建 Web 服务器,使用 rome 这个库来解析 RSS 数据。

以下是一个 Java 版本的实现,使用 Spring Boot 和 rome 来实现订阅功能。

1. 创建 Spring Boot 项目

首先,你可以使用 Spring Initializr 创建一个 Spring Boot 项目:

  • 打开 Spring Initializr
  • 选择 Maven 项目、Java 版本和 Spring Boot 版本
  • 添加 Spring Web 依赖
  • 生成并下载项目,解压并导入到 IDE(如 IntelliJ IDEA 或 Eclipse)

或者,你也可以手动创建一个 Spring Boot 项目并添加依赖。

2. 添加依赖

pom.xml 文件中添加 rome 库的依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- Rome for RSS feed parsing -->
<dependency>
<groupId>com.rometools</groupId>
<artifactId>rome</artifactId>
<version>1.15.0</version>
</dependency>

<!-- Spring Boot Starter Thymeleaf (for rendering views) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>

3. 创建一个 Controller

创建一个 Controller 来处理 HTTP 请求并解析 RSS 数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.example.rsssubscription.controller;

import com.rometools.rome.feed.rss.Channel;
import com.rometools.rome.io.SyndFeedInput;
import com.rometools.rome.io.XmlReader;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.net.URL;
import java.util.List;

@Controller
@RequestMapping("/")
public class RSSController {

private static final String RSS_URL = "https://rsshub.app/bilibili/user/video/34830549";

@GetMapping
public String index() {
return "index";
}

@GetMapping("/subscribe")
public String subscribe(Model model) {
try {
// 解析 RSS 数据
URL url = new URL(RSS_URL);
SyndFeedInput input = new SyndFeedInput();
Channel channel = input.build(new XmlReader(url));

// 获取 RSS 条目(即视频信息)
List<com.rometools.rome.feed.rss.Entry> entries = channel.getEntries();
model.addAttribute("videos", entries);
} catch (Exception e) {
e.printStackTrace();
model.addAttribute("error", "无法获取视频订阅,请稍后再试。");
}
return "subscribe";
}
}

4. 创建 Thymeleaf 模板

src/main/resources/templates/ 文件夹下创建两个 HTML 模板文件:

index.html(首页)

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Bilibili 视频订阅</title>
</head>
<body>
<h1>欢迎订阅 Bilibili 用户视频</h1>
<p><a href="/subscribe">点击查看最新视频</a></p>
</body>
</html>

subscribe.html(订阅页面)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>订阅内容 - Bilibili 视频</title>
</head>
<body>
<h1>最新的视频列表</h1>

<div th:if="${error}">
<p th:text="${error}"></p>
</div>

<div th:if="${videos}">
<ul>
<li th:each="video : ${videos}">
<a th:href="@{${video.link}}" target="_blank" th:text="${video.title}"></a><br>
<span th:text="${video.publishedDate}"></span>
<p th:text="${video.description}"></p>
</li>
</ul>
</div>

<p><a href="/">返回首页</a></p>
</body>
</html>

5. 启动 Spring Boot 项目

在 IDE 中启动 Spring Boot 应用,或者在项目根目录运行以下命令:

1
mvn spring-boot:run

6. 访问页面

  • 打开浏览器访问 http://localhost:8080/,你将看到首页,点击 “点击查看最新视频” 链接。
  • 页面会跳转到订阅页面,显示最新的视频列表,包括视频标题、发布日期和简短描述,每个视频都可以点击跳转到 Bilibili 查看完整内容。

7. 总结

这个简单的订阅网站实现了一个功能,用户可以通过访问网站来查看指定 Bilibili 用户上传的最新视频。你可以根据需要进一步扩展这个功能,例如:

  • 定时刷新:定期更新视频列表。
  • 多个订阅源:支持多个 RSS 订阅源。
  • 美化界面:使用 CSS 或其他前端框架来优化页面样式。
  • 用户管理:支持用户自定义订阅 URL。

通过 Spring Boot 和 Rome 库,快速地实现了一个简单的 RSS 订阅网站。