RSS使用心得

RSS使用心得

RSS是什么


​ 不知道你有没有这样的困扰,你关注了两个博主,一个在微博更新,一个豆瓣更新,于是你需要下载两个APP去follow你关注的博主,两个平台倒不算多,但如果有一天你关注的博主分布在上百个app中,这就是个大麻烦了。这时候你便可以考虑使用RSS。

​ RSS(Really Simple Syndication),一种十分简单的内容聚合协议。使用RSS,你可以将各种网站的内容聚集到同一个阅读器,实现高效阅读。

如何使用RSS


  • 阅读器

    首先需要一个RSS阅读器,各个平台都有不错的RSS阅读器,我使用的是IOS平台下的<RSS阅读器>。

  • 订阅源

    有了阅读器后,需要在阅读器中添加订阅源,订阅源便是各种内容发布平台。许多阅读器中都有不少推荐的订阅源。

    但由于种种原因,RSS逐渐没落,许多平台比如微博、豆瓣并不提供RSS源,这时候便需要借助强大的RSSHub,将不可能化为可能。

RSSHub


RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。RSSHub 借助于开源社区的力量快速发展中,目前已适配数百家网站的上千项内容。

  • RSSHub的使用方式

    RSSHub能够为你生成一个RSS订阅源,即一个网址,它由两部分组成:域名+路由。

    域名使用官方提供的https://rsshub.app即可。

    路由是RSSHub规定的访问某个网站的格式。比如我希望订阅知乎上名为DiyGod的用户,那么路由格式如下:

    /zhihu/people/activities/:id
    

    :id为路由参数,代表作者id,将:id改为DiyGod,再加上域名,便可以得到知乎用户DiyGod动态的订阅源了

    https://rsshub.app/zhihu/people/activities/diygod
    

参加RSSHub项目的广大网友贡献了很多订阅源,包含领域广泛,下图展示了其中一部分:

Nxbrp.png

自建RSSHub服务


RSSHub固然好用,但许多网站有反爬的策略阻止RSS,比如微博、知乎等。这时候自建RSSHub便能带来更好的稳定性。

我这里使用的是腾讯云的VPS。

  • 首先需要在服务器中安装Node.JS,NPM。

  • 安装RSSHub

    git clone https://github.com/DIYgod/RSSHub.git
    cd RSSHub
    npm install
    

    国内使用npm下载依赖比较慢,推荐挂上代理。

  • 启动RSSHub

    安装完便可以开始使用RSSHub啦!启动方法如下:

    cd RSSHub
    npm start
    

    在浏览器中输入主机IP:端口号便可以进入RSSHub欢迎界面,当然,不想暴露主机IP的话,也可以给RSSHub分配一个子域名,到时候输入子域名:端口号即可。

    欢迎界面如下:

    NxiC6.png

    上面的启动方式其实是存在问题的,当我们关掉该进程,或者退出远程连接后,或者关闭终端时,RSSHub会跟着结束。所以需要让RSSHub跑在后台:

    cd RSSHub
    nohup npm start &
    

    nohup 命令

    用途:LINUX命令用法,不挂断地运行命令。

    语法:nohup Command [ Arg … ] [ & ]

    描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

    运行成功后,输出结果如下:

    nohup: ignoring input and appending output to `nohup.out'
    

建立自己的路由


虽然RSSHub官网已经提供了许多路由,但不可能面面俱全,你若想订阅自己学校网站的通知、公司的通知、或者RSSHub里没有的网站。则需要建立新的路由。

接下来有两条路可以走,一是去RSSHub的GitHub项目中的issue中提出自己的需求,祈祷别人给你做。二是自己动手丰衣足食。

最近在等上海科技大学研究生招生网的消息,于是打算自己做一个。大致分为两部:添加脚本路由、编写脚本。

  • 添加脚本路由

    在/lib/router.js中添加路由

    NxeUq.png

    这个路由的格式到时候就是上科大研招网的RSS订阅源了。

  • 编写脚本

    先去上海科技大学研究生招生网看该网站是什么格式,并找到每条动态的地址。

    NxBgX.png

    再按照RSSHub的标准编写脚本即可

    const cheerio = require('cheerio');
    const got = require('@/utils/got');
    
    module.exports = async (ctx) => {
      const baseUrl = 'http://yanzhao.shanghaitech.edu.cn';
      const reqUrl = `${baseUrl}/tzgg_1119/list.htm`;
      const res = await got(reqUrl);
      const selector = 'div.wrapper > div.inner.clearfix > div.col_news > div.col_news_box > div.col_news_con > div.col_news_list listcon > div.窗口6 > ul.news_list list2 > li.news n1 clearfix > span.new_title';
      const links = cheerio
          .load(res.data)(selector)
          .map((_, ele) => {
              const $item = cheerio.load(ele);
              const link = `${baseUrl}/${$item('a').attr('href')}`;
              return link;
          })
          .get();
      const item = await Promise.all(
          links.map((link) =>
              ctx.cache.tryGet(`sist/${link}`, async () => {
                  const res = await got(link);
                  const $ = cheerio.load(res.data);
                  const mainNode = $('.main_content');
                  const description = mainNode.find('.main_conDiv').html();
                  const title = mainNode.find('.main_contit h2').text();
                  const pubTime = mainNode
                      .find('.main_contit p')
                      .text()
                      .split(' ')
                      .find((s) => s.includes('时间'))
                      .replace('时间:', '');
                  return {
                      title,
                      description,
                      pubDate: new Date(pubTime).toUTCString(),
                  };
              })
          )
      );
    
      ctx.state.data = {
          title: '上海科技大学研究生招生网 - 通知公告',
          description: '上海科技大学研究生招生网 - 通知公告',
          link: `${baseUrl}/tzgg_1119/list.htm`,
          item,
      };
    };
    

给自己的网站添加RSS源

其实WordPress已经把RSS源做好了,直接引用https://www.qiucle.cn/?feed=rss2即可。