DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Rene Paschold Artikel Drucken
        
RSS Newsfeeds auf der eigenen Homepage einbinden

RSS Newsfeeds sind sehr beliebt, sind sie doch eine einfache Möglichkeit fremde News und Informationen in eigene Projekte zu integrieren. Viele große Firmen und Newsportale stellen ihre Schlagzeilen oder Topprodukte in Form von XML Newsfeeds zur Verfügung. Mit ASP.NET ist es relativ einfach auf solche Informationen zuzugreifen. Im folgenden Artikel wird ein Lösungansatz beschrieben wie ein solcher Zugriff auf RSS-Feeds realisiert werden kann.

Um Newsfeeds in eigene Projekte zu integrieren benötigt man zuerst eine Quelle.

C# Newsfeed - http://msdn.microsoft.com/vcsharp/rss.xml
VB.NET Newsfeed - http://msdn.microsoft.com/vbasic/rss.xml

Da RSS Newsfeeds in XML vorliegen kann man ganz bequem per XmlTextReader darauf zugreifen. Dannach erzeugt man ein DataSet welches über die Methode ReadXml den XmlTextReader einliest. Dies wird gemacht um nachher auf die DataTable mit dem Content zuzugreifen. Diese DataTable kann dann an ein beliebiges TemplateControl (Repeater, DataList, DataGrid) gebunden werden.

''' ---------------------------------------
''' <summary>
''' Liest den übergebenen RSS Feed in eine
''' DataTable ein und gibt diese zurück
''' </summary>
''' <param name="RSSUrl">URL zum RSS Feed</param>
''' <returns>DataTable mit angegebenen RSS
''' Informationen</returns>
''' ---------------------------------------
Private Function GetRSS(ByVal RSSUrl As String) _
  As DataTable

  Dim reader As New XmlTextReader(RSSUrl)
  Dim ds As New DataSet
  ds.ReadXml(reader)

  Dim rssTable As DataTable = ds.Tables(2)

  ds.Dispose()
  reader.Close()

  Return rssTable

End Function

In die Funktion GetRSS wird die URL des Newsfeeds übergeben. Dann wird die Klasse XmlTextReader instanziert. Das darauf folgende DataSet ließt diese Daten ein und liefert die Tabelle mit den Daten welche in ein DataTable Object gespeichert wird.

Warum wird hier die dritte Tabelle zurück gegeben? Die erste Tabelle beschreibt das RSS Element in einer Zeile. Die zweite Tabelle beinhaltet auch nur eine Zeile in der das Channel Element beschrieben wird. Erst die dritte Tabelle liefert die gewünschten Informationen.

Am Ende wird das DataSet freigegeben und der XmlTextReader geschlossen. Dann wird die DataTable zurück gegeben.

Diese Funktion wird jetzt in der verwendet um die gelieferten Informationen in den Cache zu legen. Von dort aus wird die DataTable später an ein TemplateControl gebunden.

Private Sub Page_Load(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyBase.Load

  Try

  'Prüft ob das VB.NET RSS schon in den Cache gelegt wurde,
 
'wenn nicht in den Cache legen

  If (Cache("MSDNVBRSS") Is Nothing) Then

    'DataTable in den Cache legen
   
Cache.Insert( _
      "MSDNVBRSS", _
      GetRSS("http://msdn.microsoft.com/vbasic/rss.xml"), _
      Nothing, _
      DateTime.Now.AddMinutes(20), _
      TimeSpan.Zero _
    )

  End If

  'VBRSS DataTable aus dem Cache an das RepeaterControl binden
 
RepeaterVB.DataSource = Cache("MSDNVBRSS")
  RepeaterVB.DataBind()

  'Prüft ob das C# RSS schon in den Cache gelegt wurde,
 
'wenn nicht in den Cache legen
 
If (Cache("MSDNCSHARPRSS") Is Nothing) Then
 
   
'DataTable in den Cache legen
    
Cache.Insert( _
      "MSDNCSHARPRSS", _
      GetRSS("http://msdn.microsoft.com/vcsharp/rss.xml"), _
      Nothing, _
      DateTime.Now.AddMinutes(20), _
      TimeSpan.Zero _
    )

  End If

  'C# DataTable aus dem Cache an das RepeaterControl binden
 
RepeaterCSHARP.DataSource = Cache("MSDNCSHARPRSS")
  RepeaterCSHARP.DataBind()

  Catch ex As Exception
    Response.Write(ex.Message)
  End Try

End Sub


Damit nicht jedes Mal versucht wird die Newsfeeds einzulesen wird die DataTable in den Cache gelegt und von dort an das RepeaterControl gebunden. Und fertig ist die Newsseite:

Zur Ausgabe wird das RepeaterControl verwendet.

 <asp:repeater id="RepeaterVB" runat="server" enableviewstate="False">
  <headertemplate>
    <table>
 
</headertemplate>
 
<footertemplate>
    </table>
  </footertemplate>
  <itemtemplate>
    <tr>
      <td class="RSS">
        <a href='<%# DataBinder.Eval(Container.DataItem, "link") %>' target="_blank" class="RSS">
          <%# DataBinder.Eval(Container.DataItem, "title") %> </a>
        </td>
        <td class="Datum" align="right" valign="top">
          <%# FormatDate(DataBinder.Eval(Container.DataItem, "pubDate")) %>
        </td>
      </tr>
      <tr>
        <td class="Beschreibung" colspan="2">
          <%# DataBinder.Eval(Container.DataItem, "description") %>
        </td>
      </tr>
    </itemtemplate>
  </asp:repeater>


Zum formatieren des Datums wird folgende Funktion verwendet welche im itemtemplate des Repeaters aufgerufen wird.

''' -----------------------------------------------
''' <summary>
''' Formatiert das per RSS Feed empfangene Datum.
''' </summary>
''' <param name="datum">Zu formatierendes Datum</param>
''' <returns>Formatiertes Datum</returns>
''' -----------------------------------------------
Protected Function FormatDate(ByVal datum As String) As String

  Dim dt As DateTime = CType(datum, DateTime)
  Return dt.ToShortDateString()

End Function


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 03.03.2004
  Gültig bis: 01.06.2004
25 Ratings
Bewertung: 67,2%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG