我需要帮助从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时会出现以下消息的异常
名称为“html”且名称空间为“http://www.w3.org/1999/xhtml”的元素不是允许的Feed格式。
由于
答案 0 :(得分:10)
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的一种行为,但建议的更改应该对其他适合您当前实施的网站同样有效。
答案 1 :(得分:2)
如果您将Feed格式更改为atom10而不是rss20,则在使用上面的Gregorys代码时有效。 更改网址:
string url =
"https://www.facebook.com/feeds/page.php?id=40796308305&format=atom10";
答案 2 :(得分:1)
在我的情况下,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;
}