我自己使用过很多 RSS 的订阅管理的工具,但是都无法满足我自己的一些需求,比如监听更新后的回调、自定义渲染的网页内容等等,于是就有了开发这个工具的想法。
目前主要支持的功能:
WebHook: 我经常需要对特定的 RSS 源进行更新监控,并在更新后执行一些后续处理。例如,当某个 UP 主发布新内容时,我希望我的 NAS 设备能自动下载这个视频。因此,我添加了一个 WebHook 回调功能。每次 RSS 源更新时,系统会通过回调一个 URL 地址来通知我。
定制化的渲染: 我个人非常喜欢阅读评论(有时甚至比文章内容还精彩),但现有的 RSS 阅读器只能订阅并显示文章内容。因此,我设想了一个能从 RSS 源链接中抓取部分内容并渲染到阅读页面的自定义功能。这个功能的基本工作原理是通过 JS 脚本注册一个处理函数,该函数会自动通过正则表达式匹配 RSS 链接。一旦匹配成功,就会执行这个函数,并将返回的内容渲染到阅读页面上。
PUSH 通知: 许多现有的 RSS 阅读器通过本地定时任务进行内容更新,但由于 iOS 系统的限制,定时任务的执行可能会出现延迟,这导致我无法及时知道 RSS 的更新情况。因此,我考虑通过服务端定时任务来更新 RSS ,并通过 APNs 将更新消息推送到相应设备。这样的设计也导致这款软件需要用户登录才能使用(这可能是不好的点, 后续可能可以通过匿名账号的问题解决?)。
以下是使用自定义 JS 脚本渲染后的文章示例,你可以看到 V2EX 的评论区是如何被渲染的:
// 通过 $w.register 注册一个处理函数, 并返回一个 html
$w.register('.v2ex.com/t/.*', async (link) => {
try {
const { data } = await $axios.get(link);
const $ = await $cheerio.load(data);
let html = '';
for (const el of $("div[id^='r_'].cell").toArray()) {
const username = $(el).find('strong a').text();
const time = $(el).find('.ago').attr('title');
const content = $(el).find('.reply_content').text();
const avatar = $(el).find('.avatar').attr('src');
html += `
<div style="margin-bottom: 15px;">
<div style="display: flex;">
<div style="border-radius: 20px; margin: 5px 10px 0 0;">
<img src="${avatar}" style="width: 35px; height: 35px;" alt="" />
</div>
<div>
<p style="font-weight: bold; font-size: 14px; margin: 0;">${username}</p>
<p style="color: #999; font-size: 12px; margin: 0 0 5px 0;">${time}</p>
</div>
</div>
<p style="margin: 0;">${content}</p>
</div>
`;
}
return html;
} catch (e) {
$alert(e);
}
});
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.