RSS to ASX Converter mit ASP.net, C# und XSLT

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.

Facebook

Letzte Tweets

Twitter Mai 26, 23:39
Gelbe Engel! Danke!

Twitter Mai 18, 21:34
Finland was terrible. #Eurovision

Twitter Mai 17, 12:49
just blogged Ist das Surface Pro teuer? – Ein Fact-Check: Gestern wurde angekündigt, dass das Surface Pro in D... http://t.co/PhW7qzhkUq

Folge mir auf Twitter!

Über den Autor

MCTS

Christian Haberl Christian Haberl ist seit mehr als 10 Jahren als EDV Berater, Vortragender und Trainer tätig. Er kann sich nicht für ein Spezialgebiet entscheiden, drum heißt dieser Blog auch "Kraut & Rüben Blog" - Unter seine Interessen fallen Web-Entwicklung auf ASP.NET Basis, Information Worker & Productivity Technologien (Windows, Office), Server (Windows Server, Small Business, Virtualisierung, Exchange), Scripting, Spam Filtering/Security und Digital Home. Christian Haberl ist auch einer der führenden Produktspezialisten für Windows Media Center und Windows Home Server und ist Direktor des ClubDigitalHome.
Im Jahr 2008 hat Christian Haberl über 200 Vorträge und Schulungen durchgeführt.
Im Frühjahr 2009 wurde Christian Haberl von Microsoft Österreich zum "Influencer" ernannt, weiters wurde er Microsoft Certified Technology Specialist / Microsoft Certified Connected Home Integrator sowie Microsoft Certified Consumer Sales Specialist.

Month List

Netzwerk Management

Bandwidth

RecentComments

Comment RSS