Es muss ja irgendeinen Grund haben warum mein Blog "Kraut und Rüben Blog" heisst, oder? Der Grund ist der Themenmix in meinem Blog. Meine Interessen reichen von Windows Vista und Office 2007 (schon bemerkt?) bis hin zu Exchange 2007, Security und Spam Filtering, aber auch in den Bereich Development insbesondere Web Development hinein.
Meine Frau und ich hören gelegentlich Podcasts und ich arbeite auch an einem Projekt um Fernsehaufzeichnungen vom Haus meiner Schwiegereltern in den U.S.A. auf unser Media Center nach Österreich zu bringen. In beiden Fällen verwenden wir RSS Feeds.
Da kam mir die Idee die RSS Feeds mittels XSLT in ASX Playlists umzuwandeln, um sie dann direkt im Windows Media Player oder Windows Media Center aufrufen zu können.
Das ganze funktioniert natürlich nur mit RSS Feeds, die Audio oder Video Enclosures enthalten, in einem Format, für das ein Codec installiert ist.
Der Aufruf funktioniert so:
http://server/RSS.aspx?feed=http://static.orf.at/podcast/oe1/oe1_geschichte.xml&type=asx.xslt
Man sieht schon, der RSS feed lässt sich über einen Parameter übergeben, ebenso das anzuwendende xslt.
Folgende 3 Dateien sind notwendig:
rss.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RSS.aspx.cs" Inherits="RSS" %> <% if ( Page.Request["type"] == "asx.xslt" ) { Response.ContentType = "video/x-ms-wvx"; } %> |
Theoretisch lassen sich über den Parameter 'type=' auch andere Xslt Transformationen machen, z.b. in HTML. Näheres dazu
hier.
rss.aspx.cs | using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Xml; using System.Xml.Xsl; public partial class RSS : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { XmlDocument _xmlDocument; XmlDocument _xmlOutput; XmlReader _xmlReader; XslTransform _xslTransform; _xmlDocument = new XmlDocument(); _xmlOutput = new XmlDocument(); _xslTransform = new XslTransform(); _xmlDocument.Load(Page.Request["feed"]); _xslTransform.Load(Server.MapPath(Page.Request["type"])); _xmlReader = _xslTransform.Transform(_xmlDocument, new XsltArgumentList()); _xmlOutput.Load(_xmlReader);
Response.Write(_xmlOutput.OuterXml); } } |
Ein guter Teil dieser Datei ist übrigens nicht auf meinem Mist gewachsen sondern von Jeff Julian, XML MVP, aus seinem Artikel über RSS nach HTML Transformation mittels XSLT.
asx.xslt
<?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl=http://www.w3.org/1999/XSL/Transform> <xsl:output method="xml" /> <xsl:template match="rss/channel"> <ASX version = "3.0"> <TITLE> <xsl:value-of select="title" /> </TITLE> <xsl:apply-templates select="item" /> </ASX> </xsl:template> <xsl:template match="item"> <ENTRY> <xsl:if test="enclosure"> <TITLE><xsl:value-of select="title" /> <xsl:value-of select="pubDate" /> <xsl:value-of select="description" /></TITLE> <REF HREF="{enclosure/@url}" /> </xsl:if> </ENTRY> </xsl:template> </xsl:stylesheet> |
Diese xslt Datei sollte alle RSS Feeds, die Enclosures enthalten, in korrekte ASX Playlists transformieren.