#!/bin/bash # By Linc 10/1/2004 # Find the latest script at http://linc.homeunix.org:8080/scripts/bashpodder # Last revision 07/01/2005 - Many Contributers! # If you use this and have made improvements or have comments # drop me an email at linc dot fessenden at gmail dot com # I'd appreciate it! #Revised on 2005-11-06 by Jyotirmoy Bhattacharyya # (jmoy dot matecon at gmail dot com) #Added locking code LOCKFILE="lock.bashpodder" instance_lock () { TEMPFILE="temp.$$" echo $$ > $TEMPFILE || { echo "Could not create lock file" return 1 } trap "rm -f $TEMPFILE; exit" SIGINT SIGTERM ln $TEMPFILE $LOCKFILE >& /dev/null && { rm -f $TEMPFILE trap "rm -f $LOCKFILE; exit" SIGINT SIGTERM return 0 } kill -0 `cat $LOCKFILE` >& /dev/null && { rm -f $TEMPFILE return 1 } echo "Removing stale lock file" rm -f $LOCKFILE ln $TEMPFILE $LOCKFILE >& /dev/null && { rm -f $TEMPFILE trap "rm -f $LOCKFILE; exit" SIGINT SIGTERM return 0 } rm -f $TEMPFILE trap - SIGINT SIGTERM return 1 } # Make script crontab friendly: cd $(dirname $0) # datadir is the directory you want podcasts saved to: datadir=$(date +%Y-%m-%d) # Check for and create datadir if necessary: if test ! -d $datadir then mkdir $datadir fi #Check if another instance is already running instance_lock || { echo "An instance of bashpodder is already running"; exit 1 } # Delete any temp file: rm -f temp.log # Read the bp.conf file and wget any url not already in the podcast.log file: while read podcast do file=$(wget -q $podcast -O - | xsltproc parse_enclosure.xsl - 2> /dev/null) || file=$(wget -q $podcast -O - | tr '\r' '\n' | tr \' \" | sed -n 's/.*url="\([^"]*\)".*/\1/p') for url in $file do if ! grep -q "$url" podcast.log then wget -q -P $datadir "$url" && echo $url >> temp.log fi done done < bp.conf # Move dynamically created log file to permanent log file: cat podcast.log >> temp.log sort temp.log | uniq > podcast.log rm temp.log # Create an m3u playlist: ls $datadir | grep -v m3u > $datadir/podcast.m3u #Release lock rm -f $LOCKFILE