public Site(string id, Uri baseUri, SearchUriBuilder searchUri, ITorrentSiteParser parser) { this.Id = id; this.BaseUri = baseUri; this.SearchUri = searchUri; this.Parser = parser; }
protected IEnumerable <TorrentSearchResult> GetResultsFromSite(SearchUriBuilder searchUriBuilder, string query, int siteNumber, Func <Uri, string> downloadHtml) { Type searchResultType = typeof(TSearch); Uri searchUri = searchUriBuilder.GetUriWithParameters(query, siteNumber); string contents = downloadHtml(searchUri); // List of single items (item = raw search result (row) from the response) IEnumerable <string> rawResults = RegexParseHelper.GetMatchValues(contents, searchResultType.GetCustomAttribute <ItemPatternAttribute>().Pattern); foreach (string rawResult in rawResults) { TSearch searchResult = new TSearch(); SetModelPropertiesValues(rawResult, searchResult); yield return(searchResult); } }
public List <TorrentSearchResult> GetSearchResults(SearchUriBuilder searchUriBuilder, string query, int numberOfResults) { List <TorrentSearchResult> searchResults = new List <TorrentSearchResult>(); int siteNumber = SearchStartNumber; while (searchResults.Count < numberOfResults) { IEnumerable <TorrentSearchResult> newResults = GetResultsFromSite(searchUriBuilder, query, siteNumber++); if (newResults.Count() <= 0) { // We are not getting any results break; } searchResults.AddRange(newResults); } return(searchResults.Take(numberOfResults).ToList()); }
/// <summary> /// <para>Searches for <see cref="TorrentSiteSearchResult"/> for the <paramref name="query"/> on <see cref="Site"/> specified while creating new instance of this class.</para> /// </summary> /// <param name="query">Search query</param> /// <param name="numberOfResults">Number of <see cref="TorrentSiteSearchResult"/> to be returned</param> /// <param name="downloadHtml">Function provided to download page</param> /// <returns></returns> public List <TorrentSearchResult> GetSearchResults(SearchUriBuilder searchUriBuilder, string query, int numberOfResults, Func <Uri, string> downloadHtml) { List <TorrentSearchResult> searchResults = new List <TorrentSearchResult>(); int siteNumber = SearchStartNumber; int previousNumberOfResults = 0; while (searchResults.Count < numberOfResults) { searchResults.AddRange(GetResultsFromSite(searchUriBuilder, query, siteNumber++, downloadHtml)); if (searchResults.Count <= previousNumberOfResults) { // We are not getting any results break; } previousNumberOfResults = searchResults.Count; } return(searchResults.Take(numberOfResults).ToList()); }
public List <TorrentSearchResult> GetSearchResults(ITorrentSearchResultsParser torrentSearchResultParser, SearchUriBuilder searchUriBuilder, string query, int numberOfResults = 10) { return(torrentSearchResultParser.GetSearchResults(searchUriBuilder, query, numberOfResults, DownloadHtml)); }
public List <TorrentSearchResult> GetSearchResults(ITorrentSearchResultsParser torrentSearchResultParser, SearchUriBuilder searchUriBuilder, string query, int numberOfResults = 10) { Contract.Requires(torrentSearchResultParser != null); Contract.Requires(searchUriBuilder != null); Contract.Requires(!String.IsNullOrEmpty(query)); return(torrentSearchResultParser.GetSearchResults(searchUriBuilder, query, numberOfResults)); }
public void GivenACompanySearchUriBuilder() { _path = "wat/wat/1"; _uriBuilder = new SearchUriBuilder(_path); }