During the last few months I managed to automate many recurring tasks on my NAS. One good example for those task is updating my podcast archive. I tried to accomplish this using a lightweight shell script which, running as a cronjob, would hold my podcast archive up to date and notify me about new episodes via push notifications.
Now that this script is serving for months without any problems, I publish it here.
It runs unmodified on any common GNU/Linux distribution as well as
FreeBSD and OS X. It depends on bash
, wget
, sed
and xargs
but checks those
dependencies on startup.
Just set the $PODCAST_DIR
variable to your podcast folder. Then you can specify
each podcast subscription in a separate line like this:
download_files_from_feed <Feed-URL> $PODCAST_DIR/<Podcast-Name>
The script downloads all episodes listed in the RSS feed to the specified target directory. Afterwards, a list of all files added within the last 24 hours is displayed.
I’m publishing this script without any license so feel free to use it in any way you want.
#!/usr/bin/env bash
# The following script parses podcast feeds and downloads all podcast episodes listed in
# the feed if they don't exist within the target path. The target directory will be created
# if it does not exist.
[ -x "$(command -v wget)" ] || (echo "wget is not installed" && exit 1)
[ -x "$(command -v sed)" ] || (echo "sed is not installed" && exit 1)
[ -x "$(command -v xargs)" ] || (echo "xargs is not installed" && exit 1)
function download_files_from_feed {
[ -d $2 ] || mkdir -p $2
cd $2
wget -nc $(wget -q -O - $1 | sed -n 's/.*enclosure.*url="\([^"]*\)" .*/\1/p')
}
function echo_update_stats {
PODCAST_UPDATE_LIST=$(find $1 -ctime -1 -type f)
echo "All podcasts updated."
if [ -n "$PODCAST_UPDATE_LIST" ]
then
echo -e "\nNew episodes within the last 24 hours:"
echo $PODCAST_UPDATE_LIST | xargs basename | xargs printf "* %s\n"
else
echo "No new episodes are available."
fi
}
# Download audio files from podcast feeds.
# Feed subscriptions are exemplified below.
PODCAST_DIR=/storage0/podcasts
download_files_from_feed http://logbuch-netzpolitik.de/feed/m4a $PODCAST_DIR/LogbuchNetzpolitik
download_files_from_feed http://freakshow.fm/feed/m4a $PODCAST_DIR/Freakshow
download_files_from_feed http://cre.fm/feed/m4a $PODCAST_DIR/CRE
# This one's sending notifications to my phone but might not be useful for you
#/root/send_notification.sh "$(echo_update_stats $PODCAST_DIR)"
echo_update_stats $PODCAST_DIR