2013-03-09 1 views
4

을 SyndicationFeed.모든 읽기 RSS 항목 내가 <pre><code>var reader = XmlReader.Create(feedUrl); var feed = SyndicationFeed.Load(reader); </code></pre> <p>코드가 완벽하게 작동 System.ServiceModel.Syndication</p> 를 사용하여 C# 코드에서 RSS 피드를 읽으려고하지만 나에게 25 개 피드 항목을 제공하고

동일한 피드 url에 대해 Google 리더와 같은 독자는 분명히 100 개 이상의 항목을 볼 수 있습니다.

SyndicationFeed에서 25 개 이상의 피드 항목을 얻는 방법은 무엇입니까?

답변

3

간단히 말해서 피드 제공 업체가 피드에 맞춤 페이지 매김을 제공하지 않았거나 게시/날짜 구조를 추정하지 않는 이상 25 개 이상의 게시물을 가져올 수 없습니다. 25 개 이상의 글이 있다고해서 피드를 통해 사용할 수 있음을 의미하지는 않습니다. RSS는 최신 게시물을 표시하도록 설계되었습니다. 아카이브 요구 사항을위한 것이 아니거나 웹 서비스처럼 사용하기위한 것입니다. 페이지 매기기는 RSS spec 또는 Atom spec의 일부가 아닙니다. 이 다른 답변보기 : How Do I Fetch All Old Items on an RSS Feed?

Google 리더는 다음과 같이 작동합니다. Google 크롤러는 새 피드가 인터넷에 처음 생겨나 자마자 발견하고 크롤러는 정기적으로 크롤러를 계속 방문합니다. 방문 할 때마다 Google 서버에 모든 새 게시물을 저장합니다. 크롤러가 새 피드를 찾자 마자 피드 항목을 저장하면 모든 데이터가 피드 시작 부분으로 돌아갑니다. 이 기능을 복제 할 수있는 유일한 방법은 새 피드가 시작될 때 보관을 시작하는 것입니다. 이는 실용적이지 않을 수 있습니다.

피드 주소에 25 개가 넘는 항목이있는 경우 SyndicationFeed은 25 개를 초과합니다.

+1

다른 방법으로는 보이지 않으므로 올바른 대답으로 표시하십시오. – Nirav

0

시도해보십시오.

private const int PostsPerFeed = 25; //Change this to whatever number you want

그런 다음 조치 : FeedResult.cs에서

public ActionResult Rss() 
    { 
     IEnumerable<SyndicationItem> posts = 
      (from post in model.Posts 
      where post.PostDate < DateTime.Now 
      orderby post.PostDate descending 
      select post).Take(PostsPerFeed).ToList().Select(x => GetSyndicationItem(x)); 

     SyndicationFeed feed = new SyndicationFeed("John Doh", "John Doh", new Uri("http://localhost"), posts); 
     Rss20FeedFormatter formattedFeed = new Rss20FeedFormatter(feed); 
     return new FeedResult(formattedFeed); 
    } 

    private SyndicationItem GetSyndicationItem(Post post) 
    { 
     return new SyndicationItem(post.Title, post.Body, new Uri("http://localhost/posts/details/" + post.PostId)); 
    } 

class FeedResult : ActionResult 
{ 
    private SyndicationFeedFormatter formattedFeed; 

    public FeedResult(SyndicationFeedFormatter formattedFeed) 
    { 
     this.formattedFeed = formattedFeed; 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     context.HttpContext.Response.ContentType = "application/rss+xml"; 
     using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output)) 
     { 
      formattedFeed.WriteTo(writer); 
     } 
    } 
} 

Demostration는 HERE입니다. 그래도 Google 크롬에 대한 형식은 없습니다.

+0

피드가 25 개의 항목 만 제공하는 경우이 코드는 이전에 피드에 게시 된 25 개 이상의 항목이 있더라도 그 이상을 검색하지 않습니다. –

+0

코드는 내 피드를 생성하는 예제에 따라 작동하지만 피드 소스가 제 3 자 사이트 인 경우 실패합니다. 내 자신의 솔루션 또는 외부 세계에서 생성 된 모든 RSS 피드에 대한 일반으로 사용할 수있는 구체적인 솔루션을 찾고 있는데 – Nirav

+0

@Nirav이 게시물을 시도하십시오 : http://stackoverflow.com/questions/6294948/pull-rss-feeds- from-facebook-page? rq = 1 – Komengem

관련 문제