Приложению необходимо загружать 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 { get; set; }
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<string, FeedCacheItem> feedCache = new Dictionary<string, FeedCacheItem>(); 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");
Комментариев нет :
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.