从Facebook页面中提取RSS源

我需要帮助从Facebook页面提取RSS提要我正在使用以下代码,但它一直给我一个错误:

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(); 

此代码与任何博客或页面rss完美配合,但使用Facebook rss时,它会给出以下消息的exception

名称为“html”且名称空间为“http://www.w3.org/1999/xhtml”的元素不是允许的Feed格式。

谢谢

Facebook将在此实例中返回HTML,因为它不喜欢XmlReader提供的用户代理。 由于您无法自定义它,因此您需要一个不同的解决方案来获取Feed。 这应该可以解决您的问题:

 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); 

这完全是Facebook的行为,但建议的更改应该同样适用于其他对您当前实现没有问题的网站。

如果您将Feed格式更改为atom10而不是rss20,则在使用上面的Gregorys代码时有效。 更改url:

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

在我的情况下,Facebook Feed很难消耗,然后我尝试使用feedburner为我的Facebook页面刻录Feed。 Feedburner以Atom1.0格式为我生成了Feed。 然后我成功:)用system.syndication类消耗了这个,我的代码是:

 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; }