惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
小众软件
小众软件
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
L
LangChain Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
D
Docker
Cyberwarzone
Cyberwarzone
腾讯CDC
V
Vulnerabilities – Threatpost
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
AWS News Blog
AWS News Blog
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
MyScale Blog
MyScale Blog
C
CERT Recently Published Vulnerability Notes
T
Threat Research - Cisco Blogs
S
Securelist
C
Cybersecurity and Infrastructure Security Agency CISA
Security Archives - TechRepublic
Security Archives - TechRepublic
Know Your Adversary
Know Your Adversary
Security Latest
Security Latest
N
News and Events Feed by Topic
Attack and Defense Labs
Attack and Defense Labs
V
Visual Studio Blog
博客园 - 司徒正美
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
Intezer
P
Privacy International News Feed
爱范儿
爱范儿
T
The Exploit Database - CXSecurity.com
O
OpenAI News
云风的 BLOG
云风的 BLOG
博客园_首页
雷峰网
雷峰网
M
MIT News - Artificial intelligence
Project Zero
Project Zero
I
InfoQ
Hacker News: Ask HN
Hacker News: Ask HN
C
Cyber Attacks, Cyber Crime and Cyber Security
N
News and Events Feed by Topic
S
Security Affairs
S
Secure Thoughts
Y
Y Combinator Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
美团技术团队
The GitHub Blog
The GitHub Blog
B
Blog
H
Hacker News: Front Page

碎言

