@@ -2,7 +2,13 @@ import {script} from '@digshare/script';
2
2
import RSSParser from 'rss-parser' ;
3
3
4
4
// 配置目标 RSS 地址。
5
- const RSS_URL = 'https://vane.life/rss/' ;
5
+ const RSS_URL = 'https://sspai.com/feed' ;
6
+
7
+ const KEYWORDS_SPACE_SEPARATED = '关键字 用空格 隔开 比如 app 软件' ;
8
+
9
+ const KEYWORDS = KEYWORDS_SPACE_SEPARATED
10
+ ? KEYWORDS_SPACE_SEPARATED . toLowerCase ( ) . split ( ' ' )
11
+ : undefined ;
6
12
7
13
const rssParser = new RSSParser ( ) ;
8
14
@@ -21,7 +27,7 @@ export default script<void, Storage>(async (_payload, {storage}) => {
21
27
const unseenItems = feed . items . filter (
22
28
item =>
23
29
// seenSet 中如果有 item.guid,就说明之前看到过。
24
- ! seenSet . has ( item . guid ! ) ,
30
+ ! ! item . link && ! seenSet . has ( item . guid ?? item . link ) ,
25
31
) ;
26
32
27
33
if ( unseenItems . length === 0 ) {
@@ -36,24 +42,42 @@ export default script<void, Storage>(async (_payload, {storage}) => {
36
42
// 之前看到过的:
37
43
...seenSet ,
38
44
// 新内容的:
39
- ...unseenItems . map ( item => item . guid ! ) ,
45
+ ...unseenItems . map ( item => item . guid ?? item . link ! ) ,
40
46
// 只保留最近 10000 条记录:
41
47
] . slice ( - 10000 ) ,
42
48
) ;
43
49
50
+ // 根据关键词筛选内容
51
+ const filteredUnseenItems = KEYWORDS
52
+ ? unseenItems . filter ( item =>
53
+ KEYWORDS . some (
54
+ keyword =>
55
+ ( item . title ?. toLowerCase ( ) . includes ( keyword ) ?? false ) ||
56
+ ( item . content ?. toLowerCase ( ) . includes ( keyword ) ??
57
+ item . contentSnippet ?. toLowerCase ( ) . includes ( keyword ) ??
58
+ false ) ,
59
+ ) ,
60
+ )
61
+ : unseenItems ;
62
+
63
+ if ( filteredUnseenItems . length === 0 ) {
64
+ // 如果关键词筛选后没有新内容,中断脚本。
65
+ return ;
66
+ }
67
+
44
68
// 从新内容中取出前 3 条(主要怕一次性新内容太多,比如脚本第一次执行)。
45
- const mostRecentUnseenItems = unseenItems . slice ( 0 , 3 ) ;
69
+ const mostRecentUnseenItems = filteredUnseenItems . slice ( 0 , 3 ) ;
46
70
47
71
return {
48
- content : `${ feed . title } 发布了 ${ unseenItems . length } 篇新内容。` ,
72
+ content : `发现了 ${ filteredUnseenItems . length } 篇新内容。` ,
49
73
links : [
50
74
// 提供链接:
51
75
...mostRecentUnseenItems . map ( item => {
52
76
return {
53
77
// 链接标题使用订阅内容标题
54
- title : item . title ! ,
78
+ title : item . title ,
55
79
// 链接描述使用订阅内容片段
56
- description : item . contentSnippet ! ,
80
+ description : item . contentSnippet ,
57
81
// 链接地址
58
82
url : item . link ! ,
59
83
} ;
0 commit comments