ページ

2010年7月29日木曜日

[ASP.NET] RSS を受け取って表示する ASP.NET のコード

勤め先の Web サイトで RSS を受け取って表示したいってことだったので、ちょこちょこっと書きました。

aspx は単に DataList を置いただけです。以下のような感じ。

<asp:DataList ID="DataList1" runat="server">
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink1" runat="server"
            Target="_blank"
            NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "Link") %>'
            Text='<%# "[" + DataBinder.Eval(Container.DataItem, "Published", "{0:MM/dd HH:mm}") + "] " + DataBinder.Eval(Container.DataItem, "Title") %>'></asp:HyperLink>
    </ItemTemplate>
</asp:DataList>

aspx.cs で以下のよう DataList にデータバインドして表示します。

protected void Page_Load(object sender, EventArgs e)
{
    var rss = XElement.Load("http://shinichiaoyagiblog.divakk.co.jp/feeds/posts/default");
    var ns = XNamespace.Get("http://www.w3.org/2005/Atom");
    var titles = from entry in rss.Elements(ns + "entry")
                 select new
                 {
                     Published = DateTime.Parse(entry.Element(ns + "published").Value),
                     Title = entry.Element(ns + "title").Value,
                     Link = entry.Elements(ns + "link").Single(x => (x.Attribute("rel").Value == "alternate")).Attribute("href").Value,
                     Author = entry.Element(ns + "author").Element(ns + "name").Value
                 };

    this.DataList1.DataSource = titles.Take(5);        // 最初の 5件
    this.DataList1.DataBind();
}

Linq を使ってごく普通に RSS を取ってるだけです。
あぁ、RSS って書いてますが、上記は Atom 専用のコードになっちゃってます。
あと、例外なんかもまったく考慮してないので、そのあたりはもうちょっとちゃんとした方がいいかもしれません。

0 件のコメント:

コメントを投稿