klknn log / posts / tags / works / feed / src

はてなブログ的なfeedをHugoで生成

RSSリーダーのFeedlyを使っていて、はてなブログとかは全文リーダー内に表示されるのに、うちだけ表示されないな?と疑問に思っていました。 今回ははてなブログのフィードとHugoのデフォルトのフィードを比べた上でよりRSSリーダーフレンドリーなフィードを構築していきます。

はてなのfeed

まずFeedlyで適当に普段読んでるhatenaブログをみてみると、取得してるURLが設定画面で把握できます。大抵は以下のようなXMLがでてきます:

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  <title>・x・ぼくののうみそ</title>

  <link href="https://bokunonoumiso.hatenablog.com/"/>
  <updated>2022-08-09T12:41:41+09:00</updated>
  <author>
    <name>bokunonoumiso</name>
  </author>
  <generator uri="https://blog.hatena.ne.jp/" version="149d375eb29bfc5c8439e961a2b85a">Hatena::Blog</generator>
  <id>hatenablog://blog/6653812171403772804</id>
    <entry>
        <title>高い車に乗って安い車を煽る</title>
        <link href="https://bokunonoumiso.hatenablog.com/entry/2022/08/09/124141"/>
        <id>hatenablog://entry/4207112889907092076</id>
        <published>2022-08-09T12:41:41+09:00</published>
        <updated>2022-08-09T12:41:41+09:00</updated>
        <summary type="html">高い車が安い車を煽る…</summary>
        <content type="html">&lt;p&gt;高い車が安い車を煽る&lt;/p&gt;</content>
   </entry>
</feed>

注意点としては

Hugoのfeed

Hugo標準付属のrss.xmlはRSS 2.0なのかAtomなのかよくわからない感じですね。 hatenaブログのフィードっぽくしたテンプレートはこんな感じです。

{{- $pctx := . -}}
{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
{{- $pages := slice -}}
{{- if or $.IsHome $.IsSection -}}
{{- $pages = $pctx.RegularPages -}}
{{- else -}}
{{- $pages = $pctx.Pages -}}
{{- end -}}
{{- $limit := .Site.Config.Services.RSS.Limit -}}
{{- if ge $limit 1 -}}
{{- $pages = $pages | first $limit -}}
{{- end -}}
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  <title>{{ if eq  .Title  .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>

  <link href="{{ .Permalink }}"/>
  <updated>{{ time.Format "2006-01-02T15:04:05-0700" .Site.LastChange | safeHTML }}</updated>
  <author>
    <name>{{ $.Site.Params.author }}</name>
  </author>
  <generator uri="https://gohugo.io" version="{{ hugo.Version }}">Hugo</generator>
  <id>{{ .Permalink }}</id>

  {{ range $pages }}
  <entry>
    <title>{{ .Title }}</title>
    <link href="{{ .Permalink }}"/>
    <id>{{ .Permalink }}</id>
    <published>{{ .PublishDate.Format "2006-01-02T15:04:05-0700" | safeHTML }}</published>
    <updated>{{ .Lastmod.Format "2006-01-02T15:04:05-0700" | safeHTML }}</updated>
    {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
    <summary type="html">{{ .Summary | plainify }}...</summary>
    {{ printf `<content type="html"><![CDATA[%s]]></content>` .Content | safeHTML }}
  </entry>
  {{ end }}
</feed>

詳細は以下のcommitを見てください。

https://github.com/klknn/klknn.github.io/commit/afb831f515d54b451e70fbc5e5ae95e669d79c75

まとめ

RSSリーダーって10年前まではみんな使ってたのにGoogle readerが終わって一気に死んだよね…インターネット老人ネタでした。


Back to top

Prev: モニタースピーカー買い替えで悩む

Next: HugoにおけるCSSの埋め込みと後処理

Copyright © klknn All Rights Reserved.