FireFly Media Server › Firefly Media Server Forums › Firefly Media Server › Setup Issues › Playlists and Podcasts › Reply To: Playlists and Podcasts
04/11/2007 at 11:09 PM
#13257
sonichouse
Participant
I couldn’t get gregarius to work on my slug with cherokee, so I hacked this bashpodder script.
I then set up cron to check every 4 hours.
bash-3.2# cat /etc/crontab
SHELL=/bin/sh
PATH=/opt/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/
#
Default is Empty
#
0 0-23/8 * * * root /usr/sbin/CheckDiskFull &>/dev/null
0 0 * * * root /usr/sbin/WatchDog &>/dev/null
1 * * * * root /usr/sbin/hwclock -s &>/dev/null
15 */4 * * * root /share/hdd/data/public/mp3/bashpodder.sh -p
All my podcasts get dumped into a directory, playlist is generated, and I delete old podcasts.
#!/opt/bin/bash
# By Linc 10/1/2004
# Find the latest script at http://linc.homeunix.org:8080/scripts/bashpodder
# Last revision 10/23/2004 - The Lee Colleton/Wari Wahab/Dann Washko version.
# 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!
#VARS
PATH=/opt/bin:/sbin:/bin:/usr/sbin:/usr/bin
log=podcast.log
conf=bp.conf
playlist=podcast.m3u
numitems=3
maxdays=35
FIREFLY=192.168.100.77
FIREFLYPORT=3689
#usage function to print usage.
usage()
{
builtin echo -e >&2
"usage: $0 [-p] [-l] [-h] n -p make playlist n -l keep log trimmed n -h print this help"
exit 1;
}
#getopts for playlist and log trimming. (JCE)
while getopts plh opt
do
case "${opt}" in
p) pl=set;; # playlist switch
l) lt=set;; # log trim
h) hlp=set;; # show help exit
?) usage # unknown flag
exit 1;;
esac
done
shift $(($OPTIND - 1))
#check for help flag.
if [ "${hlp}" == "set" ]; then
usage
fi
# Quickie change to make the script more cron friendly
# Contributed by Wari Wahab
workdir=`dirname ${0}`
cd ${workdir}
# datadir is the directory you want the audio files to be put into
# I used a date string which will create a new directory every day
# Changed to iso date format as suggested by Lee Colleton!
# Updated to work on OSX by Dann Washko
# datadir=`date +%Y-%m-%d`
# SPF - set datadir to a fixed directory
datadir=podcasts
# test for existance of data directory and create if not there
if [ ! -d ${datadir} ]
then
mkdir ${datadir}
fi
# SPF - If this is the first time, touch podcast.log to shut up the grep below.
if ! [ -e ${log} ]
then
touch ${log}
fi
# Read the conf file for rss feeds you wish to grab audio from
# Used the sed line from Rodrigo Stulzer to better take care of
# non-standard rss. (JCE)
IFS_T=${IFS}
IFS='
'
I=0
while read url
do
urlcount=0;
for url in $(wget -q ${url} -O - | sed 's/<enclosure/n<enclosure/g' | grep "<enclosure " | tr ' " | sed -n 's/.*url="([^"]*)".*/1/p')
do
# limit podcasts to numitems downloaded
urlcount=$(( $urlcount + 1 ))
if ! grep "${url}" ${log} > /dev/null
then
if [ $urlcount -le $numitems ] ; then
wget -q -P ${datadir} ${url}
echo ${url} >> ${log}
((I += 1))
fi
fi
#save all urls for uptodate log file
#if -l flag is thrown
if [ "${lt}" == "set" ]; then
NEWLOG[${I}]=${url}
fi
done
done < ${conf}
IFS=${IFS_T}
#Write a new log file containing only urls in current rss feeds.
#if -l flag is thrown.
if [ "${lt}" == "set" ]; then
rm ${log}
for urllog in "${NEWLOG[@]}"; do
echo ${urllog} >> ${log}
done
fi
# SPF - Remove old files
removals=`find ${datadir} -maxdepth 1 -type f -mtime +${maxdays}|wc -l`
if [ $removals -ge 1 ]; then
echo "Removing ${removals} files"
find ${datadir} -maxdepth 1 -type f -mtime +${maxdays} -exec rm {} ;
fi
# That's it!
# Oh yeah, you probably want an m3u playlist (at least I do)
# added a switch for making the play list (JCE)
if [ "${pl}" == "set" ] ; then
ls ${datadir} | grep -v m3u > ${datadir}/${playlist}
fi
# SPF - Update Firefly by forcing a scan if files downloaded/deleted
if [ $(($I + $removals)) -ge 1 ]; then
wget --delete-after -q "http://mt-daapd:mt-daapd@${FIREFLY}:${FIREFLYPORT}/config-update.html?action=rescan"
fi
My bp.conf file is
http://downloads.bbc.co.uk/podcasts/fivelive/drkarl/rss.xml
http://downloads.bbc.co.uk/podcasts/worldservice/scia/rss.xml
http://downloads.bbc.co.uk/podcasts/radio4/fricomedy/rss.xml
http://downloads.bbc.co.uk/podcasts/radio2/ross/rss.xml
http://www.dailysourcecode.com/feed.xml
You just need to ensure bash and wget are installed. YMMV
Steve