为不支持 RSS 网站添加 RSS 全文订阅

  • feed43 + feedex 为不支持 RSS 网站添加全文订阅

  • 资料来源:

    https://sspai.com/post/34320

  • 更新

    1
    2021.08.02 初始

导语

现在还在使用 rss 的人真的不多了吧..许多的高质量网站也不支持 rss 输出了.

必须订阅的网站不多,但是还是很想整合到 rss 订阅.

具体就是 feed43 解析需要的字段,输出.feedex 抓取全文.

这种方式并不完美,很多时候只能抓取到以后更新的文章,而不是抓到全部.

feed43 抓取

feed43 抓取参考 利用 Feed43,将任意网页制作成 RSS 订阅源 | 一日一技,这里仅提到关键步骤.

下文以 Thinking in Android 为例了,文章质量很高.

feed43 能够抓取的是一个网页的变换,以博客网站为例,最好找到一个有所有博文的页面,这里是 Thinking in Android 的首页了.

打开 feed43.首先同意协议..

Step 1. Specify source page address (URL)

  • 输入要抓取的页面 url 这里是 https://superandroid.pro/
  • 编码,不用填,直接 reload

在 Page Source 里,页面的源码就加载下来了.我们要做的是个找规律的游戏.

  • Thinking in Android 我想抓取的是最近更新的博文.这一块内容 博文架构(Android 10.0 or 必须了解的 "JNI" or Broadcast -- " 品种 "和" 用法 "

  • 接下来取源码里搜索文章名,找规律

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<article id="articles" class="container articles">  
<div class="row article-row">

<div class="article col s12 m6 l4 overflow-policy" data-aos="zoom-in">
<div class="card">
<a href="https://superandroid.pro/2021/01/01/thinking-in-android-android-xi-tong-kai-fa-bo-wen-jia-gou-mei-zhou-geng-xin/">
<div class="card-image">

<img src="https://superandroid.pro/medias/featureimages/android.gif" class="responsive-img" alt="博文架构(Android 10.0)">

<span class="card-title">博文架构(Android 10.0)</span>
</div>
</a>

<div class="card-content article-content">
<div class="summary block-with-text">

1、技术分类,建立索引;<br>2、渐进学习,跟踪总结;<br>3、资源拓展,每周更新!

</div>
<div class="publish-info">
<span class="publish-date">
<i class="fa fa-clock-o fa-fw icon-date"></i>2021-01-01
</span>
<span class="publish-author">

<i class="fa fa-bookmark fa-fw icon-category"></i>
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
...
<div class="article col s12 m6 l4 overflow-policy" data-aos="zoom-in">
<div class="card">
<a href="https://superandroid.pro/2020/07/01/android-10-he-xin-ji-zhi-xi-lie-bi-xu-liao-jie-de-jni/">
<div class="card-image">

<img src="https://s1.ax1x.com/2020/07/16/UDE9Rs.jpg" class="responsive-img" alt="必须了解的 " jni"">

<span class="card-title">必须了解的 "JNI"</span>
</div>
</a>

<div class="card-content article-content">
<div class="summary block-with-text">

JNI 是 Android 核心机制之一,在开发过程中我们经常会遇到,了解并熟悉 JNI 是每个系统工程师必须掌握的。

</div>
<div class="publish-info">
<span class="publish-date">
<i class="fa fa-clock-o fa-fw icon-date"></i>2020-07-01
</span>
<span class="publish-author">

<i class="fa fa-bookmark fa-fw icon-category"></i>

<a href="https://superandroid.pro/categories/%E6%A0%B8%E5%BF%83%E6%9C%BA%E5%88%B6/" class="post-category" target="_blank">
核心机制
</a>


</span>
</div>
</div>


<div class="card-action article-tags">

<a href="https://superandroid.pro/tags/JNI/" target="_blank">
<span class="chip bg-color">JNI</span>
</a>

</div>

</div>
</div>
....

我们需要找的是

  • 文章链接
  • 文章标题
  • 时间
  • 简介(可选)
  • 文章分类(可选)

在源码里搜索这几篇文章的链接,例如 https://superandroid.pro/2021/01/01/thinking-in-android-android-xi-tong-kai-fa-bo-wen-jia-gou-mei-zhou-geng-xin/( 博文架构(Android 10.0)),似乎有这样的规律.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<div class="article col s12 m6 l4 overflow-policy" data-aos="zoom-in">  
<div class="card">
<a href="https://superandroid.pro/2020/07/01/android-10-he-xin-ji-zhi-xi-lie-bi-xu-liao-jie-de-jni/">
<div class="card-image">

<img src="https://s1.ax1x.com/2020/07/16/UDE9Rs.jpg" class="responsive-img" alt="必须了解的 " jni"">

<span class="card-title">必须了解的 "JNI"</span>
</div>
</a>

<div class="card-content article-content">
<div class="summary block-with-text">

JNI 是 Android 核心机制之一,在开发过程中我们经常会遇到,了解并熟悉 JNI 是每个系统工程师必须掌握的。

</div>
<div class="publish-info">
<span class="publish-date">
<i class="fa fa-clock-o fa-fw icon-date"></i>2020-07-01
</span>
<span class="publish-author">

我们需要找的是

  • 文章链接 -> 在 <a href="xxx"> 的字符串中
  • 文章标题 -> 在 <span class="card-title"> xxx </span>
  • 简介(可选) -> 围绕在 <div class="summary block-with-text"> 和最接近的 </div> 之间.
  • 时间 -> <i class="fa fa-clock-o fa-fw icon-date"></i> 后面一点
  • 文章分类(可选) -> 不找了,在下边一点.

接下来把这些规律拼接起来

1
2
3
4
- 最开始的字段不需要加 {*}
- 变化的字段删去用 {%} 代替.
- 将固定且多余的字段删去用 {*} 代替.
- 有换行的地方均需要添加 {*}.

这样替换后

1
2
3
4
5
6
7
8
9
10
11
12
13
<div class="article col s12 m6 l4 overflow-policy" data-aos="zoom-in">{*}
<div class="card">{*}
<a href="{%}">{*}
<div class="card-image">
{*}
<span class="card-title">{%}</span>
{*}
<div class="summary block-with-text">{*}
{%}
</div>
{*}
<i class="fa fa-clock-o fa-fw icon-date"></i>{%}{*}
</span>

写入 Step 2. Define extraction rules -> Item (repeatable) Search Pattern,点击 Extract.

1
如果规则同上,看起来抓取到了 12 条.一条 item 如下,{%1} 到下文类似变量.
1
2
3
4
5
Item 1 <Mon, 02 Aug 2021 09:09:01 GMT>
{%1} = https://superandroid.pro/2021/01/01/thinking-in-android-android-xi-tong-kai-fa-bo-wen-jia-gou-mei-zhou-geng-xin/
{%2} = 博文架构(Android 10.0)
{%3} = 1、技术分类,建立索引;<br>2、渐进学习,跟踪总结;<br>3、资源拓展,每周更新!
{%4} = 2021-01-01

接下来要在 Step 3. Define output format 完善这些信息.

RSS item properties

1
2
3
- Item Title Template -> {%2}
- Item Link Template -> {%1}
- Item Content Template -> {%3}

点击 preview 查看最终抓取的效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Thinking in Android

[https://superandroid.pro/](https://superandroid.pro/)

Thinking in Android

1. **博文架构(Android 10.0)**

[https://superandroid.pro/2021/01/01/thinking-in-android-android-xi-tong-kai-fa-bo-wen-jia-gou-mei-zhou-geng-xin/](https://superandroid.pro/2021/01/01/thinking-in-android-android-xi-tong-kai-fa-bo-wen-jia-gou-mei-zhou-geng-xin/)

1、技术分类,建立索引;
2、渐进学习,跟踪总结;
3、资源拓展,每周更新!

_-- Delivered by [Feed43](http://feed43.com/) service_

2. **必须了解的 "JNI"**

[https://superandroid.pro/2020/07/01/android-10-he-xin-ji-zhi-xi-lie-bi-xu-liao-jie-de-jni/](https://superandroid.pro/2020/07/01/android-10-he-xin-ji-zhi-xi-lie-bi-xu-liao-jie-de-jni/)

JNI 是 Android 核心机制之一,在开发过程中我们经常会遇到,了解并熟悉 JNI 是每个系统工程师必须掌握的。

_-- Delivered by [Feed43](http://feed43.com/) service_

在 Optional features

  • Change file name,更改订阅地址更改为更有意义的字符
  • 可以绑定账号等等

最终我们的 rss 订阅地址是 Feed URL: https://node2.feed43.com/thinking_in_android.xml

如果有错误修改的地址是 Edit URL: https://feed43.com/feed.html?name=thinking_in_android

注意,没有绑定账户情况下,所有人都能修改这个订阅(应该是吧)

至此 feed43 抓取,完毕,如果不奢求效果,这样就足够了.

  • 每条都会带上 feed43 的标签(毕竟免费服务吗),
  • 不能抓取全文,只能跳转到源站才能阅读全文.

feedex

feedex 可以将 feed43 的订阅转换成全文输出.

打开 feedex 输入 Feed URL: https://node2.feed43.com/thinking_in_android.xml 即可,需要两三分钟.

最后会返回一个全文定于的 RSS.

注意 feedex 的转换并不完美,这里 只抓到了第一篇文章(可能是最新一篇文章是汇总性质文章,url 太多导致识别错误了),因此就不贴地址了.

结语

rss 的时代,早在 GR 关闭的时候就结束了,现在还在用 rss 的大概都是不喜欢算法推送的人吧.