private async Task <bool> _downloadItemAsync(AdDtoModel item, ScraperHomeLessStateModel state) { var result = true; var id = item.Id; try { var adDetails = _getAdDetailsFromService(item); var coordinates = _getCoordinatesFromServiceAsync(item, state); var phones = _getPhonesFromService(item); var details = _getDetailsFromService(item); var detailsItemDto = new DetailsItemDtoModel { Coordinates = await coordinates, Phones = await phones, Details = await details, AdDetails = await adDetails, RowDataFromPage = item, }; await _saveItemDetailsAsync(id, detailsItemDto, state); } catch (Exception exception) { _log($"Error-f1. {exception.Message} / {exception.StackTrace}"); result = false; } return(result); }
private void _scrapeFromPage_Rent(List <AdDtoModel> result, EnumTypeItems typeItem) { var idBlock = "mainresults"; switch (typeItem) { case EnumTypeItems.Rent: idBlock = "mainresults"; break; case EnumTypeItems.RentTivuch: idBlock = "relatedresults"; break; } var data = _selenoidState.WindowMain.FindElementById(idBlock);//board mainresults/relatedresults rent/RentTivuch var rows = data.FindElements(By.TagName("tr")); foreach (var row in rows) { var listTds = row.FindElements(By.TagName("td")); if (listTds.Count > 0 && listTds.FirstOrDefault().GetAttribute("class") == "selectionarea") { var id = row.GetAttribute("id"); var city = listTds.Skip(5).Take(1).FirstOrDefault().Text; //6 var region = listTds.Skip(4).Take(1).FirstOrDefault().Text; //5 var price = listTds.Skip(7).Take(1).FirstOrDefault().Text; //8 var dateUpdated = listTds.Skip(9).Take(1).FirstOrDefault().Text; //10 var item = new AdDtoModel() { TypeItem = typeItem, Id = id.Replace("ad_", ""), City = city, Region = region, Price = price, DateUpdated = dateUpdated, }; result.Add(item); } } }
private async Task <string> _getPhonesFromService(AdDtoModel item) { var result = ""; var id = item.Id; var board = item.TypeItem.ToString(); var url = $"https://www.homeless.co.il/webservices/icardos.asmx/IncrementClickesAndGetPhoneNumber"; var request1 = url .WithTimeout(60) .WithHeaders(new { User_Agent = "wow hackers, I need your money", }) .PostJsonAsync(new { boardType = board, AdID = id }) .ReceiveJson <PostPhonesDtoModel>(); var phones = await request1; result = phones.d; return(result); }
private async Task <AdDetailsDtoModel> _getAdDetailsFromService(AdDtoModel item) { AdDetailsDtoModel result = null; PostAdDetailsDtoModel postData = null; var id = item.Id; var request = ""; var board = item.TypeItem.ToString(); var needDo = false; var url = $"https://www.homeless.co.il/webservices/icardos.asmx/Cpart_GetAdDetails?boardid={board}&itemid={id}"; do { needDo = false; try { request = await url .WithHeaders(new { User_Agent = "wow hackers, I need your money", Accept = "*/*", Content_Type = "application/json; charset=utf-8", }) .PostJsonAsync(new { boardid = board, itemid = id }) .ReceiveString(); postData = JsonConvert.DeserializeObject <PostAdDetailsDtoModel>(request); result = postData.d; } catch (Exception exception) { _log($"Error d4. Wait 1 sec. {exception.Message} "); needDo = true; Thread.Sleep(1000); } } while (needDo); return(result); }
private async Task <List <PostDetailsDDtoModel> > _getDetailsFromService(AdDtoModel item) { PostDetailsDtoModel details = null; List <PostDetailsDDtoModel> result = null; string request = ""; var id = item.Id; var board = item.TypeItem.ToString(); var needDo = false; var url = $"https://www.homeless.co.il/webservices/icardos.asmx/GetItemDetails"; do { needDo = false; try { request = await url .WithTimeout(60) .WithHeaders(new { User_Agent = "wow hackers, I need your money", }) .PostJsonAsync(new { boardid = board, itemid = id }) .ReceiveString(); } catch (Exception exception) { _log($"Error d3. {exception.Message} "); needDo = true; Thread.Sleep(1000); } } while (needDo); details = ParseDetailsFromService(request); result = details.D; return(result); }
private AdDtoModel ParseAdsFromPage_ParseAd(HtmlNode row, EnumTypeItems typeItem) { AdDtoModel result = null; var listTds = row.CssSelect("td").ToList(); var attr = listTds?.FirstOrDefault()?.Attributes["class"]?.Value; var positionDate = ParseAdsFromPage_ParseAd_GetPositionDate(typeItem); if (listTds.Count > 0 && attr == "selectionarea") { string id = "", city = "", region = "", price = "", dateUpdated = ""; try { id = row.Attributes["id"].Value.Replace("ad_", ""); city = listTds.Skip(5).Take(1).FirstOrDefault().ChildNodes.FirstOrDefault().InnerHtml; //6 region = listTds.Skip(4).Take(1).FirstOrDefault().InnerHtml; //5 price = listTds.Skip(7).Take(1).FirstOrDefault().InnerHtml; //8 dateUpdated = listTds.Skip(positionDate - 1).Take(1).FirstOrDefault()?.ChildNodes?.FirstOrDefault()?.InnerHtml; //10, revuch=11 }catch (Exception exception) { _log($"Error x4. {exception.Message} / {exception.StackTrace}"); } result = new AdDtoModel() { TypeItem = typeItem, Id = id, City = city, Region = region, Price = price, DateUpdated = dateUpdated, }; } return(result); }
private async Task <List <ScraperModels.Models.CoordinateDtoModel> > _getCoordinatesFromServiceAsync(AdDtoModel item, ScraperHomeLessStateModel state) { List <ScraperModels.Models.CoordinateDtoModel> coordinates = await GetCoordinatesFrom_OpenStreetMap_WebClientProxyAsync($"{item.Region} {item.City}", state); if (coordinates is null) { //coordinates = await _getCoordinatesFromService_ProxyAsync(item); coordinates = await GetCoordinatesFrom_OpenStreetMap_WebClientProxyAsync($"{item.Region} {item.City}", state); } _log($"Wait 10 secs", state); Thread.Sleep(1000 * 10); return(coordinates); }