重新构建这个博客很大一个原因就是我想整合一下自己的订阅源,所以在一开始,我就想先把 rss 给加上去,但是看了几个 nuxt 的 module,感觉自定义都不是很高,而且文档也不怎么丰富。于是搜索了一下相关文章,找到了rss
这个库,准备自己写一下生成逻辑。
文档很明了
// 创建实例
const feed = new RSS({
title: 'site title',
description: 'some desc about you',
feed_url: 'https://site.com/rss.xml',
site_url: 'https://site.com'
})
const posts = [...]
// 将文章添加到feed
posts.forEach(post => {
feed.item({
title: post.title,
description: post.description,
...
})
})
// 生成xml字符串
const xml = feed.xml({ indent: true });
通过上述代码,就可以生成一串 rss.xml 文本,接下来,只需要通过 nuxt 的路由,为这串文本生成一个链接,让它可以访问即可。
rss.xml
路由在 nuxt 中,server 文件夹下可以创建服务端路由,其中/api
文件夹下会自动添加/api
前缀,/routes
文件夹则不会有前缀
这里我们要创建的路由路径为/rss.xml
,直接在~/server/routes/
文件夹下创建一个rss.xml.ts
文件即可
export default defineEventHandler((event) => {
const feed = new RSS({...});
const posts = await serverQueryContent(event, "/").find();
posts.forEach(p => {
// 添加需要的rss属性
feed.item({ ...p });
});
const feedStr = feed.xml({ indent: true });
event.node.res.setHeader("content-type", "text/xml");
// 返回xml响应
event.node.res.end(feedString);
})
此时,访问路由localhost:port/rss.xml
就可以看到生成的 rss 链接内容了
在 follow 中,想要认证你的订阅源,需要想 rss 中添加指定内容。有三种方式:在内容中添加、在 description 中添加、自定义标签
前两种很好解决,但可能会对其他 rss 工具的解析有影响(因为内容变了,使用自定义标签则可以做到不产生其他副作用
// 使用rss创建实例的时候,指定自定义的元素即可
const feed = new RSS({
title: 'xxx',
//...
custom_elements: [
follow_challenge: [
{ feedId: 'xxxxx' },
{ userId: 'xxxxx' }
]
]
})
添加完自定义标签内容之后,在 follow 上再点击认证就可以完成认证了!