public Site(string id, Uri baseUri, SearchUriBuilder searchUri, ITorrentSiteParser parser)
 {
     this.Id        = id;
     this.BaseUri   = baseUri;
     this.SearchUri = searchUri;
     this.Parser    = parser;
 }
示例#2
0
        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());
        }
示例#4
0
        /// <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));
 }
示例#6
0
        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));
        }
示例#7
0
 public void GivenACompanySearchUriBuilder()
 {
     _path       = "wat/wat/1";
     _uriBuilder = new SearchUriBuilder(_path);
 }