2011-06-09 10 views
6

Necesito ayuda para tirar de los canales RSS de una página de Facebook que estoy usando el siguiente código, pero me mantiene dando un error:Tire los canales RSS de la página de Facebook

string url = 
    "https://www.facebook.com/feeds/page.php?id=40796308305&format=rss20"; 

XmlReaderSettings settings = 
    new XmlReaderSettings 
        { 
         XmlResolver = null, 
         DtdProcessing=DtdProcessing.Parse, 

        }; 
XmlReader reader = XmlReader.Create(url,settings); 

SyndicationFeed feed = SyndicationFeed.Load(reader); 

foreach (var item in feed.Items) 
{ 
    Console.WriteLine(item.Id); 
    Console.WriteLine(item.Title.Text); 
    Console.WriteLine(item.Summary.Text); 

} 

if (reader != null) reader.Close(); 

Este código funciona perfectamente con cualquier blog o RSS página, pero con Facebook RSS le dan una excepción con el siguiente mensaje

el elemento con el nombre de 'html' y espacio de nombres 'http://www.w3.org/1999/xhtml' no es un formato de alimentación permitido .

Gracias

Respuesta

10

Facebook volverán HTML en este caso, ya que no le gusta el agente de usuario suministrado por XmlReader. Como no puedes personalizarlo, necesitarás una solución diferente para tomar el feed. Esto debería resolver su problema:

var req = (HttpWebRequest)WebRequest.Create(url); 
req.Method = "GET"; 
req.UserAgent = "Fiddler"; 

var rep = req.GetResponse(); 
var reader = XmlReader.Create(rep.GetResponseStream()); 

SyndicationFeed feed = SyndicationFeed.Load(reader); 

Esto es estrictamente un comportamiento de Facebook, pero el cambio propuesto debería funcionar igual de bien para otros sitios que están de acuerdo con su aplicación actual.

+0

podría cambiar el agente de usuario a la que utiliza Firefox o Chrome – Kurru

+0

Gracias Gregory, Kurru para su answers.I intentó pero ambas soluciones ahora recibo una excepción diferente que es "'Element' es un XmlNodeType inválido". Creo que el formato de los feeds de Facebook no se puede analizar usando syndicationFeed class @ least por ahora. – Yassmeen

+0

¿En qué punto (qué línea) ocurre la excepción? Creo que podemos rastrear este con un poco más de trabajo. –

2

Funciona al usar el código de Gregorys anterior si cambia el formato de la fuente a atom10 en lugar de rss20. cambiar la dirección URL:

string url = 
"https://www.facebook.com/feeds/page.php?id=40796308305&format=atom10"; 
1

En mi caso también Facebook alimentación era difícil de consumir y luego trato con feedburner para quemar el alimento para mi página de facebook. Feedburner generó el feed para mí en formato Atom1.0. Y luego con éxito :) consumido esta clase system.syndication con mi código era:

string Main() 
    { 
     var url = "http://feeds.feedburner.com/Per.........all"; 


     Atom10FeedFormatter formatter = new Atom10FeedFormatter(); 
     using (XmlReader reader = XmlReader.Create(url)) 
     { 
      formatter.ReadFrom(reader); 
     } 
     var s = ""; 
     foreach (SyndicationItem item in formatter.Feed.Items) 
     { 
      s+=String.Format("[{0}][{1}] {2}", item.PublishDate, item.Title.Text, ((TextSyndicationContent)item.Content).Text); 
     } 

     return s; 
    } 
Cuestiones relacionadas