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

113 lines
3.2 KiB
Bash
Raw Normal View History

2024-04-28 15:23:20 +02:00
#!/bin/sh
help() {
2024-04-29 12:05:38 +02:00
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 ""
2024-04-28 15:23:20 +02:00
}
2024-04-28 17:58:16 +02:00
2024-04-29 12:05:38 +02:00
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}
;;
*)
2024-04-29 15:51:57 +02:00
echo "Invalid visibility option: --${OPTARG}"
2024-04-29 12:05:38 +02:00
exit 1
;;
esac
;;
h)
# Help
help
exit 1
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
shift $(($OPTIND - 1))
if [[ "$*" == "" ]]; then
2024-04-28 15:23:20 +02:00
help
exit 1
fi
2024-04-28 17:58:16 +02:00
today() {
2024-04-28 15:23:20 +02:00
# Checks if pubDate is $TODAY
2024-04-29 12:05:38 +02:00
echo "Checking if the post pubblication days is ${TODAY}"
2024-04-28 15:23:20 +02:00
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
}
2024-04-28 17:58:16 +02:00
yes_or_no() {
while true; do
read -p "$* [y/n]: " yn
case $yn in
2024-04-29 12:05:38 +02:00
[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 ;;
2024-04-28 17:58:16 +02:00
esac
done
}
2024-04-28 15:23:20 +02:00
cleanup () {
rm -f feed.xml
2024-04-28 17:58:16 +02:00
rm -f status.txt
2024-04-28 15:23:20 +02:00
exit $1
}
echo "Downloading latest XML feed…"
2024-04-29 12:05:38 +02:00
wget -q -O feed.xml $*
2024-04-28 15:23:20 +02:00
if ! [[ $? == "0" ]]; then echo "Error."; cleanup 1; else echo "Done."; fi
# Check if downloaded file has <rss> tag
2024-04-28 15:41:43 +02:00
grep -q '<rss' feed.xml
if ! [[ $? == "0" ]]; then echo "This is not a RSS feed. Exiting."; cleanup 1; fi
2024-04-28 15:23:20 +02:00
# 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
2024-04-28 17:58:16 +02:00
echo "\nCopy and Paste this:\n\n+++++"
echo "Latest article from my blog: \"$TITLE\"\n\n$LINK"
echo "+++++"
2024-04-29 17:09:18 +02:00
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
2024-04-28 15:23:20 +02:00
cleanup 0