#!/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 " There is also set of funny(?) random variants of the message." 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." 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 echo_msg () { echo "\n+++++" echo "$EXPRESSION \"$TITLE\"\n\n$LINK" echo "+++++\n" } 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]es/[N]o/[R]andom: " ynr case $ynr in [Yy]*) echo "$EXPRESSION \"$TITLE\"\n\n$LINK" | \ /opt/homebrew/bin/toot post -v $VISIBILITY ; return 0 ;; [Nn]*) echo "Exiting." ; cleanup 0 ;; [Rr]*) echo "\nPicking up a new expression:"; random; echo_msg ;; 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 tag grep -q ' feed.xml # Find 2nd clean title (1st post) and replaces / with \/ TITLE=$(awk '//{++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:" echo_msg 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