Snippets

Tuomas Hietanen Generate RSS feed from a list of F# record items using Linq2Xml. To use e.g. to generate feeds from your web server.

Created by Tuomas Hietanen
#if INTERACTIVE
#r "System.Xml.Linq.dll"
#else
module Rss
#endif

open System
open System.Xml.Linq

type NewsItem = { 
    Title : string; 
    Link: string; 
    ReleaseDate: DateTime; 
    Description: string; 
}

let myChannelFeed 
        (channelTitle:string) 
        (channelLink:string) 
        (channelDescription:string) (items : NewsItem list) =
    let xn = XName.Get
    let elem name (valu:string) = XElement(xn name, valu)
    let elems =
        items |> List.sortBy(fun i -> i.ReleaseDate) 
        |> List.map(fun i ->
            XElement(xn "item",
                elem "title" i.Title,
                elem "link" i.Link,
                elem "guid" i.Link,
                elem "pubDate" (i.ReleaseDate.ToString("r")),
                elem "description" i.Description
            ))
    XDocument(
        XDeclaration("1.0", "utf-8", "yes"),
            XElement(xn "rss",
                XAttribute(xn "version", "2.0"),
                elem "title" channelTitle,
                elem "link" channelLink,
                elem "description" channelDescription,
                elem "language" "en-us",
                XElement(xn "channel", elems)
            ) |> box)


// set mime-type to "text/xml" and deliver e.g. as rss.xml
(*
let generateFeed = 
    myChannelFeed "FSnip Test Feed" "http://www.fssnip.com" "Some independent F# functions and code"
let myXml =
    [{Title = "Welcome"; 
      Link="www.fssnip.net/9q"; 
      ReleaseDate=DateTime.UtcNow; 
      Description="First item"};
     {Title = "Hello"; 
      Link="www.fssnip.net/1q"; 
      ReleaseDate=DateTime.UtcNow; 
      Description="Second item"} 
    ] |> generateFeed
*)

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.