Ecrire un flux RSS avec XLinq et DLinq

Contenu du snippet

/// <summary>
/// Description résumée de Rss
/// </summary>
public class Feeds
{
    /// <summary>
    /// Ecriture du flux RSS
    /// </summary>
    public static void Write()
    {
        String path = HttpContext.Current.Server.MapPath("...path.../blog.rss"); // Avec path : chemin du flux
        String url = String.Concat("...path.../fichier.aspx?id="); // Avec path et fichier pour désigner le fichier qui permetra d'avoir un lien vers la page du post

        XDocument document = new XDocument(
            new XDeclaration("1.0", "utf-8", null),
            new XElement("rss",
                new XElement("channel",
                    new XElement("title", "Nom du site"),
                    new XElement("link", "Url du site"),
                    new XElement("pubDate", Date2RFC822(DateTime.Now)),
                    new XElement("lastBuildDate", Date2RFC822(DateTime.Now)),
                        from p in new DataContext().Post.OrderByDescending(c => c.date_edition).Take(10)
                        select new XElement("item",
                            new XElement("guid", p.id_post.ToString()),
                            new XElement("pubDate", Date2RFC822(p.date_edition)),
                            new XElement("title", p.titre),
                            new XElement("description", p.texte),
                            new XElement("link", String.Concat(url, p.id_post.ToString()))
                            )
                    )
                ,
                new XAttribute("version", "2.0"))
            );

        //Stream d'écriture du fichier
        System.IO.TextWriter writer = new System.IO.StreamWriter(path, false, Encoding.Default);
        document.Save(writer);
        writer.Flush();
        writer.Close();
    }

    /// <summary>
    /// Formatage de date
    /// </summary>
    /// <param name="date"></param>
    /// <returns></returns>
    private static String Date2RFC822(DateTime date)
    {

        Int32 offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours;
        StringBuilder sb = new StringBuilder();

        sb.Append(date.ToString("ddd, dd MMM yyyy HH:mm:ss "));

        if (offset < 0)
        {
            sb.AppendFormat("-{0:00}00", offset * -1);
        }
        else if (offset == 0)
        {
            sb.Append("GMT");
        }
        else
        {
            sb.AppendFormat("+{0:00}00", offset);
        }

        return sb.ToString();

    }

}


Compatibilité : ASP.NET 2.x, C# 3.x

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.