I have been using bashpodder for years as my podcatching client. For those that don’t know bashpodder is a shell script written by Linc Fessenden of the The Linux Link Tech Show and it is a simple sysadmin solution to a problem.
- The problem: “get podcasts from the Intenet”
- The solution: “assemble unix commands into a shell script and run from cron”
For sysadmins while the problem may vary but the solution is always the same :). I’m not embarrassed to say that bashpodder.shell inspired a lot of my own scripts and as a result I have gotten more familiar with the underlying tools like date, mkdir, wget, tr, sed, awk, cat, sort, uniq and grep.
Over the years people (including myself) have modified the script to tailor it to their own personal needs. A few months back I was looking at the amount of changes that I had made and I have to say a lot of the elegance of Linc’s original masterpiece was lost. So I downloaded a fresh version of bashpodder and started the task of adding all the changes that I had made, most of which were adaptations that other users had contributed back. As I was browsing the site I realised that the majority of changes that I needed were already implemented by Chess Griffin’s mashpodder.
Chess mentioned that he had ‘forked’ bashpodder on the (sadly no longer produced but still required listening) Linux Reality Podcast. I looked at it at the time I didn’t make a the jump because of the investment that I had made in bashpodder. However now after looking through the code for mashpodder I realised that most of the functionality I needed was already included.
If you change, one of the major changes you will notice is in the mp.conf file which is where you add the lists of podcasts. Where the bp.conf file of bashpodder only had the option for the URL of the feed you wanted to subscribe to, mashpodder has two extra fields. Rather than explain it myself here is the comments that Chess had added to the default mp.conf file.
# Mashpodder sample mp.conf
# $Id: mp.conf 2 2009-01-29 22:36:28Z chess.griffin $
# Three fields, separated by spaces:
# Field 1: rss feed
# Field 2: name_of_directory or 'date'
# Field 3: 'all' or 'none' or 'update' or a number greater than 0
# Field 1 is self explanatory. Field 2 is where the episodes will be saved,
# either in a user-named directory or a date-based directory. Put the word
# 'date' if you want date-based directories. Field 3 is how many episodes to
# fetch. The term 'update' means episode names will be saved as if they were
# downloaded but nothing will actually be downloaded.
I was able to put my music podcasts in an output folder and my “talk” podcasts in a folder called fast so that I could speed them up and convert them to ogg first.
One caveat I found was that if I put all in the last field, mashpodder took a long time to run. Not that it was a major issue given I am running it in cron. I discovered that with the setting all mashpodder would check each file in a feed to see if it was downloaded. When I changes the last field to 3 it sped up considerably.
[edit: Should be in the podcast section – sorry Linc]