/// <summary> /// 点播基本接口条件过滤方法集 /// </summary> public static List<Func<VideoNode, VideoPars, ListFilter, bool>> FormateVideoFilter(ListFilter filter, VideoPars pars) { var filters = new List<Func<VideoNode, VideoPars, ListFilter, bool>>(4); if (!string.IsNullOrEmpty(filter.beginletter)) filters.Add(FilterFunUtils.BeginLetter); if (pars.Flags != null) filters.Add(FilterFunUtils.Flags); if (pars.Tags != null) filters.Add(FilterFunUtils.Tags); if (filter.ver <= 1) { filters.Add(FilterFunUtils.Ver1); } else { filters.Add(FilterFunUtils.Ver2); if (filter.screen != "v") { filters.Add(FilterFunUtils.Virtual); } } if (filter.forbidden) { filters.Add(FilterFunUtils.Forbidden); } return filters; }
/// <summary> /// 频道名拼音扩展搜索 /// </summary> public string VideoSearchCHEx(ListFilter filter) { try { return CreateSmarkPageList(LuceneNetUtil.SearchEx(filter, EpgIndexNode.CnNameField, EpgIndexNode.NameOccurs, Searcher.SegmentChWord(filter.k), false), filter, VideoParsUtils.FormateSearchVideoPars(filter), true); } catch (KeyNotFoundException) { return NoPlatForm(); } catch (Exception ex) { return BoxUtils.FormatErrorMsg(ex); } }
public string ListByTags(ListFilter filter) { try { var pindex = VideoNodeKeyArray.Instance.Items[new VideoNodeKey(filter.platform, 0, filter.auth)]; var pars = VideoParsUtils.FormatListByTags(filter); var filters = VideoNodesUtil.FormateVideoFilter(filter, pars); var tag = pars.SortTag.Substring(0, pars.SortTag.LastIndexOf(":")); var dimension = pars.SortTag.Substring(pars.SortTag.LastIndexOf(":") + 1); IEnumerable<int> channels = new List<int>(); foreach (var type in BoxTypeCache.Instance.Items.Values) { var key = new TagNodeKey() { Dimension = dimension, Type = type.TypeID }; if (TagCache.Instance.Items.ContainsKey(key)) { var vkey = new VideoNodeKey(filter.platform, type.TypeID, filter.auth); var node = TagCache.Instance.Items[key].FirstOrDefault(v => v.Language[CustomArray.LanguageArray[0]].Title == tag); if (node != null && node.Channels.ContainsKey(vkey)) channels = channels.Union(node.Channels[vkey]); } } var query = channels.Where(v => { bool result = true; var video = ListCache.Instance.Dictionary[v]; foreach (var f in filters) { result = result && f(video, pars, filter); } return result; } ); return CreatePageList(query, filter, pars, false); } catch (KeyNotFoundException) { return NoPlatForm(); } catch (Exception ex) { return BoxUtils.FormatErrorMsg(ex); } }
/// <summary> /// 点播扩展接口条件过滤方法集 /// </summary> public static List<Func<VideoNode, VideoPars, ListFilter, bool>> FormateVideoExFilter(ListFilter filter, VideoPars pars) { var filters = new List<Func<VideoNode, VideoPars, ListFilter, bool>>(10); if (!string.IsNullOrEmpty(filter.beginletter)) filters.Add(FilterFunUtils.BeginLetter); if (pars.Flags != null) filters.Add(FilterFunUtils.Flags); if (pars.Tags != null) filters.Add(FilterFunUtils.Tags); if (filter.ver <= 1) { filters.Add(FilterFunUtils.Ver1); } else { filters.Add(FilterFunUtils.Ver2); if (filter.screen != "v") { filters.Add(FilterFunUtils.Virtual); } } if (filter.forbidden) { filters.Add(FilterFunUtils.Forbidden); } if (filter.forbidvip == 1) filters.Add(FilterFunUtils.ForbidVip); if (filter.bitratemin != 0) filters.Add(FilterFunUtils.BitMin); if (filter.bitratemax != 0) filters.Add(FilterFunUtils.BitMax); if (filter.wmin != 0) filters.Add(FilterFunUtils.WMin); if (filter.wmax != 0) filters.Add(FilterFunUtils.WMax); if (filter.hmin != 0) filters.Add(FilterFunUtils.HMin); if (filter.hmax != 0) filters.Add(FilterFunUtils.HMax); return filters; }
/// <summary> /// 点播节目请求参数处理 /// </summary> public static VideoPars FormatVideoPars(ListFilter filter) { var vp = new VideoPars(); if (filter.ver <= 1) { if (!string.IsNullOrEmpty(filter.tag)) { var tags = filter.tag.FormatStrToArrayEmpty(SplitArray.LineArray); var dimensiontags = new List<string>(tags.Length); for (int i = 0; i < tags.Length; i++) { var childetags = tags[i].FormatStrToArray(SplitArray.DHArray); if (i == 0 && childetags.Length > 0) { dimensiontags.AddEnumerator(childetags.Select(v => VideoUtils.FormatStrArray(v.Length + 8, v, ":", CustomArray.CatalogDimension))); } else if (i == 1 && childetags.Length > 0) { dimensiontags.AddEnumerator(childetags.Select(v => VideoUtils.FormatStrArray(v.Length + 8, v, ":", CustomArray.AreaDimension))); } else if (i == 2 && childetags.Length > 0) { dimensiontags.AddEnumerator(childetags.Select(v => VideoUtils.FormatStrArray(v.Length + 8, v, ":", CustomArray.YearDimension))); } else if (i == 3 && childetags.Length > 0) { dimensiontags.AddEnumerator(childetags.Select(v => VideoUtils.FormatStrArray(v.Length + 8, v, ":", CustomArray.ActDimension))); } else if (i == 4 && childetags.Length > 0) { dimensiontags.AddEnumerator(childetags.Select(v => VideoUtils.FormatStrArray(v.Length + 12, v, ":", CustomArray.DirectorDimension))); } } if (dimensiontags.Count > 0 && filter.order == "s") { vp.SortTag = dimensiontags[0]; dimensiontags.RemoveAt(0); } vp.Tags = dimensiontags; } } else { if (!string.IsNullOrEmpty(filter.ntags)) { var ntags = filter.ntags.FormatStrToArray(SplitArray.LineArray); if (ntags.Length > 0 && filter.order == "s") { vp.SortTag = ntags[0]; } vp.Tags = ntags; } } if (!string.IsNullOrEmpty(filter.flag)) { vp.Flags = filter.flag.FormatStrToArray(SplitArray.LineArray); } if (filter.conlen == 0) { if (filter.ver <= 1) vp.ResponseFun = VideoResponseUtils.CustomListRes; else vp.ResponseFun = VideoResponseUtils.CustomListResVer2; } else { if (filter.ver <= 1) vp.ResponseFun = VideoResponseUtils.ConLenListRes; else vp.ResponseFun = VideoResponseUtils.ConLenListResVer2; } 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; }
public static VideoPars FormatListByTags(ListFilter filter) { var vp = new VideoPars(); var ntags = filter.ntags.FormatStrToArray(SplitArray.LineArray); if (ntags.Length > 0 ) { vp.SortTag = ntags[0]; } vp.Tags = ntags.Skip(1); if (!string.IsNullOrEmpty(filter.flag)) { vp.Flags = filter.flag.FormatStrToArray(SplitArray.LineArray); } if (filter.conlen == 0) { vp.ResponseFun = VideoResponseUtils.CustomListResVer2; } else { vp.ResponseFun = VideoResponseUtils.ConLenListResVer2; } 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 VideoPars FormatSearchVideoPars(ListFilter filter) { VideoPars vp = new VideoPars(); if (!string.IsNullOrEmpty(filter.flag)) { vp.Flags = filter.flag.FormatStrToArray(SplitArray.LineArray); } if (filter.conlen == 0) vp.ResponseFun = VideoResponseUtils.CustomListRes; else vp.ResponseFun = VideoResponseUtils.ConLenListRes; 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> private static string CreatePageList(IEnumerable<int> list, ListFilter filter, VideoPars pars, bool isEx) { if (filter.order != "s") list = VideoSortUtils<VideoNode>.Sort(list, filter); 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); }
/// <summary> /// LuceneNet分页输出 /// </summary> private static string CreateSmarkPageList(LuceneResultNode result, ListFilter filter, VideoPars pars, bool isEx) { var xml = new XElement("vlist"); xml.Add(new XElement("count", result.AllCount)); xml.Add(new XElement("page_count", PageUtils.PageCount(result.AllCount, filter.c))); xml.Add(new XElement("countInPage", filter.c)); xml.Add(new XElement("page", filter.s)); if (filter.shownav == 1) { xml.Add(new XElement("nav", from type in result.Types select new XElement("type", new XAttribute("id", type.Key), new XAttribute("name", BoxTypeCache.Instance.Items[type.Key].Language[filter.lang].Title), new XAttribute("count", type.Value) ))); } xml.Add(from v in result.Result select pars.ResponseFun(ListCache.Instance.Dictionary[int.Parse(v)], filter, isEx)); return xml.ToString(SaveOptions.DisableFormatting); }
/// <summary> /// 点播基本搜索 /// </summary> public static LuceneResultNode Search(ListFilter filter, string[] fields, Lucene.Net.Search.BooleanClause.Occur[] occurs, string query, bool isStat) { var fkey = new VideoNodeKey(filter.platform, 0, filter.auth); var containfilters = new List<ContainFilterNode>(); var fbname = string.Empty; if (filter.forbidden) { filter.forbidden = VideoNodeKeyArray.Instance.Forbidden[fkey]; if (filter.forbidden) { if (ForbiddenAreaCache.Instance.Items.ContainsKey(filter.fbcode)) { fbname = ForbiddenAreaCache.Instance.Items[filter.fbcode].ForbiddenAreaName; } else { filter.forbidden = false; } } } if (filter.forbidden) { containfilters.Add(new ContainFilterNode() { FieldName = EpgIndexNode.ForbiddenCode, Text = fbname.ToLower() }); } var pindx = VideoNodeKeyArray.Instance.Items[fkey].ToString(); containfilters.Add(new ContainFilterNode() { FieldName = EpgIndexNode.PlatformIndex, Text = pindx }); if (!string.IsNullOrEmpty(filter.flag)) { containfilters.Add(new ContainFilterNode() { FieldName = EpgIndexNode.Flags, Text = VideoParsUtils.OrderAscFlags(filter.flag) }); } if (filter.ver <= 1) { containfilters.Add(new ContainFilterNode() { FieldName = EpgIndexNode.TableType, Text = "0" }); } else { if (filter.screen == "v") { containfilters.Add(new ContainFilterNode() { FieldName = EpgIndexNode.IsGroup, Text = "0" }); } else { containfilters.Add(new ContainFilterNode() { FieldName = EpgIndexNode.Screen, Text = "0" }); containfilters.Add(new ContainFilterNode() { FieldName = EpgIndexNode.IsGroup, Text = "0" }); } } //if (filter.type != 0) //{ // containfilters.Add(new ContainFilterNode() { FieldName = EpgIndexNode.Type, Text = filter.type.ToString() }); //} var node = new SearchNode(); node.Key = filter.k; node.Pindex = pindx; node.Queries = query;//Searcher.SegmentKeyWord(filter.k); node.Fields = fields; node.Occurs = occurs; //node.SortFields = EpgIndexNode.SortFields; node.ContainFilters = containfilters; node.LongRnageFilters = new List<LongRangeNode>(); node.Start = filter.s; node.Limit = filter.c; node.IndexValue = EpgIndexNode.IndexValue; node.IsStat = isStat; node.VodType = filter.type; node.ShowNav = filter.shownav; node.TotalTypes = BoxTypeCache.Instance.Items.Count; return Searcher.Search(EpgLuceneNet.Instance.IndexDic, node); }