我正在尝试为 GitHub Pages Jekyll 网站生成特定于帖子类别的 RSS 提要。
我知道 jekyll-feed 插件可以为所有帖子生成 RSS 提要,但根据此 GitHub 问题,尚不支持特定类别的提要。
GitHub Pages 不支持生成特定类别提要的其他方法(即此处和此处),因为它不支持自定义插件。
有没有办法使用 Jekyll 和 GitHub 页面生成特定于类别的 RSS 提要?
您可以创建自己的XML或RSS文件。对于这个答案,我用这个例子来构建。我还使用维基百科作为RSS提要的示例。
文件名:类别名称.rss
---
layout: null
---
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>{{ site.title }}</title>
<description>{{ site.description }}</description>
<link>{{ site.url }}</link>
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
<pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
<ttl>1800</ttl>
{% for post in site.categories.categoryname %}
<item>
<title>{{ post.title }}</title>
<description>{{ post.description }}</description>
<link>{{ post.url }}</link>
<guid isPermaLink="true">{{ site.url }}{{ post.url }}</guid>
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
</item>
{% endfor %}
</channel>
</rss>
标题应该是这样的:“mysitenames categoryname archive”。描述可以是您的类别描述。链接是指向类别的链接。“lastBuildDate”值可以是你最后一篇文章的日期,而“pubDate”可以是相同的。
如果您有任何问题,请告诉我。
下面我已经发布了 GitHub 页面上托管的集合,但是,通过修改,它也可能对类别有用。
通过 Git 的子模块功能可以在另一个项目中下载......
cd your-project
git checkout gh-pages
mkdir -vp _layouts/modules
git submodule add -b master --name feed-rss2\
https://github.com/liquid-utilities/feed-rss2.git\
_layouts/modules/feed-rss2
请注意,https
URL 是 GitHub 页面兼容性所必需的。
...这应该会导致类似于以下内容的代码变得可用...
_layouts/modules/feed-rss2/feed-rss2.html
---
layout: null
version: 0.0.1
license: AGPL-3.0
author: S0AndS0
---
{% capture workspace__rss2 %}
{% assign date_format = '%a, %d %b %Y %T %z' %}
{% assign collection_name = page.collection_name | default: include.collection_name | default: nil %}
{% assign target_collection = site[collection_name] %}
{% assign collection_home = page.collection_home | default: collection_name %}
{% assign collection_description = page.description | default: site.description %}
{% assign this_time_stamp = page.date | date: '%s' %}
{% assign latest_time_stamp = page.date | date: '%s' %}
{% assign rss_items_has_output = false %}
{% capture workspace__rss2__entries %}
{% for post in target_collection %}
{% if page.relative_path == post.relative_path or post.slug == 'feed' %}
{% continue %}
{% elsif post.slug == collection_name or post.slug == 'index' %}
{% continue %}
{% endif %}
{% assign rss_items_has_output = true %}
{% assign post_synopsis = post.description | default: post.excerpt %}
{% assign post_date_updated = post.date_updated | default: post.date %}
{% assign this_time_stamp = post_date_updated | date: '%s' %}
{% if latest_time_stamp < this_time_stamp %}{% comment %}> Syntax highlighting work-around{% endcomment %}
{% assign latest_time_stamp = this_time_stamp %}
{% endif %}
<item>
<title>{{- post.title | xml_escape -}}</title>
<link>{{- post.url | absolute_url -}}</link>
<guid isPermaLink="true">{{- post.url | absolute_url -}}</guid>
<pubDate>{{- post_date_updated | date: date_format -}}</pubDate>
<description>{{- post_synopsis | xml_escape -}}</description>
</item>
{% assign post_synopsis = nil %}
{% endfor %}
{% endcapture %}
{% assign page_rights = page.copyright | default: collection_home.copyright | default: site.copyright %}
{% assign page_rights = page_rights | default: site.github.license.name | default: 'All rights reserved' %}
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>{{- page.title | default: 'RSS Title' | xml_escape -}}</title>
<link>{{- page.url | absolute_url -}}</link>
<description>{{ collection_description | xml_escape }}</description>
<copyright>Copyright {{ site.time | date: '%Y' }} {{ page_author | xml_escape }}. {{ page_rights | xml_escape }}</copyright>
<lastBuildDate>{{- site.time | date: date_format -}}</lastBuildDate>
<pubDate>{{- latest_time_stamp | date: date_format -}}</pubDate>
<ttl>{{- page.time_to_live | default: '1800' -}}</ttl>
{% if rss_items_has_output %}
{{ workspace__rss2__entries | strip }}{% assign workspace__rss2__entries = nil %}
{% endif %}
</channel>
</rss>
{% endcapture %}{{ workspace__rss2 | strip }}{% assign workspace__rss2 = nil %}
...在集合目录中设置源文件将如下所示...
_example集合/示例集合.rss
---
layout: modules/feed-rss2/feed-rss2
title: Example Collection
collection_name: example-collection
collection_home: /example-collection/
date: 2019-07-23 21:12:13 -0700
content_type: xhtml
permalink: /:collection/:name:output_ext
---
...以及每个帖子/页面的 FrontMatter 的少量添加......
_example-collection/something-about-something.markdown
---
layout: post
title: Something About Something
description: Example collection page about something
date: 2019-07-21 11:42:11 -0300
time_to_live: 1800
---
...这应该呈现类似于 GitHub 页面托管的实时演示的结果。
请注意,请查看文档以了解更新和克隆提示和注意事项。
不管你是否使用上述项目的代码,我都会建议研究子模块
功能(提示 git help 子模块
),因为这些东西允许在多个存储库中重用代码,同时保持版本跟踪和轻松更新。此外,子模块与 GitHub Pages 兼容,这意味着子模块与第三方插件支持非常接近,无需探索持续集成解决方案即可获得。
另一个关键要点是,尝试利用这些类型的解决方案的布局。
如果您遇到卡住或上面的某些内容令人困惑,请随时发表评论。
扩展JoostS答案:
---
layout: null
---
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>{{ site.title }}</title>
<description>{{ site.description }}</description>
<link>{{ site.url }}</link>
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
<pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
<ttl>1800</ttl>
{% for post in site.pages %}
{% if post.title %}
<item>
<title>{{ post.title }}</title>
<description>{{ post.description }}</description>
<link>{{ site.url }}{{ post.url }}</link>
<guid isPermaLink="true">{{ site.url }}{{ post.url }}</guid>
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
</item>
{% endif %}
{% endfor %}
</channel>
</rss>