#!/usr/bin/env zsh cd "$(git rev-parse --show-toplevel)" || exit 1 # Directory webdir="_site" postsdir="$webdir/posts" rssfile="$webdir/rss.xml" indexdir=".cache/rss" # maximal number of articles to put in the RSS file maxarticles=10 # RSS Metas rsstitle="her.esy.fun" rssurl="https://her.esy.fun/rss.xml" websiteurl="https://her.esy.fun" rssdescription="her.esy.fun articles, mostly random personal thoughts" rsslang="en" rssauthor="yann@esposito.host (Yann Esposito)" rssimgurl="https://her.esy.fun/img/FlatAvatar.png" # HTML Accessors (similar to CSS accessors) dateaccessor='pubDate' formatdate() { # format the date for RSS local d="$1" # echo "DEBUG DATE: $d" >&2 LC_TIME=en_US date --date $d +'%a, %d %b %Y %H:%M:%S %z' } isodate() { # format the date for sorting local d="$1" echo "DEBUG DATE: $d" >&2 LC_TIME=en_US date --date "$d" +'%Y-%m-%dT%H:%M:%S' } finddate(){ < $1 hxselect -c $dateaccessor } autoload -U colors && colors typeset -a dates dates=( ) tmpdir=$(mktemp -d) for fic in $indexdir/**/*.rss; do rssdate=$(finddate $fic) echo -n "${fic:r} [$d]" d=$(isodate $rssdate) dates=( $d $dates ) echo " [${fg[green]}OK${reset_color}]" cp $fic $tmpdir/$d-${${fic:h}:t}.rss done echo "Publishing" n=1 for fic in $(ls $tmpdir/*.rss | sort -r | head -n $maxarticles ); do echo "$((n++)) ${fic:t}" cat $fic >> $tmpdir/rss done rssmaxdate=$(formatdate $(for d in $dates; do echo $d; done | sort -r | head -n 1)) rssbuilddate=$(formatdate $(date)) { cat < ${rsstitle} ${websiteurl} ${rsslang} ${rssmaxdate} $rssbuilddate mkrss.sh ${rssauthor} ${rssimgurl} ${rsstitle} ${websiteurl} END cat $tmpdir/rss cat < END } > "$rssfile" # HACK TO UPDATE OLD RSS FEEDS legacyenrss="$webdir/Scratch/en/blog/feed/feed.xml" legacyfrrss="$webdir/Scratch/fr/blog/feed/feed.xml" mkdir -p "${legacyenrss:h}" mkdir -p "${legacyfrrss:h}" cp -f "$rssfile" "$legacyenrss" cp -f "$rssfile" "$legacyfrrss" rm -rf $tmpdir echo "* RSS [done]"