private void SetupFacets <T, TU>(EsRootObjectBase <T> results, SearchResultBase <TU> searchResult) { Dictionary <string, Aggregation> facets = results.Aggregations; if (facets?.Any() == true) { searchResult.Facets = facets.Select(f => new FacetEntry { Key = f.Key, Count = f.Value.Facets.Length, Hits = f.Value.Facets.Select(i => new FacetHit { Key = i.Key, Count = i.Count }).ToArray() }).ToArray(); } }
public IAsyncOperation<SearchResultBase> SearchBrief(string keyword) { if (keyword == null || keyword?.Length == 0) throw new ArgumentException("搜索内容不能为空"); return Run(async token => { try { LogService.DebugWrite($"Search key {keyword} briefly", nameof(WebApi)); var gettask = HttpHelper.GetAsync($"http://www.xiami.com/ajax/search-index?key={System.Net.WebUtility.UrlEncode(keyword.Replace(' ','+'))}&_={ParamHelper.GetTimestamp()}"); token.Register(() => gettask.Cancel()); var content = await gettask; HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(content); var categories = doc.DocumentNode.SelectNodes(".//tr"); List<ArtistModel> ams = null; List<AlbumModel> abms = null; List<SongModel> sms = null; foreach (var item in categories) { var lis = item.Descendants("li"); switch(item.Descendant("h3")?.InnerText) { case "歌曲": sms = lis.Select((node) => { var linknode = node.Element("a"); var linkt = linknode.GetAttributeValue("href", "/0?"); var song = SongModel.GetNew(ParseXiamiID(linkt)); song.TrackArtist = linknode.LastChild.InnerHtml; song.NameHtml = linknode.InnerHtml.Substring(0, linknode.InnerHtml.IndexOf("- <span>")); //System.Diagnostics.Debugger.Break(); return song; }).ToList(); break; case "专辑": abms = lis.Select((node) => { var linknode = node.Element("a"); var linkt = linknode.GetAttributeValue("href", "/0?"); var album = AlbumModel.GetNew(ParseXiamiID(linkt)); if (album.Art.Host == "") { var art = linknode.Descendant("img").GetAttributeValue("src", AlbumModel.LargeDefaultUri); album.Art = new Uri(art.Replace("_3", "_2")); album.ArtFull = new Uri(art.Replace("_3", "")); } var snode = linknode.Descendant("strong"); album.NameHtml = snode.InnerHtml; album.ArtistHtml = snode.ParentNode.ChildNodes.Last().InnerHtml.Trim(); return album; }).ToList(); break; case "艺人": ams = lis.Select((node) => { var linknode = node.Element("a"); var linkt = linknode.GetAttributeValue("href", "/0?"); var artist = ArtistModel.GetNew(ParseXiamiID(linkt)); artist.Art = new Uri(linknode.Descendant("img").GetAttributeValue("src", ArtistModel.LargeDefaultUri)); artist.NameHtml = linknode.Descendant("strong").InnerHtml; return artist; }).ToList(); break; default: break; } } SearchResultBase result = new SearchResultBase() { Songs = sms, Artists = ams, Albums = abms }; LogService.DebugWrite($"Finish Searching {keyword}", nameof(WebApi)); return result; } catch (Exception e) { LogService.ErrorWrite(e, nameof(WebApi)); throw e; } }); }