Hugo 设置 RSS 输出全文

介绍

当前博客使用的 Hugo + Even 主题默认 RSS 中只输出摘要,但是想要修改为输出全文,方便订阅阅读。

环境

  • Hugo v0.84.0
  • Even v4.1.0

查找模板

even 主题没有自带 RSS 模板,使用的是 Hugo 默认模板。

通过官方文档可以得知默认 RSS 模板路径是 https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml

但是实际需要的是 Hugo v0.84.0 版本的模板,因此需要前往 Releases 页面拿到 v0.84.0 的提交,然后拼接出最后的地址:https://github.com/gohugoio/hugo/blob/2c4689f7b8d3c1296111aa21bd07f6a66d677b44/tpl/tplimpl/embedded/templates/_default/rss.xml

这样可以保证拿到的版本与当前 Hugo 版本完全兼容。

修改模板

将默认模板保存到 themes/even/layouts/index.rss.xml 文件中,然后将 description 属性中的 Summary 修改为 Content 就可以了,只需要改这一处。

1 2 3 4 5 6 7 8 9 
@@ -32,7 +32,7 @@  <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate> {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}} <guid>{{ .Permalink }}</guid> - <description>{{ .Summary | html }}</description> + <description>{{ .Content | html }}</description>  </item> {{ end }} </channel> 

调试修正

修正方法

  1. 使用 hugo 命令将整个网站输出到 public 目录中。
  2. 使用 Chrome 打开 public/index.xml 文件,文件加载完成后会报错。
  3. 使用 VSCode 打开 public/index.xml 文件,定位到报错的行号和列号。
  4. 使用 VSCode 全局文本查找提示报错位置的字符,然后将其替换为空。
  5. 重复 1 - 4 步,修复遇到的所有错误。

遇到的错误

1 2 3 
This page contains the following errors: error on line 29753 at column 28: PCDATA invalid Char value 8 Below is a rendering of the page up to the first error. 

这里出现的是一个 BackSpace 不可见字符,可以通过使用正则表达式搜索 /u0008 并替换为空删除掉。

1 2 3 
This page contains the following errors: error on line 28479 at column 117: PCDATA invalid Char value 27 Below is a rendering of the page up to the first error. 

这里出现的并不是 /u0027而是 /u001b ,因为报错信息使用的是十进制,而 /u 中使用的是十六进制。通过查表可以知道这是 ESC 字符,可以在 VSCode 中选中并搜索替换。

输出策略

如果设置为输出全文,那么 200+ 篇文章的 index.xml 总大小在 2MB+,实在是太大了。

参考另一篇博客的方法,指定最新 10 篇文章,修改遍历的 range 范围:

1 2 3 4 5 6 7 8 9 
@@ -25,7 +25,7 @@  {{- with .OutputFormats.Get "RSS" -}} {{ printf "<atom:link href=%q rel=/"self/" type=%q />" .Permalink .MediaType | safeHTML }} {{- end -}} - {{ range $pages }} + {{ range first 10 $pages }}  <item> <title>{{ .Title }}</title> <link>{{ .Permalink }}</link> 

修改为只输出最后 10 篇文章后,index.xml 大小可以降到 50KB 左右。

总结

通过 RSS 修改输出为全文,居然发现原有文章内存在着不少无用的不可见字符。Hugo 在输出 RSS 时未检查这些不可见字符是否合法,后续为了保证 RSS 可以正常使用,发布完文章后必须再手动检查一下 index.xml 是否存在解析错误。

版权声明:
作者:cc
链接:https://www.techfm.club/p/6741.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>