Skip to content

Commit c92c8a2

Browse files
committed
支持多个源、消息显示摘要
1 parent dcbec1e commit c92c8a2

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

src/script.ts

+17-8
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import {script} from '@digshare/script';
22
import RSSParser from 'rss-parser';
33

44
// 配置目标 RSS 地址。
5-
const RSS_URL = 'https://sspai.com/feed';
5+
const RSS_URLS = ['https://sspai.com/feed'];
6+
// 如果需要多个地址,参考如下配置(地址前后加单引号,中间用逗号隔开):
7+
// const RSS_URLS = ['https://sspai.com/feed', 'https://vane.life/rss/'];
68

79
// 配置内容筛选关键字,空格隔开。
810
const KEYWORDS_SPACE_SEPARATED = '关键字 用空格 隔开 比如 app 软件';
@@ -24,10 +26,17 @@ export default script<void, Storage>(async (_payload, {storage}) => {
2426
const seenSet = new Set(storage.getItem('seen'));
2527

2628
// 使用 RSS Parser 加载、解析目标 RSS 列表。
27-
const feed = await rssParser.parseURL(RSS_URL);
29+
const feeds = await Promise.all(RSS_URLS.map(url => rssParser.parseURL(url)));
30+
31+
const items = feeds
32+
.flatMap(feed => feed.items)
33+
.sort(
34+
(x, y) =>
35+
new Date(y.pubDate ?? 0).getTime() - new Date(x.pubDate ?? 0).getTime(),
36+
);
2837

2938
// 从加载的 RSS 订阅内容中筛选出之前没有看到过的内容。
30-
const unseenItems = feed.items.filter(
39+
const unseenItems = items.filter(
3140
item =>
3241
// seenSet 中如果有 item.guid,就说明之前看到过。
3342
!!item.link && !seenSet.has(item.guid ?? item.link),
@@ -68,14 +77,14 @@ export default script<void, Storage>(async (_payload, {storage}) => {
6877
return;
6978
}
7079

71-
// 从新内容中取出前 3 条(主要怕一次性新内容太多,比如脚本第一次执行)。
72-
const mostRecentUnseenItems = filteredUnseenItems.slice(0, 3);
73-
7480
return {
75-
content: `发现了 ${filteredUnseenItems.length} 篇新内容。`,
81+
content: `\
82+
发现了 ${filteredUnseenItems.length} 篇新内容:
83+
84+
${filteredUnseenItems.map(item => `- 《${item.title}》`).join('\n')}`,
7685
links: [
7786
// 提供链接:
78-
...mostRecentUnseenItems.map(item => {
87+
...filteredUnseenItems.map(item => {
7988
return {
8089
// 链接标题使用订阅内容标题
8190
title: item.title,

0 commit comments

Comments
 (0)