Site Map - skip to main content - dyslexic font - mobile - text - print

Hacker Public Radio

Your ideas, projects, opinions - podcasted.

New episodes Monday through Friday.

hpr1362 :: Fixing a bad RSS feed

Perl scripts to modify broken RSS feeds on the fly

<< First, < Previous, Latest >>

Host Image
Hosted by Dave Morriss on 2013-10-22 is flagged as Explicit and is released under a CC-BY-SA license.
Listen in ogg, spx, or mp3 format. | Comments (0)

There have been problems with the podcast feed for "mintCast", apparently as a result of a bug in Wordpress. The feed contains multiple "enclosure" tags containing the same audio over and over again. While the mintCast hosts are looking for a fix I would like to find a local work-around.

I have also encountered a problem with the "Pod Delusion Extra" feed which contains multiple enclosures in some episodes. Unlike the "mintCast" example I don't want to lose these enclosures but want to find a way of repackaging them into individual episodes.

These problems affect some podcatchers, the modified Bashpodder I use being amongst them. To counteract this problem I have written two short Perl scripts to copy and clean each feed before submitting it to my podcatcher.

Detailed notes:


Subscribe to the comments RSS feed.

Comment #1 posted on 2013-10-25T16:40:37Z by Ken Fallon

There is another way

While there usually is another way with perl, this time there is another way with the xslt. This is the xpath will select only the @type where the string is set to "audio/ogg" and then only display the first one.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="" xmlns:exslt="" xmlns:content="" xmlns:wfw="" xmlns:dc="" xmlns:atom="" xmlns:sy="" xmlns:slash="" xmlns:georss="" xmlns:geo="" xmlns:media="" version="1.0" extension-element-prefixes="exslt">
<xsl:output omit-xml-declaration="yes" indent="no" method="text"/>
<xsl:template match="/">
<xsl:for-each select="/rss/channel/item/enclosure[@type=&quot;audio/ogg&quot;][1]">
<xsl:call-template name="value-of-template">
<xsl:with-param name="select" select="@url"/>
<xsl:value-of select="'&#10;'"/>
<xsl:template name="value-of-template">
<xsl:param name="select"/>
<xsl:value-of select="$select"/>
<xsl:for-each select="exslt:node-set($select)[position()&gt;1]">
<xsl:value-of select="'&#10;'"/>
<xsl:value-of select="."/>

Leave Comment

Powered by Comment Script