有个问题我被问了无数遍了,实在不堪其扰,所以来寻一位壮士帮忙把它解决了。问题并不难,我就是觉得这不是我的责任,所以我没有动力解决它。问题是这样:当网页中使用相对链接时,比如 ![](foo.png)
,RSS 源里也会使用相对链接,比如 <img src="foo.png" />
。有些弱弱的 RSS 阅读器无法解析这些相对链接,比如 R-bloggers 就无法处理,而 Feedly 就很聪明。
RSS 源本质是个 XML 文档,里面的每个网页都对应一个 <item>
,形如:
<item>
<link>https://blog.rstudio.com/2020/12/23/winners-of-the-2020-rstudio-table-contest/</link>
<description>
<p><img src="table-hexes.png" alt="" /></p>
完整 RSS 如这般:https://blog.rstudio.com/index.xml
现在需要做的事情就是根据 link
标签将相对链接转化为绝对链接,如上例中的图片 src
属性是相对链接,需要转化为:
<item>
<link>https://blog.rstudio.com/2020/12/23/winners-of-the-2020-rstudio-table-contest/</link>
<description>
<p><img src="https://blog.rstudio.com/2020/12/23/winners-of-the-2020-rstudio-table-contest/table-hexes.png" alt="" /></p>
description
里的文本是经过转码的,如 <
是 <
、"
是双引号,等等。
这个问题的解决方案大概就是这么几步:
- 读取 XML 文档,找到所有的
<item>
;
- 修改
<description>
里的 <img src="相对路径">
和 <a href="相对路径">
;
- 写回 XML 文档。
1 和 3 都可以用 XML 处理库,比如 Python 中的 https://docs.python.org/3/library/xml.etree.elementtree.html 第 2 步我觉得不需要太严谨,正则表达式查找替换就可以了;若要严谨的话,得先转码回来,再继续用 XML 工具处理 src
和 href
属性。
最终我想在 Netlify 上运行这个脚本,所以最好是能用 Netlify 支持的语言或工具,包括 Node.js、Ruby、Python、Swift 等:https://docs.netlify.com/configure-builds/manage-dependencies/
我估计二十行代码能搞定,但这些工具我都不熟悉。看是否有壮士能出手相助,省得我再把责任推卸给 R-bloggers 和其它弱鸡的 RSS 阅读器了。谢谢!