c3d2-web/xsl/podcast.xsl

260 lines
10 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- Spezifikation:
http://www.apple.com/itunes/store/podcaststechspecs.html
-->
<xsl:stylesheet version="1.0"
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
exclude-result-prefixes="xsl date">
<xsl:output method="xml"
version="1.0"
encoding="utf-8"
indent="yes"/>
<xsl:include href="common.xsl" />
<xsl:variable name="baseurl">http://www.c3d2.de/</xsl:variable>
<xsl:param name="selection" select="''"/>
<xsl:template match="news">
<rss version="2.0">
<channel>
<xsl:choose>
<xsl:when test="$selection = 'pentaradio' or $selection = 'pentamedia'">
<title>Pentaradio</title>
<link><xsl:value-of select="$baseurl"/>radio.html</link>
<description>C3D2 Pentaradio</description>
<language>de</language>
<copyright>http://creativecommons.org/licenses/by-sa/2.0/de/</copyright>
<itunes:subtitle>Radio vom CCC Dresden</itunes:subtitle>
<itunes:summary>
Pentaradio sind die Sendungen des Chaos Computer Club Dresden auf coloRadio, bestehend aus einem informativen Rahmenprogramm und Beiträgen zu einem sendungsspezifischen Thema.
</itunes:summary>
<itunes:image href="{$baseurl}images/pentaradio.png" />
<itunes:category text="Society &amp; Culture"/>
<itunes:category text="Technology">
<itunes:category text="Tech News"/>
</itunes:category>
</xsl:when>
<xsl:when test="$selection = 'pentacast' or $selection = 'pentamedia'">
<title>Pentacast</title>
<link><xsl:value-of select="$baseurl"/>podcast.html</link>
<description>C3D2 Pentacast</description>
<language>de</language>
<copyright>http://creativecommons.org/licenses/by-sa/2.0/de/</copyright>
<itunes:subtitle>Podcasts vom CCC Dresden</itunes:subtitle>
<itunes:summary>
Pentacast sind themenspezifische Sendungen des Chaos
Computer Club Dresden.
</itunes:summary>
<itunes:image href="{$baseurl}images/pentacast.png" />
<itunes:category text="Society &amp; Culture"/>
<itunes:category text="Technology"/>
</xsl:when>
<xsl:when test="$selection = 'pentamusic' or $selection = 'pentamedia'">
<title>Pentamusic</title>
<link><xsl:value-of select="$baseurl"/>pentamusic.html</link>
<description>C3D2 Pentamusic</description>
<language>de</language>
<copyright>http://creativecommons.org/licenses/by-sa/2.0/de/</copyright>
<itunes:subtitle>Musikvorstellungen vom CCC Dresden</itunes:subtitle>
<itunes:summary>
Versuch, Künstler, Bands und Labels der CC-Szene vors
Mikro zu holen um diese einer breiteren Öffentlichkeit
bekannt zu machen.
</itunes:summary>
<itunes:image href="{$baseurl}images/pentacast.png" />
<itunes:category text="Society &amp; Culture"/>
<itunes:category text="Music"/>
</xsl:when>
<xsl:otherwise>
<title>C3D2 Podcast</title>
<link><xsl:value-of select="$baseurl"/></link>
<description>C3D2 Podcast</description>
<language>de</language>
<copyright>http://creativecommons.org/licenses/by-sa/2.0/de/</copyright>
<itunes:subtitle>Radio &amp; Podcasts vom CCC Dresden</itunes:subtitle>
<itunes:summary>
Pentaradio &amp; Pentacast vom Chaos Computer Club Dresden.
</itunes:summary>
<itunes:image href="{$baseurl}images/pentaradio.png" />
<itunes:category text="Society &amp; Culture"/>
<itunes:category text="Technology"/>
</xsl:otherwise>
</xsl:choose>
<itunes:author>Chaos Computer Club Dresden</itunes:author>
<itunes:owner>
<itunes:name>C3D2</itunes:name>
<itunes:email>mail@c3d2.de</itunes:email>
</itunes:owner>
<xsl:for-each select="newsfile">
<xsl:sort select="date:seconds(document(.)/item/@date)" data-type="number" order="descending" />
<xsl:if test="position() &lt;= 23">
<xsl:choose>
<xsl:when test="($selection = 'pentaradio' or $selection = 'pentamedia') and
starts-with(., 'content/news/pentaradio') and
count(document(.)/item//resource) &gt; 0">
<xsl:apply-templates select="document(.)/item//resource" mode="preselect">
<xsl:with-param name="newsfile" select="."/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test="($selection = 'pentacast' or $selection = 'pentamedia') and
starts-with(., 'content/news/pentacast') and
count(document(.)/item//resource) &gt; 0">
<xsl:apply-templates select="document(.)/item//resource" mode="preselect">
<xsl:with-param name="newsfile" select="."/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test="($selection = 'pentamusic' or $selection = 'pentamedia') and
starts-with(., 'content/news/pentamusic') and
count(document(.)/item//resource) &gt; 0">
<xsl:apply-templates select="document(.)/item//resource" mode="preselect">
<xsl:with-param name="newsfile" select="."/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test="$selection = '' and count(document(.)/item//resource) &gt; 0">
<xsl:apply-templates select="document(.)/item//resource" mode="preselect">
<xsl:with-param name="newsfile" select="."/>
</xsl:apply-templates>
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</channel>
</rss>
</xsl:template>
<!-- Preselect heißt:
* Gucken, ob es in der Resource nicht ein Alternative gibt, welches MP3 ist
* Dann dieses nehmen
* Ansonsten die Resource nehmen
-->
<xsl:template match="resource" mode="preselect">
<xsl:param name="newsfile"/>
<xsl:choose>
<!-- Gibts ein MP3? -->
<xsl:when test="count(alternative[@type='audio/mpeg']) &gt; 0">
<xsl:apply-templates test="alternative[@type='audio/mpeg'][1]">
<xsl:with-param name="newsfile" select="$newsfile"/>
</xsl:apply-templates>
</xsl:when>
<!-- Nimm was da ist (OGG) -->
<xsl:otherwise>
<xsl:apply-templates select=".">
<xsl:with-param name="newsfile" select="$newsfile"/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="resource">
<xsl:param name="newsfile"/>
<xsl:variable name="href">
<xsl:call-template name="make-href">
<xsl:with-param name="href" select="@url"/>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="generate-item">
<xsl:with-param name="newsfile" select="$newsfile"/>
<xsl:with-param name="item_title" select="../@title"/>
<xsl:with-param name="resource_title" select="@title"/>
<xsl:with-param name="date" select="document($newsfile)/item/@date"/>
<xsl:with-param name="resource_url" select="$href"/>
<xsl:with-param name="resource_size" select="@size"/>
<xsl:with-param name="resource_type" select="@type"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="alternative">
<xsl:param name="newsfile"/>
<xsl:variable name="href">
<xsl:call-template name="make-href">
<xsl:with-param name="href" select="@url"/>
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="generate-item">
<xsl:with-param name="newsfile" select="$newsfile"/>
<xsl:with-param name="item_title" select="../../@title"/>
<xsl:with-param name="resource_title" select="../@title"/>
<xsl:with-param name="date" select="document($newsfile)/item/@date"/>
<xsl:with-param name="resource_url" select="$href"/>
<xsl:with-param name="resource_size" select="@size"/>
<xsl:with-param name="resource_type" select="@type"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="generate-item">
<xsl:param name="newsfile"/>
<xsl:param name="item_title"/>
<xsl:param name="resource_title"/>
<xsl:param name="date"/>
<xsl:param name="resource_url"/>
<xsl:param name="resource_size"/>
<xsl:param name="resource_type"/>
<item>
<xsl:variable name="href">
<xsl:value-of select="$baseurl"/>
<xsl:value-of select="substring-before(substring-after($newsfile, 'content/'), '.xml')"/>
<xsl:text>.html</xsl:text>
</xsl:variable>
<title><xsl:value-of select="$item_title"/></title>
<description>
<xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
<div xmlns="http://www.w3.org/1999/xhtml">
<xsl:apply-templates select="document($newsfile)/item/*[name() != 'resource']"/>
</div>
<xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
</description>
<link><xsl:value-of select="$href"/></link>
<enclosure
url="{$resource_url}"
length="{$resource_size}"
type="{$resource_type}"
/>
<guid isPermaLink="false"><xsl:value-of select="concat($href, '+++', $resource_url)"/></guid>
<pubDate>
<xsl:call-template name="date-to-rfc822">
<xsl:with-param name="date" select="$date"/>
</xsl:call-template>
</pubDate>
<content:encoded>
<xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
<div xmlns="http://www.w3.org/1999/xhtml">
<xsl:apply-templates select="document($newsfile)/item/*[name() != 'resource']"/>
</div>
<xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
</content:encoded>
<!-- iTunes-Extensions zum Schluss, sonst validiert es nicht -->
<itunes:subtitle><xsl:value-of select="$resource_title"/></itunes:subtitle>
<itunes:author>CCC Dresden</itunes:author>
</item>
</xsl:template>
<xsl:template match="addendum">
<xsl:apply-templates select="*[name() != 'resource']"/>
</xsl:template>
</xsl:stylesheet>