Загрузка и кеширование RSS на C#


Приложению необходимо загружать RSS для многократного использования и при этом поддерживать его в актуальном состоянии, но пренебрегать интернет трафиком нельзя. 

Во-первых определимся с тем, как лучше загружать RSS на C#. Очень удобным оказалось воспользоваться помощью nuget пакета Quick and Dirty Feed Parser.

После установки пакета для загрузки RSS достаточно написать одну строку кода:

var rss = new HttpFeedFactory().CreateFeed(new Uri(url));

Теперь приступим к созданию кеша для загрузки RSS. Для начала создадим вспомогательный класс.


internal class FeedCacheItem
{
    public DateTime Date { getset; }
    private IFeed _feed;
    public IFeed Feed
    {
        get { return _feed; }
        set
        {
            _feed = value;
            Date = DateTime.Now;
        }
    }
    public FeedCacheItem()
    {
        Date = DateTime.Now;
    }
}
Экземпляры этого класса будут содержать загруженный RSS и время загрузки.
Теперь создадим сам кеш. 

internal static class FeedCache
{
    private static readonly Dictionary<stringFeedCacheItem> feedCache = new Dictionary<stringFeedCacheItem>();
 
    internal static List<BaseFeedItem> GetFeed(string url)
    {
        if (!feedCache.ContainsKey(url))
            feedCache.Add(
                url,
                new FeedCacheItem
                {
                    Feed = new HttpFeedFactory().CreateFeed(new Uri(url))
                });
        else if (DateTime.Now.Subtract(feedCache[url].Date).TotalSeconds > 300)
            feedCache[url].Feed = new HttpFeedFactory().CreateFeed(new Uri(url));
 
        return feedCache[url].Feed.Items;
    }
}
В словарь feedCache в качестве ключа используется url загружаемого RSS. При загрузке RSS через GetFeed(string url) проверяется имеется ли в кеше RSS и когда он был загружен. В зависимости от этого RSS загружается вновь или возвращается из кеша.

Использовать данный кеш очень просто: 
var rss = FeedCache.GetFeed("http://beengagedinprogramming.blogspot.com/feeds/posts/default?alt=rss");

Комментариев нет :

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.