/// <summary> /// 直播分类信息扩展接口 /// </summary> public string LiveTypesEx(LiveFilter filter) { try { var key = new VideoNodeKey(filter.platform, filter.type, filter.auth); var root = new XElement("types"); var filters = VideoNodesUtil.FormateTagFilter(filter); root.Add(from livetype in LiveTypeDicCache.Instance.Items where livetype.Channels.ContainsKey(key) let count = GetChannelCount(livetype, key, filter, filters) where count > 0 select new XElement("type", new XElement("tid", livetype.ID), new XElement("name", livetype.Language[filter.lang].Title), new XElement("count", count), new XElement("image", livetype.PicLink) )); return root.ToString(SaveOptions.DisableFormatting); } catch (KeyNotFoundException) { return NoPlatLive(); } catch (Exception ex) { return BoxUtils.FormatErrorMsg(ex); } }
/// <summary> /// 直播扩展接口条件过滤方法集 /// </summary> public static List<Func<LiveVideoNode, VideoPars, LiveFilter, bool>> FormateLiveVideoExFilter(LiveFilter filter, VideoPars pars) { var filters = new List<Func<LiveVideoNode, VideoPars, LiveFilter, bool>>(11); filters.Add(FilterFunUtils.LiveHiddenFlag); if (filter.forbidden) { filters.Add(FilterFunUtils.LiveForbidden); } if (!string.IsNullOrEmpty(filter.beginletter)) filters.Add(FilterFunUtils.LiveBeginLetter); if (pars.Flags != null) filters.Add(FilterFunUtils.LiveFlags); if (filter.ver <= 1) filters.Add(FilterFunUtils.LiveVer1); else filters.Add(FilterFunUtils.LiveVer2); if (filter.forbidvip == 1) filters.Add(FilterFunUtils.LiveForbidVip); if (filter.bitratemin != 0) filters.Add(FilterFunUtils.LiveBitMin); if (filter.bitratemax != 0) filters.Add(FilterFunUtils.LiveBitMax); if (filter.wmin != 0) filters.Add(FilterFunUtils.LiveWMin); if (filter.wmax != 0) filters.Add(FilterFunUtils.LiveWMax); if (filter.hmin != 0) filters.Add(FilterFunUtils.LiveHMin); if (filter.hmax != 0) filters.Add(FilterFunUtils.LiveHMax); return filters; }
/// <summary> /// 直播基本接口条件过滤方法集 /// </summary> public static List<Func<LiveVideoNode, VideoPars, LiveFilter, bool>> FormateLiveVideoFilter(LiveFilter filter, VideoPars pars) { var filters = new List<Func<LiveVideoNode, VideoPars, LiveFilter, bool>>(4); filters.Add(FilterFunUtils.LiveHiddenFlag); if (filter.forbidden) { filters.Add(FilterFunUtils.LiveForbidden); } if (!string.IsNullOrEmpty(filter.beginletter)) filters.Add(FilterFunUtils.LiveBeginLetter); if (pars.Flags != null) filters.Add(FilterFunUtils.LiveFlags); if (filter.ver <= 1) filters.Add(FilterFunUtils.LiveVer1); else filters.Add(FilterFunUtils.LiveVer2); return filters; }
/// <summary> /// 直播节目请求参数处理 /// </summary> public static VideoPars FormatLiveVideoPars(LiveFilter filter) { VideoPars vp = new VideoPars(); if (filter.type != 0) { vp.SortTag = filter.type.ToString(); } if (!string.IsNullOrEmpty(filter.flag)) { vp.Flags = filter.flag.FormatStrToArray(SplitArray.LineArray); } if (filter.forbidden) { filter.forbidden = VideoNodeKeyArray.Instance.Forbidden[new VideoNodeKey(filter.platform, 0, filter.auth)]; if (filter.forbidden) { if (ForbiddenAreaCache.Instance.Items.ContainsKey(filter.fbcode)) { vp.ForbiddenName = ForbiddenAreaCache.Instance.Items[filter.fbcode].ForbiddenAreaName; } else { filter.forbidden = false; } } } return vp; }
/// <summary> /// 直播节目预告输出 /// </summary> public static XElement LiveListParade(ChannelLiveItemsNode parade, LiveFilter filter) { return new XElement("parade", new XAttribute("begin_time", parade.StartTime.TimeOfDay.ToString()), parade.Language[filter.lang].Title ); }
/// <summary> /// 输出频道预告列表 /// </summary> private string CreateParades(LiveVideoNode video, IEnumerable<ChannelLiveItemsNode> parades, LiveFilter filter) { var root = new XElement("v", new XElement("vid", video.Main.ChannelID), new XElement("title", video.Language[filter.lang].ChannelName), new XElement("parade-date", filter.date.ToString("yyyy-MM-dd")) ); var paradelist = new XElement("parade_list"); paradelist.Add(from parade in parades select VideoResponseUtils.LiveListParade(parade, filter)); root.Add(paradelist); return root.ToString(SaveOptions.DisableFormatting); }
/// <summary> /// 分页输出频道列表 /// </summary> private string CreatePageList(IEnumerable<LiveVideoNode> list, LiveFilter filter, VideoPars pars, VideoNodeKey key, bool isEx) { var xml = new XElement("vlist"); xml.Add(new XElement("countInPage", filter.c), new XElement("page", filter.s)); var count = list.PageList(filter, pars, xml, isEx); xml.AddFirst(new XElement("count", count), new XElement("page_count", PageUtils.PageCount(count, filter.c))); return xml.ToString(SaveOptions.DisableFormatting); }
private int GetChannelCount(LiveTypeNode node, VideoNodeKey key, LiveFilter filter, List<Func<VideoBase, ExFilterBase, bool>> filters) { int count = 0; if (node.Channels.ContainsKey(key)) { var cs = node.Channels[key]; foreach (var c in cs) { var result = true; foreach (var f in filters) { result = result && f(LiveListCache.Instance.Dictionary[c], filter); } if (result) count++; } } return count; }
/// <summary> /// 获取节目预告列表 /// </summary> public string LiveParade(LiveFilter filter) { try { var video = LiveListCache.Instance.Dictionary[filter.vid]; var parades = video.Items.Where(p => p.StartTime.Date.Equals(filter.date.Date)).OrderBy(p => p.StartTime); return CreateParades(video, parades, filter); } catch (KeyNotFoundException) { return NoPlatLive(); } catch (Exception ex) { return BoxUtils.FormatErrorMsg(ex); } }
/// <summary> /// 获取节目信息扩展接口 /// </summary> public string LiveListsEx(LiveFilter filter) { try { var pars = VideoParsUtils.FormatLiveVideoPars(filter); var filters = VideoNodesUtil.FormateLiveVideoExFilter(filter, pars); var key = new VideoNodeKey(filter.platform, filter.type, filter.auth); var query = LiveListCache.Instance.Items[key].Where(v => { bool result = true; foreach (var f in filters) { result = result && f(v, pars, filter); } return result; }); return CreatePageList(VideoSortUtils<LiveVideoNode>.SortLiveVideos(query, filter, pars), filter, pars, key, true); } catch (KeyNotFoundException) { return NoPlatLive(); } catch (Exception ex) { return BoxUtils.FormatErrorMsg(ex); } }