|
1 | | -# plugin-feed |
| 1 | +# RSS 订阅插件 |
2 | 2 |
|
3 | 3 | Halo 2.0 的 RSS 订阅链接生成插件 |
4 | 4 |
|
5 | | -## 如何扩展 RSS 源 |
| 5 | +## 如何使用 |
6 | 6 |
|
7 | | -> 从 feed 插件 v1.4.0 版本开始,支持扩展 RSS 功能。 |
| 7 | +RSS 订阅插件提供了用于生成 RSS 订阅链接的功能, 默认提供了以下订阅链接类型: |
8 | 8 |
|
9 | | -`feed` 插件提供了扩展点,允许其他插件扩展 RSS 源。 |
10 | | - |
11 | | -### 步骤 1:在插件中引入 feed 依赖 |
12 | | - |
13 | | -在你的插件项目中添加 `feed` 插件的依赖: |
14 | | - |
15 | | -```groovy |
16 | | -dependencies { |
17 | | - // ... |
18 | | - compileOnly "run.halo.feed:api:{version}" |
19 | | -} |
20 | | -``` |
21 | | - |
22 | | -将 `{version}` 替换为实际的 `feed` 插件版本号。 |
23 | | - |
24 | | -### 步骤 2:实现 `RssRouteItem` 扩展点接口 |
25 | | - |
26 | | -创建一个类实现 `run.halo.feed.RssRouteItem` 接口,提供自定义的 RSS 数据源。例如: |
27 | | - |
28 | | -```java |
29 | | -public class MomentRssProvider implements RssRouteItem { |
30 | | - // 实现具体的 RSS 提供逻辑 |
31 | | -} |
32 | | -``` |
33 | | - |
34 | | -你可以参考 [PostRssProvider](./app/src/main/java/run/halo/feed/provider/PostRssProvider.java) 示例。 |
35 | | - |
36 | | -### 步骤 3:声明扩展点 |
37 | | - |
38 | | -在 `src/main/resources/extensions` |
39 | | -目录下,声明你的扩展。你可以参考 [ext-definition.yaml](app/src/main/resources/extensions/ext-definition.yaml) 文件来完成此步骤。 |
40 | | - |
41 | | -### 步骤 4:定义配置类并清理 RSS 缓存 |
42 | | - |
43 | | -在插件中定义一个配置类,使用 `@ConditionalOnClass` 注解确保只有在 `run.halo.feed.RssRouteItem` 类存在时才会创建对应的 |
44 | | -Bean。同时,定义事件监听器来清理缓存。 |
45 | | - |
46 | | -`@ConditionalOnClass` 注解只能使用 name 属性来指定类全限定名,不支持使用 value 属性。 |
47 | | - |
48 | | -示例代码: |
49 | | - |
50 | | -```java |
51 | | - |
52 | | -@Configuration |
53 | | -@ConditionalOnClass(name = "run.halo.feed.RssRouteItem") |
54 | | -@RequiredArgsConstructor |
55 | | -public class RssAutoConfiguration { |
56 | | - private final ApplicationEventPublisher eventPublisher; |
57 | | - |
58 | | - @Bean |
59 | | - public MomentRssProvider momentRssProvider() { |
60 | | - return new MomentRssProvider(); |
61 | | - } |
62 | | - |
63 | | - @Async |
64 | | - @EventListener({MomentUpdatedEvent.class, MomentDeletedEvent.class}) |
65 | | - public void onMomentUpdatedOrDeleted() { |
66 | | - var rule = CacheClearRule.forExact("/feed/moments/rss.xml"); |
67 | | - var event = RssCacheClearRequested.forRule(this, rule); |
68 | | - eventPublisher.publishEvent(event); |
69 | | - } |
70 | | -} |
71 | | -``` |
72 | | - |
73 | | -此配置确保了当 `RssRouteItem` 接口存在时,插件才会自动创建 `MomentRssProvider` 并监听相关事件来清理缓存。 |
74 | | - |
75 | | -### 步骤 5:声明插件依赖 |
76 | | - |
77 | | -在 `plugin.yaml` 文件中声明 `feed` 插件为可选依赖,确保当 `feed` 插件存在并启用时,插件能够自动注册 RSS 源。 |
78 | | - |
79 | | -```yaml |
80 | | -apiVersion: plugin.halo.run/v1alpha1 |
81 | | -kind: Plugin |
82 | | -metadata: |
83 | | - name: moment |
84 | | -spec: |
85 | | - pluginDependencies: |
86 | | - "PluginFeed?": ">=1.4.0" |
87 | | -``` |
88 | | -
|
89 | | -这样,当 `feed` 插件可用时,插件会自动注册自定义的 RSS 源。 |
90 | | - |
91 | | -## 开发环境 |
92 | | - |
93 | | -```bash |
94 | | -git clone [email protected]:halo-dev/plugin-feed.git |
95 | | -
|
96 | | -# 或者当你 fork 之后 |
97 | | -
|
98 | | -git clone [email protected]:{your_github_id}/plugin-feed.git |
99 | | -``` |
100 | | - |
101 | | -```bash |
102 | | -cd path/to/plugin-feed |
103 | | -``` |
104 | | - |
105 | | -```bash |
106 | | -# macOS / Linux |
107 | | -./gradlew build |
108 | | -
|
109 | | -# Windows |
110 | | -./gradlew.bat build |
111 | | -``` |
112 | | - |
113 | | -修改 Halo 配置文件: |
114 | | - |
115 | | -```yaml |
116 | | -halo: |
117 | | - plugin: |
118 | | - runtime-mode: development |
119 | | - classes-directories: |
120 | | - - "build/classes" |
121 | | - - "build/resources" |
122 | | - lib-directories: |
123 | | - - "libs" |
124 | | - fixedPluginPath: |
125 | | - - "/path/to/plugin-feed" |
126 | | -``` |
127 | | - |
128 | | -## 使用方式 |
| 9 | +1. 全站订阅:`/feed.xml` 或者 `/rss.xml` |
| 10 | +2. 按照分类订阅:`/feed/categories/{slug}.xml` |
| 11 | +3. 按照标签订阅文章:`/feed/tags/{name}.xml` |
| 12 | +4. 按照作者订阅:`/feed/authors/{name}.xml` |
129 | 13 |
|
130 | | -1. 在 [Releases](https://github.com/halo-dev/plugin-feed/releases) 下载最新的 JAR 文件。 |
131 | | -2. 在 Halo 后台的插件管理上传 JAR 文件进行安装。 |
| 14 | +可在插件列表中点击 RSS 插件进入插件设置页面,查看支持的订阅链接列表。 |
132 | 15 |
|
133 | | -目前提供了以下订阅链接类型: |
| 16 | +如果安装并启用了适配此 RSS 插件的其他插件,例如 [瞬间插件](https://www.halo.run/store/apps/app-SnwWDJ) 则会提供更多的订阅链接类型。 |
134 | 17 |
|
135 | | -1. 全站订阅:`/feed.xml` 或者 `/rss.xml` |
136 | | -2. 按照分类订阅(可以在插件设置中关闭):`/feed/categories/{slug}.xml` |
137 | | -3. 按照作者订阅(可以在插件设置中关闭):`/feed/authors/{name}.xml` |
| 18 | +你可以将订阅链接添加到 [Feedly](https://feedly.com/)、[Inoreader](https://www.inoreader.com/)、[Reeder](https://reederapp.com/)、[NetNewsWire](https://ranchero.com/netnewswire/)、[Follow](https://follow.is) |
| 19 | +等 RSS 订阅工具中,订阅你感兴趣的内容,但需要注意的是,链接中的 `{slug}`、`{name}` 等为占位符,需要替换为实际的类目名称,slug |
| 20 | +表示资源别名,name 表示资源唯一标识名。 |
0 commit comments