このサイトのRSS FeedをFull-textにしたのでメモ.
背景#
ふと自分のブログをRSSリーダーに登録してみたら記事の本文が最初だけしか表示されていなかった.
調べてみると,どうやらHugoのdefault RSS templateでは<description>{{ .Summary | html }}</description>
のみで.Content
が定義されていない模様.
解決策#
関連記事を漁っているとdescription
の.Summary
を.Content
に変更する方法がいくつか見つかった.
ただdescription
は短めの要約を定義するのが推奨っぽいのでcontent:encoded
を追加する方式にした.
rss.xmlを用意#
layouts/_default/rss.xml
を配置してデフォルトのtemplateを上書きする.default RSS templateに記載されているGithubのリンクからダウンロードする.
curl "https://raw.githubusercontent.com/gohugoio/hugo/master/tpl/tplimpl/embedded/templates/_default/rss.xml" > layouts/_default/rss.xml
rss.xmlを修正#
以下で元のrss.xmlと変更を加えたlayouts/_default/rss.xml
のdiffを取る.
diff --label default --label custom <(curl "https://raw.githubusercontent.com/gohugoio/hugo/master/tpl/tplimpl/embedded/templates/_default/rss.xml") <(cat layouts/_default/rss.xml)
--- default
+++ custom
@@ -11,7 +11,7 @@
{{- $pages = $pages | first $limit -}}
{{- end -}}
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
-<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
<link>{{ .Permalink }}</link>
@@ -33,6 +33,11 @@
{{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
<guid>{{ .Permalink }}</guid>
<description>{{ .Summary | html }}</description>
+ <content:encoded>
+ {{ `<![CDATA[` | safeHTML }}
+ {{ .Content }}
+ {{ `]]>` | safeHTML }}
+ </content:encoded>
</item>
{{ end }}
</channel>
<rss>
にxmlns:content="http://purl.org/rss/1.0/modules/content/"
を追加- これが無いと
Namespace prefix content on encoded is not defined
でエラーになる
- これが無いと
<content:encoded>
を追加<content:encoded>{{ .Content | html }}
でも良さそう
ひとまずこれでFeedlyではうまく表示出来てそう.Inoreader側ではキャッシュが保持されて過去記事には適用され無さそうなのでしばらくこれで運用してみて様子をみる.