Last night, Chris mentioned that he's been wanting to set up an RSS feed for radio programmes available from iPlayer. All the bits were there - the excellent get_iplayer, MP3 converters, RSS and Google Listen for Android.
I also listen to the BBC's Friday Night Comedy podcast on the train, but miss out on the evening shows from Monday to Thursday while I'm travelling. Here's how I set up a private podcast feed.
Pre-requisites:- get_iplayer
- flvstreamer to download radio programmes with get_iplayer quickly (don't rely on mplayer).
- ffmpeg to convert from AAC, ensure your copy has MP3 support if you need it.
- id3v2 for get_iplayer to tag the resulting audio files.
- MP3::Podcast
to easily generate the RSS feed, plus a
small patch. I suggest using
cpanm
to build your own Perl libs dir like so:
cpanm -l ~/pvr/lib MP3::Podcast
get_iplayer has a great PVR mode which stores any set of command line arguments for search keywords, format and output options allowing you to run it in a one-shot mode to fetch all the current programmes. Here's my configuration, explained below:
get_iplayer --pvr-add r4comedy \
--type=radio --category=comedy --channel="4$" \
-o ~/downloads/pvr/r4comedy/ --nopurge \
--aactomp3 --mp3vbr=8 --modes=flashaacstd,flashaaclow --tag-fulltitle
Line 1: add a new PVR entry titled "r4comedy". View and manage PVR entries with
--pvr-list, --pvr-del etc.Line 2: search for radio comedy programmes on Radio 4 (the regex prevents Radio 4 Extra programmes from being returned).
Line 3: output directory, don't delete old ones.
Line 4: convert to MP3, variable bit rate, download in AAC and tag with the name of the show.
A small script on a cronjob runs get_iplayer --pvr and
regenerates the RSS feed using genpodcast.pl
from the MP3::Podcast examples:
#!/bin/bash
LIBDIR=/path/to/pvr
OUTDIR=/path/to/pvr/downloads
IPLAYER=/path/to/get_iplayer
$IPLAYER --pvr >/dev/null 2>&1
# Delete after 2 weeks
find $OUTDIR -name "*.mp3" -mtime +14 -delete
# Update RSS feeds
perl -I${LIBDIR}/lib/lib/perl5/ $LIBDIR/genpodcast.pl \
$OUTDIR "http://example.com/pvr" \
r4comedy "Radio 4 Comedy" > $OUTDIR/r4comedy/index.rss
And lastly the output directory is added to the Apache config so it's accessible:
Alias /pvr /path/to/pvr/downloads
<Directory "/path/to/pvr/downloads">
DirectoryIndex index.rss
</Directory>
The URL http://example.com/pvr/r4comedy/ can simply be added to your
podcast/RSS client.