示例#1
0
        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("&nbsp;", "");
                                        priceInfo.StartingPrice    = tr.SelectNodes(".//td[3]")?.FirstOrDefault()?.InnerText.Replace("&nbsp;", "");
                                        priceInfo.PriceDescription = tr.SelectNodes(".//td[4]")?.FirstOrDefault()?.InnerText;
                                        priceList.Add(priceInfo);
                                    }
                                    house.PriceList = priceList;
                                }
                            }
                        }
                    }
                }
            }


            _logger.LogInformation(JsonConvert.SerializeObject(houseList));
        }
示例#3
0
        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));
        }