0

目前,我正在向一个 ASP.net C# 应用程序添加“上一个博客”和“下一个博客”链接,该应用程序从 blogspot 上托管的客户博客提供其博客。一旦我抓取了一个特定的博客,我就想立即获取它的上一个博客和下一个博客。获取以前的博客并不难。

// THIS IS MY CALL TO GET THE PREVIOUS BLOG    
FeedQuery prevQuery = new FeedQuery();
prevQuery.Uri = new Uri(String.Format("{0}", blogCred.feedUri));
    // {0} This is automatically retrieved from the database [ https://www.blogger.com/feeds/XXXXXXXXXXXXXXXXXX/posts/default/ ]
prevQuery.MaxPublication = entry.Published.AddSeconds(-1);
prevQuery.NumberToRetrieve = 1;
AtomFeed prevFeed = googleService.Query(prevQuery);
AtomEntry prevEntry = prevFeed.Entries.FirstOrDefault();
prevBlog(prevEntry);

这让我得到了我想要的结果。问题是获取下一个博客。

// THIS IS MY CALL TO GET THE NEXT BLOG   
FeedQuery nextQuery = new FeedQuery();
nextQuery.Uri = new Uri(String.Format("{0}", blogCred.feedUri)); 
    // {0} This is automatically retrieved from the database [ https://www.blogger.com/feeds/XXXXXXXXXXXXXXXXXX/posts/default/ ]
nextQuery.MinPublication = entry.Published.AddSeconds(1);
nextQuery.NumberToRetrieve = 1;
AtomFeed nextFeed = googleService.Query(nextQuery);
AtomEntry nextEntry = nextFeed.Entries.FirstOrDefault();
nextBlog(nextEntry);

我遇到的问题是我无法让 Blogger 按降序排列这些帖子。它不断按升序对它们进行排序,并抓取最新发布的博客,而不是下一篇文章。我不想抓取包含所有博客文章的 FULL xml 文件并抓取最后一项。我想以与此 LINQ to SQL 调用类似的方式获取最后一项:

var query = from f in nextEntry
            where f.date > desiredDate
            orderby date descending
            select f;

如果有人有任何想法或我遗漏的任何东西 - 希望像从谷歌回复中吐出的条目中的某处获取“下一篇文章”链接一样简单。

4

1 回答 1

0

Kiquenet,我无法发布完整的解决方案,但我可以发布实现此目的所需的代码片段。

FeedQuery nextQuery = new FeedQuery();
nextQuery.Uri = new Uri(String.Format("{0}", blogCred.feedUri));
DateTime dateToFind = entry.Published.AddSeconds(1);
int numberOfDates = (int)(DateTime.Now - dateToFind).TotalDays;
nextQuery.MinPublication = dateToFind;
nextQuery.NumberToRetrieve = 1;
AtomFeed nextFeed = null;
AtomEntry nextEntry = null;
for (int i = 0; i < numberOfDates; )
{
    nextQuery.MaxPublication = dateToFind.AddDays(i);
    nextFeed = googleService.Query(nextQuery);
    if (nextFeed.TotalResults >= 1)
    {
        nextEntry = nextFeed.Entries.FirstOrDefault();
        break;
    }
    i = i + 10;
}

因此,这对您而言,它会查看您刚刚抓取的最后一个帖子 10 天后是否有任何帖子。如果在该时间段内没有任何帖子,请再增加 10 天。它将继续以 10 为增量进行搜索,直到到达今天的日期。dateToFind 和 Now 之间的日期数。

希望这可以帮助您。这是我目前 - 并且一直在 - 使用的。

于 2014-12-29T12:39:10.087 回答