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

83 lines
2.4 KiB
Bash
Raw Normal View History

2024-04-28 15:23:20 +02:00
#!/bin/sh
### get-last-rss-post.sh
### Usage: ./get-last-rss-post.sh [-t] URL
###
### Downloads the RSS feed of the URL and checks the latest post.
### It provides a simple way to copy/paste the Title and Link of the post.
### Arguments:
### -t | --today Checks if the Publication Date of the post is Today.
### If not, it exits.
help() {
sed -rn 's/^### ?//;T;p' "$0"
}
2024-04-28 17:58:16 +02:00
2024-04-28 15:23:20 +02:00
if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]] || [[ "$1" == "" ]]; then
help
exit 1
fi
if [[ "$1" == "-t" ]] || [[ "$1" == "--today" ]]; then
TODAY=$(date +'%d %b %Y')
echo "Checking if the post pubblication days is ${TODAY}"
set -- "$2" # Reset arguments - link becomes $1
CHECK_TODAY=1
fi
2024-04-28 17:58:16 +02:00
today() {
2024-04-28 15:23:20 +02:00
# Checks if pubDate 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
}
2024-04-28 17:58:16 +02:00
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; return 0 ;;
[Nn]*) echo "Exiting." ; exit 0 ;;
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…"
wget -q -O feed.xml $1
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-28 18:01:16 +02:00
yes_or_no "Post the it as status?"
2024-04-28 15:23:20 +02:00
cleanup 0