不懂就别瞎掰掰:【程序员的常识】写的什么玩意? PrimaryOralMathPack 小学生口算题生成器 AI 辅助编程下的程序设计与代码编写 使用 Next.js 和 Tailwind CSS 构建可编辑和删除的 ToDo 待办事项应用 探索编程新境界:MarsCode 助你一臂之力 使用 Next.js 和 Tailwind CSS 搭建静态图片展示站点并部署到 Vercel AI 辅助编程:免费工具的优缺点及官网一览 GitHub push更新总是失败,写个python脚本解决 把博客从GitHub迁移到到了vercel ComfyUI 和 Flux.1 安装与使用教程 Flux.1 入门必知:硬件、环境、模型 Git项目的子文件夹中的内容无法同步到远程仓库的解决方法 blender流体Fluid使用中没有流体、流体穿模等一些问题的解决方法 博客聚合网站:积薪,竟然关闭了! blender日常使用中的一些技巧 虽然只有我自己在用,但还是更新了碎言博客的源代码, 与其在迷茫中困惑,不如在努力中前进 差点忘了我还有一个博客... 秧歌、博客和AI 终于熬到了新手上路 好久没有更新博客了。。。 老妈大腿骨骨折,最近一直在医院护理 Hello, September! Ubuntu开机自动启动Docker容器运行WordPress Docker 简单快速安装部署WordPress Docker下安装MySQL 加碘盐能防核辐射的话,还怕什么核战争? shields.io 一个简洁、一致、清晰的徽章 Ubuntu下使用root登录ssh的设置 GitHub Actions 构建、部署 Next.js项目 我又用回了"IE"--edge ubuntu-22-live-server 设置固定IP Next项目部署GitHub pages的一些坑 整理了一个下午的收藏夹...... 短暂而忙碌的暑假即将谢幕 GitHub Actions 是干什么用的? 放弃Next.js重构博客:经验、教训与未来技术探索 关于Google LCP 问题:超过了2.5秒 验证已通过 仅用了几个小时就使用next.js重构博客的所有功能 关于使用Next.js重构博客构思的记录 使用Tailwind css和JavaScript实现一个简单的返回顶部功能 罗技K380 F1-F12 功能键锁定 PHILIPS猛禽SPK8404机械键盘手感真是超赞! 局域网的DNS设置192.168.0.1与8.8.8.8,114.114.114.114有什么区别? 史诗结合的浪漫:《长安三万里》 聊 聊 友 情 链 接 1767个中文博客的数据洞察:中文博主都喜欢干啥? python requests 设置读取超时时间 八月回顾:博客之路,一路前行 Docker基础学习笔记和常用命令汇总 vim常用命令整理 Ubuntu 22 安装Docker过程记录 使用python结合feedparser模块编写自己的私人RSS订阅程序 博客大数据分析:38880条博文揭示博主最爱写什么? Windows下国产杀毒软件还有选择吗?火绒安全可以一试。 export exports module.exports 这三个命令的区别是什么如何使用? 时代的变迁:从56K拨号上网到1G光纤的回忆 理工计算机专业准大学生如何选配笔记本? 如何使用CSS为博客标题设置彩虹颜色? 最终还是决定使用传统的网线来解决千兆速率问题。 1300M USB双频2.4+5G无线网卡的一些常识和使用技巧 Python Gui新框架:NiceGui之初体验 pycharm 正在关闭项目(closing project)无法关闭退出程序的解决方法! 速度与优雅:博客性能优化之旅 久了,博客主题就会一直做减法 七月的焦虑 在react中使用复制插件clipboard.js react中如把HTML代码转成字符串进行渲染? react useEffect()中使用lodash库中的防抖debounce react useEffect() 为什么在开发模式的时候会执行两次? 七年之痒!别了我曾深爱的MacBookPro 前端React+Material UI开发环境的快速搭建 一键更新Github部署的静态博客 编程新手学习过程中如何更好的提问? Typed.js 一款有意思的网页打字机效果库 解决错误 ERROR [WinError 10049] 在其上下文中,该请求的地址无效。 Stable Diffusion 相关教程与模型的记录 Stable Diffusion ControlNet openpose 报错无法使用 在react或vue中使用localStorage存储数据 使用React+Vite+TailwindCSS+daisyUI打造一个简单的ToDos 碎言静态博客 聊聊Python中的装饰器 npm更换源与nrm安装与配置 pip临时修改下载源 Vue快速学习笔记(9)Vuetify配置及简单使用 Vue快速学习笔记(8)webpack4.X配置Vue开发打包环境 Vue快速学习笔记(5)使用路由vue-router(1) Vue快速学习笔记(4)Vue组件中的数据传递 Vue快速学习笔记(3)Vue的组件 Vue快速学习笔记(2)Vue中的监听与计算属性 Vue快速学习笔记(1)Vue实例基础 基于Django构建的小学生英文单词背写检测考试系统。 如何在Python程序中使用配置文件.ini(ConfigParser) 写在我的博客PV10万时:聊聊编程与画画 python3函数学习笔记简单总结 PythonINI配置文件读写的简单方法 Python open()函数文件打开、读、写操作总结 Python os.path模块中一些常用方法的整理总结 Python 采集数据三步曲之[Requests + re.py模块进行数据采集] Python 采集数据三步曲之[Requests开源协议的HTTP 库]
使用JavaScript编写自己的私人RSS订阅程序
J.sky · 2023-07-24 · via 碎言

今天闲来无事,想编写一个私人的rss订阅,用来订阅自己喜欢的博客,终端运行后可以采集列表中博客的RSS文章,只关注最近一星期的数据,然后选中文章,通过浏览器打开博文地址浏览。好吧想法有了,那么就开干!

程序构思

一个私人的rss订阅,用来订阅我喜欢的博客,使用JavaScript来编写,在node环境下运行,我会创建一个数组,里边存放着我喜欢的博客的rss连接地址,当我运行这个脚本的时候,程序就会通过rss采集这些博客的最新文章,然后整理保存,通过终端输出,我可以通过鼠标点击终端的文章名称,弹出一个浏览器窗口来查看博文。

目前来说,我需要两个主要的依赖,一个书rss的数据采集一个是在终端可以打开指定的连接,根据搜索以及ChatGPT的提示,我找到两个库:

const Parser = require('rss-parser');
const opn = require('opn');

