static string GetUrl(SearchAndNotification searchPhrase, int page) { var modelAndTrim = searchPhrase.Model; if (!string.IsNullOrWhiteSpace(searchPhrase.Trim) && !Constants.AnyTrim.Equals(searchPhrase.Trim, StringComparison.InvariantCultureIgnoreCase)) { modelAndTrim += $" {searchPhrase.Trim}"; } var queryParams = new Dictionary <string, string>() { { "IncludeEngrosCVR", "true" }, { "PriceFrom", "0" }, { "includeLeasing", "false" }, { "free", modelAndTrim }, { "page", page.ToString() } }; if (!string.IsNullOrWhiteSpace(searchPhrase.EarliestYear)) { queryParams.Add("YearFrom", searchPhrase.EarliestYear); } if (!string.IsNullOrWhiteSpace(searchPhrase.MaxKmDriven)) { queryParams.Add("MileageTo", searchPhrase.MaxKmDriven); } return(QueryHelpers.AddQueryString(BaseSearchUrl, queryParams)); }
public static async Task <List <SearchResult> > SayHello([ActivityTrigger] SearchAndNotification searchPhrase, ILogger log) { try { using (var client = new HttpClient(new HttpClientHandler() { AllowAutoRedirect = false })) { var res = new List <SearchResult>(); for (int i = 1; i < 10; i++) { var response = await client.GetAsync(GetUrl(searchPhrase, i)); if (!response.IsSuccessStatusCode) { break; } var pageContents = await response.Content.ReadAsStringAsync(); HtmlDocument pageDocument = new HtmlDocument(); pageDocument.LoadHtml(pageContents); res.AddRange(ParseHtml(pageDocument, searchPhrase.Model, log).Where(sr => sr.Model.Equals(searchPhrase.Model, StringComparison.InvariantCultureIgnoreCase))); } log.LogInformation($"Search: Found {res.Count} matches for {searchPhrase.Model}"); return(res); } } catch (Exception e) { log.LogError(e, $"Exception caught in {SearchFunctionName}"); throw e; } }