How to Read Remote RSS File Asynchronously Using LINQ To XML and WebClient Class

XML , Posted at : Nov/17/2010  
2110 Views   4 Comments

Artikel ini membahas tentang bagaimana caranya membaca file RSS yang menggunakan RSS 2.0 format dan ditampilkan di aplikasi yang kita buat sendiri. Contoh client app yang saya buat disini yaitu ASP.NET 3.5. Saya tidak akan membahas apa itu RSS file beserta format yang dapat digunakan untuk membuatnya, untuk lebih jelasnya dapat anda temukan di beberapa literatur yang tersedia di internet.

Contoh potongan kode dari isi file RSS (http://native-enterprise.net/rss.xml)dengan format RSS 2.0 dapat dilihat pada gambar dibawah ini :

rssnative

Ok, sekarang kita buat terlebih dahulu control yang akan digunakan untuk menampilkan konten dari file RSS tersebut. Pada contoh ini saya implementasikan di UserControl dengan menambahkan control GridView.

usercontrolrssreader

Buka code behind UserControl tersebut diatas dan tambahkan class berikut ini yang digunakan sebagai object dummy untuk menampung hasil dari proses pembacaan file RSS :

Public Class RssFeedDetails

    Private mTitle As String
    Public Property Title() As String
        Get
            Return mTitle
        End Get
        Set(ByVal value As String)
            mTitle = value
        End Set
    End Property

    Private mLink As String
    Public Property Link() As String
        Get
            Return mLink
        End Get
        Set(ByVal value As String)
            mLink = value
        End Set
    End Property

    Private mPubDate As String
    Public Property PubDate() As String
        Get
            Return mPubDate
        End Get
        Set(ByVal value As String)
            mPubDate = value
        End Set
    End Property

End Class

Deklarasikan class level variabel berikut di UserControl class. Variabel tersebut fungsinya sebagai generic collection dari RssFeedDetails class).

Dim listFeed As New List(Of RssFeedDetails)

Buat sebuah prosedur sebagai handler yang akan dieksekusi apabila proses pembacaan remote RSS file nya selesai. Perhatikan input parameter yang kedua, kita harus mendefinisikan tipe data yang telah ditentukan. Hasil dari proses pembacaan tersebut dikembalikan dalam bentuk string. String tersebut harus kita olah kembali menjadi sebuah xml data type yaitu dengan menggunakan Parse method dari XDocument class. Selanjutnya anda tinggal baca dengan menggunakan Linq To XML. Pada kode dibawah tersebut saya hanya mengambil 10 Top Record dari RSS filenya. Tentunya hal tersebut dapat anda sesuaikan dengan kebutuhan.

    Private Sub DownloadCompleted(ByVal sender As Object, _
                                  ByVal e As DownloadStringCompletedEventArgs)

        If e.Error IsNot Nothing Then
            Return
        End If

        '//load rss file from its url
        Dim strResult = e.Result.Remove(0, 3)
        Dim doc = XDocument.Parse(strResult)

        For Each item In doc...<channel>.<item>.Take(10)
            listFeed.Add(New RssFeedDetails With { _
                         .Link = item.<link>.Value, _
                         .PubDate = item.<pubDate>.Value.Replace("GMT", ""), _
                         .Title = item.<title>.Value})
        Next

        listRssNews.DataSource = listFeed
        listRssNews.DataBind()
    End Sub

Buat sebuah prosedur untuk membaca remote RSS file dengan menggunakan WebClient class. String yang dikembalikan di proses secara asynchronous (tentunya anda dapat menggunakannya secara synchronous juga). Penanganan event handler nya di buat secara run time dengan mendelegasikan ke sebuah prosedur yang sudah dibuat sebelumnya :

    Private Sub ProcessFeed()
        Dim url = "http://www.native-enterprise.net/rss.xml"

        Dim wc As New WebClient
        AddHandler wc.DownloadStringCompleted, AddressOf DownloadCompleted
        wc.DownloadStringAsync(New Uri(url))
    End Sub

Langkah berikutnya yaitu proses data binding ke control GridView. Event yang digunakan yaitu ItemDataBound. Dalam event ini kita ambil control-control yang terdapat di dalam ItemTemplate. Disini kita harus melakukan explicit conversion untuk mengambil control-control tersebut karena kita tidak dapat secara langsung akses control yang terdapat di dalam ItemTemplate GridView :

    Protected Sub listRssNews_ItemDataBound(ByVal sender As Object, _
              ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
              Handles listRssNews.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then

            '//get the hyperlink control 
            Dim linkTitle = DirectCast(e.Row.FindControl("linkTitle"), HyperLink)
            Dim currentRss = listFeed(e.Row.RowIndex)
            linkTitle.Text = currentRss.Title
            linkTitle.NavigateUrl = currentRss.Link

            Dim lblDate = DirectCast(e.Row.FindControl("lblDate"), Label)
            lblDate.Text = currentRss.PubDate
        End If
    End Sub
End Class

Karena proses pembacaan RSS filenya dilakukan secara asynchronous maka anda harus menambahkan atribut Async=true di halaman aspx yang digunakan untuk menempatkan UserControl tersebut.

asyncpage

Screen shot hasilnya dapat dilihat pada gambar dibawah ini :

nativerssresult

Selamat mencoba :)


[Comments]
Ryan  Nov/18/2010 07:05:16 :

Makasih banyak lho Pak....

Mantap nih artikelnya, bisa menambah wawasan dan ilmu...

Rully  Nov/18/2010 08:25:05 :

Ryan > sama-sama mas Ryan...thanks.

andi  Nov/18/2010 10:15:22 :

Mas Rully, nanya nih..

Kalo RSS nya pake Atom 2.0 gmana mas? apa masih sama?

Bisa kasih contoh, yang gak pake LINQ? karena app yang saya buat masih pake net 2.0.

Makasih sbelumnya

Rully  Nov/18/2010 06:21:49 :

andi > Beda di penamaan nama-nama elemennya di xml...pembacaan data RSS selain menggunakan LINQ bisa juga menggunakan XmlReader atau XmlTextReader class.

Semoga membantu.


[Write your comment]
Name (required)
Email (required-will not published)
 
Comment

cxdw
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Microsoft Certified Trainer | IT Trainer at Native Enterprise | IT Consultant | Software Developer | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.
[Read More...]
Top Download 
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 6083 times  
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 4689 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 3554 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 3324 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 2706 times  
Links 
Certifications 
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News 
© Copyright 2006-2016   Rully Yulian MF   All rights reserved.