ffpodcast.sh¶
A podcast downloader in Bash.
About (or so)¶
flip@ds508 ~/Musik/Podcasts $ ./ffpodcast.sh -h
ffpodcast.sh -- flipflip's podcast downloader, revision 698 $
About:
ffpodcast.sh is a podcast downloader. It has very few dependencies and almost
everything is implemented in Bash. Why you ask? Because it's fun.. :)
Usage:
ffpodcast.sh [options] <file|url> | -h | -d
-p path Sets the directory to download podcasts to (defaults to $PWD).
-n int Number of podcasts to download. 0 means all available (defaults to 0).
-s expr Specifies file rename expression of the form regex/repl, where regex is
an extended regular expression as described in bash(1) and regex(7) and
repl is the replacement string. Back references are allowed.
-a Preserves original modification date (even with -t, -x and -g).
-t rule Set tags according to the rule specified. Only available with id3v2.
See 'Tagging' below.
-x prg Run post-processing programme prg after download, tagging and mp3gain
with these arguments: full path to mp3 file, original mp3 file name,
download directory.
-X args Arguments to pass (append) to the post-processing programme.
-g Run mp3gain on downloaded files (only with mp3gain and .mp3 files).
-h Prints usage info (this screen).
-q Sets quiet operation.
-d Increases debug level (overrides -q). Currently -d -d -d is the maximum.
Debug and error messages and warnings are sent to stderr. First -d
enabled standard debug messages. Second -d shows stuff that
otherwise would be redirected to /dev/null. Third -d shows XML
parsing results, which might be a lot of bytes.
file/url Path to a local file or a http:// URL to a podcast feed file (XML, OPML).
Dependencies:
GNU bash >= 3.1 (maybe 3.2, not sure), GNU wget >= 1.10.2, GNU du, cp, rm and
date (i.e. GNU coreutils), and optionally, id3v2 >= 0.1.11 (id3lib >= 3.8.3),
mp3gain >= 1.4.6, stat and touch.
Files:
The files /etc/ffpodcastrc and ~/.ffpodcastrc are sourced by the script if
they exist.
Environment Variables:
WGET, DU, CP, MV, RM, DATE, MP3GAIN, ID3V2, STAT and TOUCH may point to the
appropriate binaries. TMPDIR may point to a temporary directory. COLUMNS may
be set (or rather exported) for formatted screen output. Alternative
arguments to wget and mp3gain calls may be set through FFPODCAST_WGETARGS and
FFPODCAST_MP3GAINARGS, respectively. See -d for the defaults. Output (stdout
and stderr) of external programmes (e.g. wget) are redirected to
FFPODCAST_DEVNULL (e.g. /dev/stderr), which defaults to /dev/null. See also
Character Encoding below.
Character Encoding
The environment variable FFPODCAST_DECODE may contain a list of user-supplied
routines, which are called to decode (convert) strings from the podcast XML
file and the tags to other charsets. It defaults to a number of internal decoding
routines, which converts a most latin1 characters to UTF-8. These routines
is not very sophisticated. It might mess up the strings. See also example below.
Tagging (only available if you have id3v2):
rule = title%artist%album%year%genre%comment, where each field is a string
which will be used as the tag. If the string is empty the respective
tag field will not be modified. The year field must be an integer value.
The following keywords will be replaced with the appropriate content. The
keyword must be single words separated from other content by white space
(e.g. "[year]" won't work but "[ year ]" will work).:
chtitle = channel title
chauthor = channel author
chdesc = channel description
title = podcast title
subtitle = podcast subtitle
desc = podcast description
author = podcast author
summary = podcast summary
year = current year (4 digits)
empty = empty string (useful to remove a tag)
The tagging routine writes id3v2 tags only and removes all other tags. Only
TPE1 (artist), TALB (album), TYER (year), TCON (genre) and COMM (comments)
frames (tags) are processed. All others are stripped from the file.
Multiple comment frames are concatenated.
Examples:
BBC Today podcasts are named according to the scheme 'today_YYYYMMDD.mp3'. To
rename the file to something better readable, you could use something like this:
ffpodcast.sh -s 'today_(....)(..)(..).*.mp3/Today_1-2-3.mp3' ...
Many podcasts have weird tags. To clean up the title, the album and the genre
as well as to set the current year and to insert the description from the feed
meta data (XML) as a comment, use:
ffpodcast.sh -t "%DRS%Echo der Zeit%year%Radio%desc" ...
Quotes must be escaped:
ffpodcast.sh -t "%DRS%Echo "der" Zeit%year%Radio%desc" ...
To keep all original tags but remove all comments:
ffpodcast.sh -t "%%%%empty" ...
To add lots of comments:
ffpodcast.sh -t "%DRS%Echo der Zeit%year%Radio%subtitle -- year -- desc -- chtitle -- chdesc"
To check if the parameters are within limits, call ffpodcast.sh without an URL or file:
ffpodcast.sh -d [options]
To convert all latin1 characters to UTF-8 you could use (in the rcfile):
function myconvert() { echo "" | iconv -cs -f latin1 -t utf8; }
FFPODCAST_DECODE=myconvert
To do no conversion at all, use FFPODCAST_DECODE="".
Author:
Copyright (c) 2007-2009 Philippe Kehl <flipflip at gmx dot net>.
License:
This is Free Software. See the source code and the file 'COPYING'.
Credits:
The Internet et al.
"Radish"
Examples¶
See the included files drs.sh and bbc.sh.
Download¶
- ffpodcast_sh-698.zip (21 kb)
Changes¶
From revision 1.19 to 698:
- re-engineered deocde_string() to overcome Radio DRS› «multiple encodings in tags and XML» policy.
- A few minor bug fixes.
From revision 1.17 to 1.19:
- decode_latin1() now decodes all (?) entities to UTF-8.
- a few minor patches from Radish. Thanks!
- probably more.
created: 2008-06-01, updated: 2015-10-10