public ActionResult Edit(int Id) { Currency cur = new Currency(); cur.ID = -1; List <PriceInfoViewModel> priceList = new List <PriceInfoViewModel>(); if (Id > 0) { cur = FoundationDB.CurrencyDb.GetById(Id); priceList = FoundationDB.DB.Queryable <Cryptocurrencies, PriceInfos>((c, pi) => new object[] { JoinType.Left, c.Id == pi.CryptoID }).Where((c, pi) => pi.CurrencyID == Id).Select((c, pi) => new PriceInfoViewModel { CryptoName = c.Name, CryptoCode = c.Code, Price = pi.Price }).ToList(); } else { foreach (Cryptocurrencies item in FoundationDB.CryptocurrencyDb.GetList()) { PriceInfoViewModel pv = new PriceInfoViewModel(); pv.CryptoName = item.Name; pv.CryptoCode = item.Code; priceList.Add(pv); } } ViewBag.PriceList = priceList; return(View(cur)); }
private async Task GetHouseData() { // 抓取https://cs.newhouse.fang.com/house/s/b91/ 楼盘数据 var urlList = new List <string>(); var houseList = new List <HouseViewModel>(); var baseUrl = @"https://cs.newhouse.fang.com/house/s/b9"; for (int i = 1; i <= 1; i++) { urlList.Add(baseUrl + i); } HttpClient client = _httpClientFactory.CreateClient("House"); foreach (var url in urlList) { var request = new HttpRequestMessage(HttpMethod.Get, url); using (var response = await client.SendAsync(request)) { using (var content = response.Content) { var result = await content.ReadAsStringAsync(); var document = new HtmlDocument(); document.LoadHtml(result); var nodes = document.DocumentNode.SelectNodes("//*[@id='newhouse_loupai_list']/ul"); if (nodes != null && nodes.Count > 0) { var loupanUlNode = nodes.First(); var loupanLiNodes = loupanUlNode.SelectNodes(".//li"); foreach (var li in loupanLiNodes) { var houseModel = new HouseViewModel(); var titleNodes = li.SelectNodes(".//div[@class=\"nlcd_name\"]/a"); var priceNodes = li.SelectNodes(".//div[@class=\"nhouse_price\"]/span"); var houseTypeNodes = li.SelectNodes(".//div[@class=\"house_type clearfix\"]"); var addressNodes = li.SelectNodes(".//div[@class=\"address\"]"); var telNodes = li.SelectNodes(".//div[@class=\"tel\"]"); var buildingTypeNodes = li.SelectNodes(".//div[@class=\"fangyuan\"]/a"); if (titleNodes != null && titleNodes.Count > 0) { if (!string.IsNullOrEmpty(titleNodes.First().InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", ""))) { houseModel.Name = titleNodes.First().InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", ""); houseModel.Url = "https:" + titleNodes.First().GetAttributeValue("href", ""); houseModel.Price = priceNodes?.FirstOrDefault()?.InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", ""); houseModel.RoomType = houseTypeNodes?.FirstOrDefault()?.InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", ""); houseModel.Address = addressNodes?.FirstOrDefault()?.InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", ""); houseModel.Tel = telNodes?.FirstOrDefault()?.InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", ""); List <string> buildingTypeList = new List <string>(); foreach (var buildingType in buildingTypeNodes) { buildingTypeList.Add(buildingType?.InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "")); } houseModel.BuildingType = string.Join(",", buildingTypeList); houseList.Add(houseModel); } } } } } } } foreach (var house in houseList) { var houseHomeRequest = new HttpRequestMessage(HttpMethod.Get, house.Url); using (var homeResponse = await client.SendAsync(houseHomeRequest)) { using (var content = homeResponse.Content) { var result = await content.ReadAsStringAsync(); var document = new HtmlDocument(); document.LoadHtml(result); var detailLinkNodes = document.DocumentNode.SelectNodes("//*[@id=\"orginalNaviBox\"]/a[2]"); if (detailLinkNodes != null && detailLinkNodes.Count > 0) { house.HomeUrl = "https:" + detailLinkNodes.First().GetAttributeValue("href", ""); Regex reg = new Regex(@"house.{1}(\d*).{1}housedetail", RegexOptions.IgnoreCase); var id = reg.Match(house.HomeUrl).Groups.LastOrDefault()?.Value; house.Id = id; var detailRequest = new HttpRequestMessage(HttpMethod.Get, house.HomeUrl); using (var detailResponse = await client.SendAsync(detailRequest)) { using (var detailContent = detailResponse.Content) { var detailResult = await detailContent.ReadAsStringAsync(); var detailDoc = new HtmlDocument(); detailDoc.LoadHtml(detailResult); // 基础信息 var baseInfoNode = detailDoc.DocumentNode.SelectNodes("//div[@class=\"main-item\"]")?[0]; var pointNodes = baseInfoNode?.SelectNodes(".//a/span[2]"); house.Point = pointNodes?.FirstOrDefault()?.InnerText; var baseInfoLiNodes = baseInfoNode?.SelectNodes(".//ul/li"); var baseInfoDic = new Dictionary <string, string>(); for (int i = 0; i < 8; i++) { var keyNode = baseInfoLiNodes?[i].SelectSingleNode(".//div[1]"); var valueNode = baseInfoLiNodes?[i].SelectSingleNode(".//div[2]"); if (keyNode is null) { break; } baseInfoDic.Add(keyNode.InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "").Replace(":", ""), valueNode.InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "")); } house.BaseInfoJson = JsonConvert.SerializeObject(baseInfoDic); //销售信息 var saleInfoNode = detailDoc.DocumentNode.SelectNodes("//div[@class=\"main-item\"]")?[1]; var saleInfoLiNodes = saleInfoNode?.SelectNodes(".//ul/li"); var saleInfoDic = new Dictionary <string, string>(); for (int i = 0; i < (saleInfoLiNodes?.Count ?? 0) - 1; i++) { var keyNode = saleInfoLiNodes?[i].SelectSingleNode(".//div[1]"); var valueNode = saleInfoLiNodes?[i].SelectSingleNode(".//div[2]"); if (keyNode is null) { break; } saleInfoDic.Add(keyNode.InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "").Replace(":", ""), valueNode.InnerText.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "")); } house.SaseInfoJson = JsonConvert.SerializeObject(saleInfoDic); // 预售信息 var preSaleTables = saleInfoNode?.SelectNodes(".//table"); var perSaleTrs = preSaleTables?.LastOrDefault()?.SelectNodes(".//tr"); var perSaleList = new List <PerSaleInfoViewModel>(); for (int i = 1; i < perSaleTrs.Count; i++) { var perSaleInfo = new PerSaleInfoViewModel(); perSaleInfo.License = perSaleTrs[i].SelectNodes(".//td[1]")?.FirstOrDefault()?.InnerText; perSaleInfo.IssueDate = perSaleTrs[i].SelectNodes(".//td[2]")?.FirstOrDefault()?.InnerText; perSaleInfo.BindBuilding = perSaleTrs[i].SelectNodes(".//td[3]")?.FirstOrDefault()?.InnerText; perSaleList.Add(perSaleInfo); } house.PerSaleList = perSaleList; // 价格信息 var priceTable = detailDoc.DocumentNode.SelectNodes("//div[@class=\"main-item\"]")?[4]?.SelectNodes(".//table"); var priceTrs = priceTable?.LastOrDefault()?.SelectNodes(".//tr"); var priceList = new List <PriceInfoViewModel>(); foreach (var tr in priceTrs) { var priceInfo = new PriceInfoViewModel(); priceInfo.RecordDate = tr.SelectNodes(".//td[1]")?.FirstOrDefault()?.InnerText; priceInfo.AvgPrice = tr.SelectNodes(".//td[2]")?.FirstOrDefault()?.InnerText.Replace(" ", ""); priceInfo.StartingPrice = tr.SelectNodes(".//td[3]")?.FirstOrDefault()?.InnerText.Replace(" ", ""); priceInfo.PriceDescription = tr.SelectNodes(".//td[4]")?.FirstOrDefault()?.InnerText; priceList.Add(priceInfo); } house.PriceList = priceList; } } } } } } _logger.LogInformation(JsonConvert.SerializeObject(houseList)); }
public ActionResult Edit(int Id) { Cryptocurrencies cur = new Cryptocurrencies(); cur.Id = -1; List <PriceInfoViewModel> priceList = new List <PriceInfoViewModel>(); if (Id > 0) { cur = FoundationDB.CryptocurrencyDb.GetById(Id); cur.Withdrawal_Tier = cur.Withdrawal_Tier * 100; priceList = FoundationDB.DB.Queryable <Currency, PriceInfos>((c, pi) => new object[] { JoinType.Left, c.ID == pi.CurrencyID }).Where((c, pi) => pi.CryptoID == Id).Select((c, pi) => new PriceInfoViewModel { CurrencyName = c.Name, CurrencyCode = c.Code, Price = pi.Price }).ToList(); if (priceList.Count == 0) { foreach (Currency item in FoundationDB.CurrencyDb.GetList()) { PriceInfoViewModel pv = new PriceInfoViewModel(); pv.CurrencyName = item.Name; pv.CurrencyCode = item.Code; priceList.Add(pv); } } } else { foreach (Currency item in FoundationDB.CurrencyDb.GetList()) { PriceInfoViewModel pv = new PriceInfoViewModel(); pv.CurrencyName = item.Name; pv.CurrencyCode = item.Code; priceList.Add(pv); } } Dictionary <string, bool> roleDic = new Dictionary <string, bool>(); foreach (var item in EnumHelper.EnumToList <CryptoStatus>()) { roleDic.Add(item.EnumName, CheckRoleOpened((byte)cur.Status, (CryptoStatus)item.EnumValue)); } var statusList = new List <SelectListItem>(); statusList.Add(new SelectListItem() { Text = "Enable", Value = "1" }); statusList.Add(new SelectListItem() { Text = "Disable", Value = "0" }); ViewBag.StatusList = statusList; ViewBag.RoleDic = roleDic; ViewBag.PriceList = priceList; var boolList = new List <SelectListItem>(); boolList.Add(new SelectListItem() { Text = "True", Value = "1" }); boolList.Add(new SelectListItem() { Text = "False", Value = "0" }); ViewBag.BoolList = boolList; return(View(cur)); }