拉RSS订阅来自Facebook页
问题描述:
我需要帮助拉RSS提要,从一个Facebook页面,我用下面的代码,但它不断给我一个错误:拉RSS订阅来自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();
该代码可以完美地与任何博客或页面rss,但与Facebook rss它给了一个异常,并带有以下消息
具有名称'html'和命名空间'http://www.w3.org/1999/xhtml'的元素不是允许的提要格式。
感谢
答
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的行为,但所提出的改变应该同样适合那些好与您当前执行的其他网站。
答
它使用Gregorys码以上时,如果你改变了饲料格式atom10而不是rss20工作。 更改URL:
string url =
"https://www.facebook.com/feeds/page.php?id=40796308305&format=atom10";
答
在我的情况还Facebook的饲料难以消耗,然后我用Feedburner的尝试刻录进我的Facebook页面。 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;
}
考虑您的用户代理设置为通过Firefox或Chrome中使用的一个 – Kurru 2011-06-09 15:20:48
感谢格雷戈里,Kurru为您answers.I都尝试解决方案,但现在我得到一个不同的异常,这是“‘元素’是无效XmlNodeType”。我觉得Facebook的饲料格式不能使用syndicationFeed类@至少在目前进行解析。 – Yassmeen 2011-06-12 09:10:54
在这一点(这行)不例外发生的?我想我们可以用更多的工作来追踪这一个。 – 2011-06-13 00:34:52