关于RSS信息按时间排序的代码

来源:互联网 发布:海洋最深处 知乎 编辑:程序博客网 时间:2024/05/29 16:44
 /// <summary>
        /// 按照发布日期为Rss条目信息排序,并且输出最近N天离当前时间最远的一天的序号
        /// </summary>
        /// <param name="recentDays"></param>
        /// <param name="rssItem"></param>
        /// <returns></returns>
        private static int[] FiterByDateTime(int recentDays, List<RssItemOriInfo> rssItem, out int remoteDayIndexInRecentDays)
        {
            remoteDayIndexInRecentDays = 0;
            if (rssItem == null)
            {
                return null;
            }
            List<KeyValuePair<int, DateTime>> pairList = new List<KeyValuePair<int, DateTime>>();
            for (int i = 0; i < rssItem.Count; i++)
            {
                String dateStr = rssItem[i].PubDate;
                DateTime dateTime;
                if (!DateTime.TryParse(dateStr, out dateTime))
                {
                    continue;
                }
                KeyValuePair<int, DateTime> pair = new KeyValuePair<int, DateTime>(i, dateTime);
                pairList.Add(pair);
            }
            pairList.Sort(delegate(KeyValuePair<int, DateTime> s1, KeyValuePair<int, DateTime> s2)
            {
                return s2.Value.CompareTo(s1.Value);
            });
            if (pairList.Count == 0)
            {
                return null;
            }

            DateTime borderDate = DateTime.Now.AddDays(-(recentDays - 1));
            borderDate = new DateTime(borderDate.Year, borderDate.Month, borderDate.Day);

            int[] indexArray = new int[pairList.Count];
            for (int i = 0; i < pairList.Count; i++)
            {
                indexArray[i] = pairList[i].Key;
                if (pairList[i].Value.CompareTo(borderDate) >= 0)
                {
                    remoteDayIndexInRecentDays = i + 1;
                }
            }
            return indexArray;
        }

        /// <summary>
        /// 根据过滤规则及过滤信息过滤Rss的条目信息
        /// </summary>
        /// <param name="srcRssItems"></param>
        /// <param name="fiterInfo"></param>
        /// <param name="fiterRule"></param>
        /// <param name="rssItems"></param>
        /// <returns></returns>
        private static bool FilterRssInfo(List<RssItemOriInfo> srcRssItems, FilterInfo fiterInfo, FilterType fiterRule, out List<RssItemOriInfo> rssItems)
        {
            rssItems = new List<RssItemOriInfo>();
            int[] orderByDate;
            int itemsFilterAsDay = 0;
            orderByDate = FiterByDateTime(fiterInfo.RecentDays, srcRssItems, out itemsFilterAsDay);
            List<RssItemOriInfo> tempRssItems = new List<RssItemOriInfo>();
            if (orderByDate == null)
            {
                return true;
            }
            for (int i = 0; i < orderByDate.Length; i++)
            {
                tempRssItems.Add(srcRssItems[orderByDate[i]]);
            }

            int itemsFilterAsItem = fiterInfo.RecentItems >= tempRssItems.Count ? tempRssItems.Count : fiterInfo.RecentItems;
            int itemsFilterAsBoth = itemsFilterAsItem >= itemsFilterAsDay ? itemsFilterAsDay : itemsFilterAsItem;
            if (fiterRule == FilterType.NONE)
            {
                rssItems = srcRssItems;
            }
            else if (fiterRule == FilterType.DAY)
            {
                for (int i = 0; i < itemsFilterAsDay; i++)
                {
                    rssItems.Add(tempRssItems[i]);
                }
            }
            else if (fiterRule == FilterType.ITEM)
            {
                for (int i = 0; i < itemsFilterAsItem; i++)
                {
                    rssItems.Add(tempRssItems[i]);
                }
            }
            else if (fiterRule == (FilterType.DAY | FilterType.ITEM))
       {
                for (int i = 0; i < itemsFilterAsBoth; i++)
                {
                    rssItems.Add(tempRssItems[i]);
                }
       }

            return true;
        }
0 0
原创粉丝点击