Получить RSS-каналы со страницы Facebook - PullRequest
6 голосов
/ 09 июня 2011

Мне нужна помощь для извлечения 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();

Этот код отлично работает с любым блогом или страницей, но сFacebook rss выдает исключение со следующим сообщением

Элемент с именем 'html' и пространством имен 'http://www.w3.org/1999/xhtml' не разрешен в формате ленты.

Спасибо

Ответы [ 3 ]

10 голосов
/ 09 июня 2011

Facebook будет возвращать HTML в этом случае, потому что ему не нравится пользовательский агент, предоставляемый XmlReader. Поскольку вы не можете настроить его, вам понадобится другое решение для захвата канала. Это должно решить вашу проблему:

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, но предлагаемое изменение должно одинаково хорошо работать на других сайтах, которые соответствуют вашей текущей реализации.

2 голосов
/ 23 сентября 2011

Работает при использовании кода Грегориса выше, если вы измените формат подачи на atom10 вместо rss20.Измените URL:

string url = 
"https://www.facebook.com/feeds/page.php?id=40796308305&format=atom10";
1 голос
/ 19 ноября 2011

В моем случае также трудно было использовать фид Facebook, и затем я пытаюсь с помощью feedburner записать фид на мою страницу в фейсбуке.Feedburner сгенерировал для меня канал в формате Atom1.0.И тогда я успешно :) использовал это с классом 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;
   }
...