Utilizzare WordPress con C#

imagesFinalmente ho deciso (e trovato il tempo) di creare il mio sito personale (ormai tutti hanno un sito personale🙂 ).

In home page voglio dare la possibilita’ di visualizzare i post principali che scrivo su wordpress; per fare questo ho pensato a diverse soluzioni:

  • converto tutto in .NEt sbarazzandomi di WordPress
  • decido di utilizzare wordpress sui miei server e quindi avere controllo anche del database (in questo modo posso fare le query direttamente sul db)
  • cerco su internet qualche plugin o framework che mi possa aiutare ad integrare wordpress nel mio sito.
  • utilizzare webhooks per pushare le informazioni direttamente dal blog di WordPress
  • dato che voglio solo visualizzare i miei posts e non voglio inserire post direttamente da .net, si puo’ leggere direttamente rss feed che rendo disponibile da mio sito.

Per adesso ho deciso di utilizzare l’ultima possibilita’: meno costosa (gratis)… piu’ semplice da utilizzare e piu’ veloce da fare.

Prima di tutto creiamo il modello di oggetto che identifica il  POST:

public class Post
{
   public string Title { get; set; }
   public string Url { get; set; }
   public string Author {get; set;}
   public DateTime PublishedDate { get; set; }
}

Adesso andiamo a leggere i post dal link del mio rss feed di wordpress. Ho creato un semplice parser per leggere queste informazioni:

public static IList GetBlogPosts(string postUrl, int postCount)
{

string xml;

using (WebClient downloader = new WebClient())
{
   using (TextReader reader =
      new StreamReader(downloader.OpenRead(postUrl)))
{
xml = reader.ReadToEnd();
}
}
// Sanitize the XML
xml = XmlCommon.SanitizeXmlString(xml);
XmlDocument xmlDoc = new XmlDocument();
//Load feed via a feedUrl.
TextReader tr = new StringReader(xml);
var doc = XDocument.Load(tr);

XNamespace dc= "http://purl.org/dc/elements/1.1/";

//Get all the "items" in the feed.
var feeds = doc.Descendants("item").Select(x =>
new Post
{
//Get title, pubished date, and link elements.
Title = x.Element("title").Value, //3
PublishedDate = DateTime.Parse(x.Element("pubDate").Value),
Author = x.Element(dc + "creator").Value,
Url = x.Element("link").Value
} //  Put them into an object (Post)
)
// Order them by the pubDate (Post.PublishedDate).
.OrderByDescending(x=> x.PublishedDate)
//Only get the amount specified, the top (1, 2, 3, etc.) via postCount.
.Take(postCount);

//Convert the feeds to a List and return them.
return feeds.ToList();
}

Volevo farvi notare la seguente riga di codice:

xml = XmlCommon.SanitizeXmlString(xml);

In questo modo andremo a ripulire il nostro XML. Il file rss di wordpress viene creato con dei caratteri non validi per le specifiche XML.Qui trovate un articolo che spiega meglio il pattern utilizzato.

Infine se potremmo anche creare una cache per non rallentare il caricamento. Ecco qualche lineea di codice:

//Check if feed exists
if (HttpRuntime.Cache["WordPressPost"] == null)
				{
					//If it is, insert it into the cache, cache for 10 minutes
					HttpRuntime.Cache.Insert("WordPressPost",
						FeedReader.GetBlogFeed("url", 5), null, SystemTime.Now().AddMinutes(10), Cache.NoSlidingExpiration);
				}

//retrieve cached feeds
var cachedFeeds = (List) HttpRuntime.Cache["WordPressPost"]

Ora possiamo avere i nostri post di worpress nella nostra homepage. Ho creato un piccolo progetto di esempio in Github

Cercando su google ho trovato WP.NET e un ottimo articolo sol suo utilizzo : Extending-WordPress-with-Csharp-Plugins. Con WP.Net e’ possibile utilizzare wordpress con .net.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...