其中一个是rss的解析库rss-parser,另一个就是用来在终端打开链接的库。

脚本的代码很简答,node环境下运行即可,代码如下:

const Parser = require('rss-parser');
const opn = require('opn');

const rssFeeds = [
    'https://suiyan.cc/rss',
    'https://hutusi.com/feed.xml',
    'http://www.ruanyifeng.com/blog/atom.xml',
    // 添加更多博客的 RSS 连接地址
];

async function fetchAndDisplayLatestArticles() {
    const parser = new Parser();
    const articles = [];

    try {
        for (const feed of rssFeeds) {
            const feedData = await parser.parseURL(feed);
            console.log(`正在解析${feed}的订阅数据。。。。。。`)
            const oneWeekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000); // 一周前的日期

            // 筛选出发布日期在一周内的文章
            const recentArticles = feedData.items.filter(
                (article) => new Date(article.pubDate) > oneWeekAgo
            );
            console.log(`${feed}的数据解析完毕!`)
            articles.push(...recentArticles);
        }

        // 按照发布日期倒序排序文章
        articles.sort((a, b) => new Date(b.pubDate) - new Date(a.pubDate));

        console.log('最近一周的文章列表:');
        articles.forEach((article, index) => {
            // console.log(article)
            console.log(`${index + 1}. ${article.title}.${article.pubDate}`);
        });

        const selectedArticleIndex = await askForSelection(articles.length);

        if (selectedArticleIndex !== -1) {
            const selectedArticleLink = articles[selectedArticleIndex].link;
            opn(selectedArticleLink);
        }
    } catch (error) {
        console.error('发生错误:', error);
    }
}

function askForSelection(maxIndex) {
    const readline = require('readline').createInterface({
        input: process.stdin,
        output: process.stdout,
    });

    return new Promise((resolve) => {
        readline.question(
            `请输入要查看的文章序号 (1-${maxIndex}),输入 0 退出:`,
            (answer) => {
                readline.close();
                const selected = parseInt(answer);

                if (!isNaN(selected) && selected >= 0 && selected <= maxIndex) {
                    resolve(selected - 1);
                } else {
                    resolve(-1);
                }
            }
        );
    });
}

fetchAndDisplayLatestArticles();

运行这个脚本:

"D:\Program Files\nodejs\node.exe" D:\code\node_test\myrss\main.js
正在解析https://suiyan.cc/rss的订阅数据。。。。。。
https://suiyan.cc/rss的数据解析完毕!
正在解析https://hutusi.com/feed.xml的订阅数据。。。。。。
https://hutusi.com/feed.xml的数据解析完毕!
正在解析http://www.ruanyifeng.com/blog/atom.xml的订阅数据。。。。。。
http://www.ruanyifeng.com/blog/atom.xml的数据解析完毕!
最近一周的文章列表:
1. 如何使用CSS为博客标题设置彩虹颜色?.2023-07-22 15:27:22
2. 最终还是决定使用传统的网线来解决千兆速率问题。.2023-07-21 17:08:56
3. 科技爱好者周刊(第 263 期):开源软件如何赚钱?.2023-07-21T00:01:19.000Z
4. 1300M USB双频2.4+5G无线网卡的一些常识和使用技巧.2023-07-20 23:03:50
5. Python Gui新框架:NiceGui之初体验.2023-07-19 09:37:40
6. pycharm 正在关闭项目(closing project)无法关闭退出程序的解决方法!.2023-07-18 16:52:53
7. 速度与优雅:博客性能优化之旅.2023-07-18 15:08:06
8. 久了,博客主题就会一直做减法.2023-07-17 10:38:01
请输入要查看的文章序号 (1-8),输入 0 退出:

终端里输入序号就可以打开相关的博文了,如果把结果保存成为一个HTML文件,并做适当的美化,效果还是不错的,我在琢磨是不是要用python写一个方法,然后生成静态文件,这样就可以在博客里添加一个友联文章集了。