From 3cb303fc1ba13a65f0af1a29209ae3e85e494d87 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Fri, 5 Mar 2021 10:22:51 +0100 Subject: Create a news feed per tag --- bin/make-feeds | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100755 bin/make-feeds (limited to 'bin/make-feeds') diff --git a/bin/make-feeds b/bin/make-feeds new file mode 100755 index 0000000..d8df2c9 --- /dev/null +++ b/bin/make-feeds @@ -0,0 +1,71 @@ +#!/bin/sh + +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU Affero General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +# details. + +readonly ROOTDIR="$(CDPATH="" cd -- "$(dirname -- "$0")/.." && pwd -P)" + +main() +{ + # Handle opts + while getopts ":h" opt + do + case "$opt" in + h) usage && exit 0 ;; + *) + printf "Invalid option passed: %s\n" "$OPTARG" >&2 + ;; + esac + done + + shift $(( OPTIND - 1 )) + + # Make a list of all unique tags + tags="$(mktemp)" + awk '/^tags:/ { for (i=2; i<=NF; i++) print $i }' "$ROOTDIR/src/_posts/"* \ + | sort \ + | uniq \ + > "$tags" + + # Create a feed for each tag + mkdir -p -- "$ROOTDIR/src/feed" + mkdir -p -- "$ROOTDIR/src/atom" + + while read -r tag + do + lc_tag="$(printf "%s" "$tag" | tr "[:upper:]" "[:lower:]")" + + echo "Creating RSS 2.0 feed for $lc_tag" + TAG="$tag" envsubst < "$ROOTDIR/share/feed-rss2.xml" > "$ROOTDIR/src/feed/$lc_tag.xml" + + echo "Creating Atom feed for $lc_tag" + TAG="$tag" envsubst < "$ROOTDIR/share/feed-atom.xml" > "$ROOTDIR/src/atom/$lc_tag.xml" + + unset lc_tag + done < "$tags" + + # Clean up + rm -f -- "$tags" +} + +usage() +{ + cat <