149 lines
4.5 KiB
Bash
Executable File
149 lines
4.5 KiB
Bash
Executable File
#!/bin/sh
|
|
help() {
|
|
echo "Usage: $0 [-d] [-r] [-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 " -r Uses a random expression. Possibly funny."
|
|
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 ":drt:h" opt; do
|
|
case $opt in
|
|
d)
|
|
TODAY=$(date +'%d %b %Y')
|
|
CHECK_TODAY=1
|
|
;;
|
|
r)
|
|
RANDOMIZE=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
|
|
}
|
|
|
|
random() {
|
|
EXPRESSIONS=("Latest article on my blog:"
|
|
"Latest rant on my blog:"
|
|
"Check out my latest post!"
|
|
"New. Blog. Post. NOW!"
|
|
"Just wrote a new blog post:"
|
|
"Just hit some random keys on the keyboard and pressed \"Publish\":"
|
|
"Just hit some random keys on my keyboard:"
|
|
"New thoughts:"
|
|
"New wordvomit:"
|
|
"I could have used some cool app to publish this post. Instead I used a script. 🤖"
|
|
"100 PRINT \"NEW BLOG POST\"\n200 PRINT"
|
|
"Yet another article on my blog."
|
|
"🤖 This is a random sentence chosen by a Bash script.\nSorry if it doesn't make much sense.\nAnd this is my new blog post:"
|
|
"Roses are red. Violets are blue. Here is a new blog post:"
|
|
"Sit down, grab a cup of tea, and click here for a new article on my blog:"
|
|
"🧠 -> 🧑💻 ->"
|
|
"$ cat new_blog_post.md\n"
|
|
"🤖 Beep. Boop. I'm a script to share my new blog post:")
|
|
EXPRESSION=${EXPRESSIONS[ $RANDOM % ${#EXPRESSIONS[@]} ]}
|
|
}
|
|
|
|
yes_or_no() {
|
|
while true; do
|
|
read -p "$* [y/n]: " yn
|
|
case $yn in
|
|
[Yy]*) echo "$EXPRESSION \"$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 feed_old.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
|
|
|
|
# Clean up RSS from tabs
|
|
mv feed.xml feed_old.xml; cat feed_old.xml | tr -d ' ' > feed.xml
|
|
|
|
# Find 2nd clean title (1st post) and replaces / with \/
|
|
TITLE=$(awk '/<title>/{++n; if (n==2) {print; exit}}' feed.xml | sed -e 's/<title>\(.*\)<\/title>/\1/' | xargs)
|
|
#echo "TITLE: $TITLE"
|
|
|
|
# Find the link of the article
|
|
LINK=$(grep -A1 "<title>$TITLE" feed.xml | tail -n 1 | sed 's/<link>\(.*\)<\/link>/\1/' | xargs)
|
|
#echo "LINK: $LINK"
|
|
|
|
# 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
|
|
|
|
EXPRESSION="Latest article on my blog:"
|
|
if [[ "$RANDOMIZE" == "1" ]]; then random; fi
|
|
|
|
echo "\nCopy and Paste this:\n\n+++++"
|
|
echo "$EXPRESSION \"$TITLE\"\n\n$LINK"
|
|
echo "+++++\n"
|
|
|
|
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
|
|
ACCOUNT=$(toot auth | grep ACTIVE | awk '{print $2}')
|
|
yes_or_no "Post it on Mastodon (as $ACCOUNT)?"
|
|
fi
|
|
|
|
cleanup 0 |