Better RSS and Hell

I think I’ve reached the limits of bash. I just wrote the grossest script to embed my posts into RSS <description> tags. This is so people can read my posts in their reader without coming to my site.

Behold. Filth:

RSS_ITEMS=()
echo "Creating RSS feed..."
cd "$BLOG_LOCATION"
for file in $BLOG_LOCATION/*.md; do
  NAME="$(basename "$file")"
  TITLE="$(grep "^title:" "$file" | sed 's/[^ ]* //')"
  EDIT_TIME="$(git log -1 --pretty="format:%ci" "$file" | cut -d" "  -f2)"
  PUB_DATE="$(date -d"${NAME%$FILE_PREFIX.md}" +"%a, %d %b %Y ${EDIT_TIME:-$RSS_TIME} $TIMEZONE")"
  DRAFT="$(grep "^draft:" "$file" | sed 's/[^ ]* //')"
  GUID="$(echo "$FILENAME $PUB_DATE" | md5sum | cut -f1 -d" ")"

  FILE_CONTENT=$(cat "${PARENT_PATH}out/blog/${NAME%$FILE_PREFIX.md}.html")
  FIXED_IMAGES=$(echo "$FILE_CONTENT" | sed "s/<img src=\"\./<img src=\"https:\/\/pfy\.ch\/blog/g" )
  FIXED_QUOTES=$(echo "$FIXED_IMAGES" | sed "s/\“/\"/g" | sed "s/\”/\"/g" | sed "s/\’/\'/g")
  FIXED_FILE="${FIXED_QUOTES#*</h1>}"

  if [ ! "$DRAFT" ]; then
    RSS_ITEMS+=("
      <item>
        <guid isPermaLink='false'>${GUID}</guid>
        <title>${TITLE}</title>
        <link>https://${DOMAIN_NAME}/blog/${NAME%$FILE_PREFIX.md}.html</link>
        <description><![CDATA[${FIXED_FILE%<\hr />*}]]></description>
        <pubDate>${PUB_DATE}</pubDate>
      </item>
    ")
  fi
done
cd "$PARENT_PATH"
RSS_STRING=$(printf '%s' "${RSS_ITEMS[@]}" | tr -d '\n')
RSS_OUTPUT="<?xml version='1.0' encoding='ISO-8859-1' ?>
<rss version='2.0' xmlns:atom='http://www.w3.org/2005/Atom'>
  <channel>
    <title>pfy.ch</title>
    <link>https://pfy.ch</link>
    <description>pfych blogs</description>
    <atom:link href='https://pfy.ch/rss.xml' rel='self' type='application/rss+xml' />
    $RSS_STRING
  </channel>
</rss>"
echo "$RSS_OUTPUT" > ./out/rss.xml

I hate it.

I will probably rewrite this script in something else now tbh. Idk what language though.

However! Now at least my site is more RSS friendly. Genuinely think more sites should use RSS.


contact at pfy dot ch