Get-Last-RSS-Post/get-last-rss-post.sh

113 lines
3.2 KiB
Bash
Executable File

#!/bin/sh
help() {
echo "Usage: $0 [-d] [-t VISIBILITY] [-h] URL"
echo ""
echo " Downloads the RSS feed of the URL and checks the latest post."
echo " It provides a simple way to copy/paste the Title and Link of the post."
echo " If toot is installed, it can post the status with custom visibility."
echo " Arguments:"
echo " -d Checks if the Publication Date of the post is Today."
echo " If not, it exits."
echo " -t Post the link with toot. A prompt will ask confirmation."
echo " Accepted value: direct, unlisted, public, private"
echo " -h Displays this message."
echo ""
}
while getopts ":dt:h" opt; do
case $opt in
d)
TODAY=$(date +'%d %b %Y')
CHECK_TODAY=1
;;
t)
TOOT=1
case "${OPTARG}" in
direct|unlisted|public|private)
VISIBILITY=${OPTARG}
;;
*)
echo "Invalid visibility option: --${OPTARG}"
exit 1
;;
esac
;;
h)
# Help
help
exit 1
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
shift $(($OPTIND - 1))
if [[ "$*" == "" ]]; then
help
exit 1
fi
today() {
# Checks if pubDate is $TODAY
echo "Checking if the post pubblication days is ${TODAY}"
echo $PUB_DATE | grep -q "$TODAY"
if [[ "$?" == "0" ]]; then # pubDate is $TODAY
echo "Published Date is today - good!"
else
echo "ERROR. Published Date is different than today. Exiting."
cleanup 1
fi
}
yes_or_no() {
while true; do
read -p "$* [y/n]: " yn
case $yn in
[Yy]*) echo "Latest article from my blog: \"$TITLE\"\n\n$LINK" | \
/opt/homebrew/bin/toot post -v $VISIBILITY ; return 0 ;;
[Nn]*) echo "Exiting." ; cleanup 0 ;;
esac
done
}
cleanup () {
rm -f feed.xml
rm -f status.txt
exit $1
}
echo "Downloading latest XML feed…"
wget -q -O feed.xml $*
if ! [[ $? == "0" ]]; then echo "Error."; cleanup 1; else echo "Done."; fi
# Check if downloaded file has <rss> tag
grep -q '<rss' feed.xml
if ! [[ $? == "0" ]]; then echo "This is not a RSS feed. Exiting."; cleanup 1; fi
# Find 2nd clean title (1st post) and replaces / with \/
TITLE=$(awk '/<title>/{++n; if (n==2) {print; exit}}' feed.xml | sed 's/<title>//g; s/<\/title>//g; s/^ *//g')
# Find the link of the article
LINK=$(grep -A1 "$TITLE" feed.xml | tail -n 1 | sed 's/<link>//g; s/<\/link>//g; s/ //g')
# Replace / with \/ in the link
LINK_FIXED=$(echo $LINK | sed 's./.\\/.g')
# Print whole post until pubDate tag, saves the PUB_DATE
PUB_DATE=$(sed -n "/<link>$LINK_FIXED/,/pubDate/p" feed.xml | tail -n 1 | sed 's/<pubDate>//g; s/<\/pubDate>//g')
if [[ "$CHECK_TODAY" == "1" ]]; then today; fi
echo "\nCopy and Paste this:\n\n+++++"
echo "Latest article from my blog: \"$TITLE\"\n\n$LINK"
echo "+++++"
if [[ "$TOOT" == "1" ]]; then
which toot > /dev/null # Check if toot is installed
if ! [[ $? == "0" ]]; then echo "ERROR. Toot is not installed. Exiting."; cleanup 1; fi
yes_or_no "Post it on Mastodon?"
fi
cleanup 0