public async override void GetRealEstateOffers() { foreach (var propType in PropertyType.Values) { if (propType != PropertyType.ELSE && propType != PropertyType.INVALID) { foreach (var prov in Province.PROVINCES) { RealEstateOfferRequestModel offerModel = new RealEstateOfferRequestModel(prov, City.ALL, propType, AdvertisementType.ALL); string request = FormatRequestString(offerModel); string offersWebsite = ReadWebsite(request); if (offersWebsite != null) { await ParseOffersFromHtml(offersWebsite); string offerTotalPages = offersWebsite.Substring(offersWebsite.LastIndexOf("<input type=\"text\" value=\"1\" min=\"1\" max=\"") + "<input type=\"text\" value=\"1\" min=\"1\" max=\"".Length); offerTotalPages = offerTotalPages.Remove(offerTotalPages.IndexOf('"')); int count = Int32.Parse(offerTotalPages); for (int i = 2; i < count; i++) { offerModel.PageNumber++; request = FormatRequestString(offerModel); offersWebsite = ReadWebsite(request); await ParseOffersFromHtml(offersWebsite); } } } } } }
public ActionResult Search(string city = "all", string propType = "all", string province = "all", string advType = "all", int page = 1) { List <RealEstateOfferModel> list = null; try { if (city == "") { city = "all"; } RealEstateOfferRequestModel requestModel = new RealEstateOfferRequestModel(Province.FromString(province), City.FromString(city), PropertyType.FromString(propType), AdvertisementType.FromString(advType)); list = WebsitesManagement.GetFilteredOffers(requestModel); } catch (Exception ex) { Debug.WriteLine(ex); TempData["Error"] = ex.Message; } ViewBag.cityFilter = city; ViewBag.propertyFilter = propType; ViewBag.provinceFilter = province; ViewBag.advertisementFilter = advType; ViewBag.cities = DataManagement.getCities(); ViewBag.provinces = DataManagement.getProvinces(); if (list == null) { return(RedirectToAction("Index")); } else { return(View(list.ToPagedList(page, 10))); } }
public static List <RealEstateOfferModel> GetFilteredOffers(RealEstateOfferRequestModel a_offer) { List <RealEstateOfferModel> offers = new List <RealEstateOfferModel>(); lock (RealEstateOffers) { offers = RealEstateOffers.Where(m => m.IsMatch(a_offer)).ToList(); } return(offers); }
protected override string FormatRequestString(RealEstateOfferRequestModel a_offerModel) { string formattedRequest = websiteAdressBegin + Adress + RequestLinkSchema; formattedRequest = formattedRequest.Replace(propertyType, PropertyTypeIdMap[a_offerModel.PropertyType]); formattedRequest = formattedRequest.Replace(advertisementType, AdvertisementTypeIdMap[a_offerModel.AdvertisementType]); formattedRequest = formattedRequest.Replace(province, ProvinceIdMap[a_offerModel.Province]); formattedRequest = formattedRequest.Replace(pageNumber, a_offerModel.PageNumber.ToString()); return(formattedRequest); }
protected override string FormatRequestString(RealEstateOfferRequestModel a_offerModel) { string formattedRequest = websiteAdressBegin + Adress + RequestLinkSchema; try { formattedRequest = formattedRequest.Replace("{" + pageNumber + "}", a_offerModel.PageNumber.ToString()); formattedRequest = formattedRequest.Replace("{" + propertyType + "}", PropertyTypeIdMap[a_offerModel.PropertyType]); formattedRequest = formattedRequest.Replace("{" + advertisementType + "}", AdvertisementTypeIdMap[a_offerModel.AdvertisementType]); formattedRequest = formattedRequest.Replace("{" + province + "}", ProvinceIdMap[a_offerModel.Province]); } catch (Exception ex) { Debug.WriteLine(ex); formattedRequest = null; } return(formattedRequest); }
public async override void GetRealEstateOffers() { foreach (var propType in Enums.PropertyType.Values) { foreach (var province in Province.PROVINCES) { try { RealEstateOfferRequestModel model = new RealEstateOfferRequestModel(Province.FromString(province.Name), City.ALL, Enums.PropertyType.FromString(propType.Name), Enums.AdvertisementType.ALL); string request = FormatRequestString(model); string offersWebsite = ReadWebsite(request); if (offersWebsite != null) { //Parse offers from first page await ParseOffersFromHtml(offersWebsite); //Get number of pages left to check string offerTotalPages = offersWebsite.Substring(offersWebsite.LastIndexOf("golink('/oferta/search/") + "golink('/oferta/search/".Length); offerTotalPages = offerTotalPages.Remove(offerTotalPages.IndexOf(".html")); int count = Int32.Parse(offerTotalPages); for (int i = 2; i < count; i++) { //Parse offers from rest of pages model.PageNumber++; request = FormatRequestString(model); offersWebsite = ReadWebsite(request); await ParseOffersFromHtml(offersWebsite); } } else { //Invalid html } } catch (Exception ex) { Debug.WriteLine(ex); } } } }
protected abstract string FormatRequestString(RealEstateOfferRequestModel a_offerModel);