예제 #1
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var xDoc   = XDocument.Parse(data);
            var houses = new List <DBHouse>();
            var domain = JToken.Parse(config.Json)["domain"]?.ToString();

            foreach (var element in xDoc.Element("houses").Elements().Where(e => e.Name == "houseinfo"))
            {
                var house = new DBHouse();
                house.Id = Tools.GetGuid();
                var houseFields = element.Elements();
                var houseId     = GetFieldValue(houseFields, "houseid");
                house.OnlineURL = $"http://{domain}/chuzu/1_{houseId}_-1.htm";
                house.City      = GetFieldValue(houseFields, "city");
                house.Location  = GetFieldValue(houseFields, "address");
                house.Longitude = GetFieldValue(houseFields, "coord_x");
                house.Latitude  = GetFieldValue(houseFields, "coord_y");
                house.Price     = int.Parse(GetFieldValue(houseFields, "price"));
                house.Title     = GetFieldValue(houseFields, "title");
                house.PicURLs   = JsonConvert.SerializeObject(new List <string>()
                {
                    GetFieldValue(houseFields, "titleimage")
                });
                house.PubTime  = DateTime.Parse(GetFieldValue(houseFields, "addtime"));
                house.JsonData = element.ToString();
                house.Title    = GetTitle(houseFields);;
                house.Tags     = GetFieldValue(houseFields, "tags");
                house.RentType = GetRentType(houseFields);
                house.Source   = SourceEnum.Fangtianxia.GetSourceName();
                Console.WriteLine(house.Title);
                houses.Add(house);
            }
            return(houses);
        }
예제 #2
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houses   = new List <DBHouse>();
            var jsonData = JToken.Parse(data);

            if (jsonData?["content"] == null)
            {
                return(houses);
            }
            foreach (var houseItem in jsonData?["content"])
            {
                var house = new DBHouse();
                house.JsonData = houseItem.ToString();
                house.City     = config.City;
                house.Title    = houseItem["title"]?.ToString() + " " + houseItem["stressName"].ToString();
                house.Location = houseItem["address"]?.ToString();
                house.Text     = houseItem["description"]?.ToString();
                if (!string.IsNullOrEmpty(houseItem["location"]?.ToString()))
                {
                    var dstPos = houseItem["location"].ToObject <List <double> >();
                    house.Longitude = dstPos[0].ToString();
                    house.Latitude  = dstPos[1].ToString();
                }
                house.Id        = Tools.GetGuid();
                house.Price     = houseItem["price"].ToObject <int>();
                house.OnlineURL = $"http://m.xhj.com/zufangdetails/{houseItem["hsmid"]}/000.html";
                house.PubTime   = UnixTimeStampToDateTime(houseItem["refreshTime"].ToObject <long>());
                house.PicURLs   = JsonConvert.SerializeObject(houseItem["imgs"].ToList().Select(j => j["imgPath"]?.ToString()).ToList());
                house.Labels    = string.Join("|", houseItem["features"].ToObject <List <string> >());
                house.RentType  = GetRentType(houseItem["rentType"].ToString());
                house.Source    = SourceEnum.Xhj.GetSourceName();
                houses.Add(house);
            }
            return(houses);
        }
예제 #3
0
 private void FillHouse(string city, List <DBHouse> houses, DBHouse house, string topicDetailJson)
 {
     LogHelper.RunActionNotThrowEx(() =>
     {
         var topicDetail = JToken.Parse(topicDetailJson)?["data"];
         house.Title     = topicDetail["title"]?.ToString();
         if (!string.IsNullOrEmpty(topicDetail["rent_fee"]?.ToString()) && topicDetail["rent_fee"] != null)
         {
             house.Price = topicDetail["rent_fee"].ToObject <int>();
         }
         if (!string.IsNullOrEmpty(topicDetail["district_tag"]?.ToString()))
         {
             house.Location  = topicDetail["district_tag"]?["name"]?.ToString();
             house.Latitude  = topicDetail["district_tag"]?["latitude"]?.ToString();
             house.Longitude = topicDetail["district_tag"]?["longitude"]?.ToString();
         }
         house.PubTime  = topicDetail["create_time"].ToObject <DateTime>();
         house.RentType = ConvertRentType(topicDetail["rent_type"]?.ToString(), topicDetail["house_type_display"]?.ToString());
         house.Text     = topicDetail["description"]?.ToString();
         if (!string.IsNullOrEmpty(topicDetail["labels"]?.ToString()))
         {
             house.Labels = string.Join("|", topicDetail["labels"].ToObject <List <string> >());
         }
         house.Source     = SourceEnum.DoubanWechat.GetSourceName();
         house.JsonData   = topicDetailJson;
         house.City       = city;
         house.CreateTime = DateTime.Now;
         house.Tags       = $"{topicDetail["house_type_display"]?.ToString()}|{topicDetail["direction_display"]?.ToString()}|{topicDetail["topic_kind_display"]?.ToString()}";
         house.PicURLs    = JsonConvert.SerializeObject(topicDetail["photos"].Select(item => item["large_picture_url"].ToString()));
         houses.Add(house);
     }, "FillHouse", topicDetailJson);
 }
예제 #4
0
 private static DBHouse ConvertToHouse(JToken room, string roomDetailResult, JToken roomDetail)
 {
     try
     {
         var house = new DBHouse();
         house.Id        = Tools.GetUUId();
         house.Title     = roomDetail["title"]?.ToString();
         house.Location  = roomDetail["address"]?.ToString();
         house.Text      = roomDetail["description"]?.ToString();
         house.PicURLs   = roomDetail["bigImages"].ToString();
         house.Price     = int.Parse(roomDetail["highlightMeta"]?["value"].ToString().Replace("元", ""));
         house.Source    = SourceEnum.BaixingWechat.GetSourceName();
         house.PubTime   = GetPubTime(roomDetail["updateTimeString"].ToString());
         house.JsonData  = roomDetailResult.ToString();
         house.Labels    = string.Join("|", roomDetail["labelMetas"].Select(l => l["value".ToString()]));
         house.Tags      = string.Join("|", roomDetail["metas"].Select(l => l["value"]?.ToString()).Where(v => !string.IsNullOrEmpty(v)));
         house.City      = roomDetail["cityCName"]?.ToString();
         house.OnlineURL = $"http://{roomDetail["cityEnglishName"].ToString()}.baixing.com/zhengzu/a{room["id"].ToString()}.html";
         return(house);
     }
     catch (Exception ex)
     {
         LogHelper.Error("ConvertToHouse", ex, roomDetailResult);
         return(null);
     }
 }
예제 #5
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houses       = new List <DBHouse>();
            var configJToken = JToken.Parse(config.Json);
            var pinyin       = configJToken["pinyin"]?.ToString();
            var result       = JToken.Parse(data);

            if (result?["status"]?.ToString() != "200" || result?["data"]?["house_list"].Count() == 0)
            {
                return(houses);
            }
            foreach (var room in result["data"]["house_list"])
            {
                var onlineURL = $"http://www.hizhu.com/{pinyin}/roomDetail/{room["room_id"]?.ToString()}.html";
                var house     = new DBHouse();
                house.OnlineURL = onlineURL;
                house.Source    = SourceEnum.Hizhu.GetSourceName();
                house.Price     = room["room_money"].ToObject <int>();
                house.Location  = room["address"]?.ToString();
                house.Latitude  = room["latitude"]?.ToString();
                house.Longitude = room["longitude"]?.ToString();
                house.Title     = $"{room["region_name"]?.ToString()}区-{room["estate_name"]?.ToString()}-{room["room_num"]?.ToString()}居室-{room["room_name"]?.ToString()}";
                house.Text      = $"{room["room_area"]?.ToString()}平米/{room["address"]?.ToString()}";
                house.PicURLs   = Tools.GetPicURLs(room["main_img_path"]?.ToString());
                house.PubTime   = Tools.JavaTimeStampToDateTime(room["page_time"].ToObject <long>() * 1000);
                house.RentType  = GetRentType(room);
                house.JsonData  = room.ToString();
                house.City      = config.City;
                house.Id        = Tools.GetGuid();
                houses.Add(house);
            }
            return(houses);
        }
예제 #6
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houses = new List <DBHouse>();
            var result = JToken.Parse(data);

            if (result == null || result.Count() == 0 || result["datas"]?["list_info"] == null)
            {
                return(houses);
            }
            var jsonData = JToken.Parse(config.Json);
            var pinyin   = jsonData["pinyin"].ToString();

            foreach (var room in result["datas"]?["list_info"])
            {
                var house = new DBHouse();
                house.Title = room["title"]?.ToString();
                house.City  = config.City;
                // todo 回头通过详情API或者其他方式获取发布时间
                // text 同理
                house.PubTime   = DateTime.Now.Date;
                house.Text      = "";
                house.Location  = room["comm_name"]?.ToString();
                house.Price     = !string.IsNullOrEmpty(room["price"]?.ToString()) ? room["price"].ToObject <int>() : 0;
                house.PicURLs   = Tools.GetPicURLs(room["img"]?.ToString().Replace("240x180", "960x720"));
                house.Tags      = string.Join("|", room["tags"].Select(t => t.ToString()));
                house.OnlineURL = room["prop_url"]?.ToString();
                house.Id        = Tools.GetGuid();
                house.Source    = SourceEnum.Anjuke.GetSourceName();
                house.JsonData  = room.ToString();
                house.RentType  = GetRentType(room);
                houses.Add(house);
            }
            return(houses);
        }
예제 #7
0
        private static DBHouse ConvertToHouse(DBConfig config, JToken houseData)
        {
            var house = new DBHouse();

            house.Title    = houseData["title"].ToString();
            house.City     = config.City;
            house.PubTime  = DateTime.Parse(houseData["postTime"].ToString());
            house.Text     = houseData["description"]?.ToString();
            house.Location = houseData["address"]?.ToString();
            if (houseData["coordinates"].ToObject <List <decimal> >() != null && houseData["coordinates"].ToObject <List <decimal> >().Count > 0)
            {
                house.Latitude  = houseData["coordinates"].ToObject <List <decimal> >()[1].ToString();
                house.Longitude = houseData["coordinates"].ToObject <List <decimal> >()[0].ToString();
            }
            if (houseData["price"] != null)
            {
                house.Price = houseData["price"].ToObject <int>();
            }
            house.PicURLs   = JsonConvert.SerializeObject(houseData["images"].Select(i => i["location"]?.ToString()).ToList());;
            house.OnlineURL = houseData?["url"]?.ToString();
            house.Id        = Tools.GetGuid();
            house.Source    = SourceEnum.Nuan.GetSourceName();
            house.JsonData  = houseData.ToString();
            house.RentType  = GetRentType(houseData);
            return(house);
        }
예제 #8
0
        /// <summary>
        /// Spawn house or lotmarker on this lot
        /// </summary>
        /// <param name="house"></param>
        private static eLotSpawnType SpawnLot(DBHouse house, Dictionary <int, House> housesForRegion)
        {
            eLotSpawnType spawnType = eLotSpawnType.Marker;

            if (string.IsNullOrEmpty(house.OwnerID) == false)
            {
                var newHouse = new House(house)
                {
                    UniqueID = house.HouseNumber
                };

                newHouse.LoadFromDatabase();

                // store the house
                housesForRegion.Add(newHouse.HouseNumber, newHouse);

                if (newHouse.Model > 0)
                {
                    spawnType = eLotSpawnType.House;
                }
            }

            if (spawnType == eLotSpawnType.Marker)
            {
                // this is either an available lot or a purchased lot without a house
                GameLotMarker.SpawnLotMarker(house);
            }

            return(spawnType);
        }
예제 #9
0
        private static List <DBHouse> ConvertHouses(string city, JToken item)
        {
            var houses = new List <DBHouse>();
            var room   = item["room"];

            foreach (var bed in room["client_attr"]["beds"])
            {
                var housePrice = bed["money"].ToObject <int>();
                var house      = new DBHouse()
                {
                    Location  = room["region"]?.ToString() + room["road"]?.ToString() + room["street"]?.ToString(),
                    Title     = room["full_title"]?.ToString() + "-" + bed["title"]?.ToString(),
                    OnlineURL = $"https://mobile.zuber.im/bed/{bed["id"]?.ToString()}?biz=false",
                    Text      = bed["content"]?.ToString(),
                    Price     = housePrice,
                    Source    = SourceEnum.Zuber.GetSourceName(),
                    City      = city,
                    RentType  = ConvertToRentType(room["room_type_affirm"]?.ToString()),
                    Longitude = room["longitude"]?.ToString(),
                    Latitude  = room["latitude"]?.ToString(),
                    PicURLs   = GetBedPhotos(bed),
                    JsonData  = item.ToString(),
                    Tags      = $"{room["subway_line"]?.ToString()}|{room["subway_station"]?.ToString()}",
                    PubTime   = room["last_modify_time"].ToObject <DateTime>(),
                    Id        = Tools.GetGuid()
                };
                houses.Add(house);
            }

            return(houses);
        }
예제 #10
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houses = new List <DBHouse>();
            var result = JToken.Parse(data);

            if (result == null || result.Count() == 0 || result[0]["data"]?["requests"] == null)
            {
                return(houses);
            }
            foreach (var room in result[0]["data"]?["requests"])
            {
                var house = new DBHouse();
                house.Text     = room["description"]?.ToString();
                house.Title    = room["title"]?.ToString();
                house.City     = room["city"]?.ToString();
                house.Location = room["locationName"]?.ToString();
                if (room["location"] != null)
                {
                    house.Longitude = room["location"]?["longitude"]?.ToString();
                    house.Latitude  = room["location"]?["latitude"]?.ToString();
                }
                house.PubTime   = room["createTime"].ToObject <DateTime>();
                house.Price     = !string.IsNullOrEmpty(room["cost"]?.ToString()) ? room["cost"].ToObject <int>() : 0;
                house.PicURLs   = room["images"].ToString();
                house.Tags      = string.Join("|", room["tags"].Select(t => t.ToString()));
                house.OnlineURL = $"https://api.xiaozhuankeji.com/qrcode?product=roommate&page=RoommateRequest&id={room["id"].ToString()}";
                house.Id        = Tools.GetGuid();
                house.Source    = SourceEnum.Pinshiyou.GetSourceName();
                house.JsonData  = room.ToString();
                house.RentType  = GetRentType(room);
                houses.Add(house);
            }
            return(houses);
        }
예제 #11
0
 public MongoHouseEntity(DBHouse dbHouse)
 {
     this.Id         = dbHouse.Id;
     this.CreateTime = dbHouse.CreateTime ?? DateTime.Now;
     this.UpdateTime = dbHouse.UpdateTime ?? DateTime.Now;
     this.Title      = dbHouse.Title;
     this.Text       = dbHouse.Text ?? dbHouse.Title;
     this.PicURLs    = dbHouse.PicURLs;
     this.Location   = dbHouse.Location;
     this.City       = dbHouse.City;
     if (!string.IsNullOrEmpty(dbHouse.Longitude) && double.TryParse(dbHouse.Longitude, out var longitude))
     {
         this.Longitude = longitude;
     }
     if (!string.IsNullOrEmpty(dbHouse.Latitude) && double.TryParse(dbHouse.Latitude, out var latitude))
     {
         this.Latitude = latitude;
     }
     this.RentType  = dbHouse.RentType;
     this.Tags      = dbHouse.Tags;
     this.Labels    = dbHouse.Labels;
     this.PubTime   = dbHouse.PubTime;
     this.Timestamp = Tools.GetTimestamp(dbHouse.PubTime);
     this.Status    = dbHouse.Status;
     this.OnlineURL = dbHouse.OnlineURL;
     this.Price     = dbHouse.Price;
     this.Source    = dbHouse.Source;
 }
예제 #12
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houses        = new List <DBHouse>();
            var resultJObject = JsonConvert.DeserializeObject <JObject>(data);
            var city          = config.City;

            foreach (var topic in resultJObject["topics"])
            {
                var housePrice = JiebaTools.GetHousePrice(topic["content"].ToString());
                var photos     = topic["photos"]?.Select(photo => photo["alt"].ToString()).ToList();
                var house      = new DBHouse()
                {
                    Id        = Tools.GetUUId(),
                    Location  = topic["title"].ToString(),
                    Title     = topic["title"].ToString(),
                    OnlineURL = topic["share_url"].ToString(),
                    Text      = topic["content"].ToString(),
                    JsonData  = topic.ToString(),
                    Price     = (int)housePrice,
                    Source    = SourceEnum.Douban.GetSourceName(),
                    City      = city,
                    RentType  = GetRentType(topic["content"].ToString()),
                    PicURLs   = JsonConvert.SerializeObject(photos),
                    PubTime   = topic["created"].ToObject <DateTime>(),
                };
                houses.Add(house);
            }
            return(houses);
        }
예제 #13
0
        private static DBHouse ConvertToHouse(string shortCutName, string cityName, JToken info)
        {
            var onlineUrl  = $"https://{shortCutName}.58.com/pinpaigongyu/{info["infoID"].ToString()}x.shtml";
            var housePrice = int.Parse(info["minPrice"].ToString());
            var houseInfo  = new DBHouse
            {
                Id        = Tools.GetGuid(),
                Title     = $"{info["title"].ToString()}-{info["subTitle"].ToString()}",
                OnlineURL = onlineUrl,
                Location  = info["areaName"]?.ToString() + info["districtCode"]?.ToString(),
                Source    = SourceEnum.PinPaiGongYu.GetSourceName(),
                Price     = housePrice,
                Longitude = info["longitude"]?.ToString().Length > 10 ? info["longitude"]?.ToString().Substring(0, 10) : info["longitude"]?.ToString(),
                Latitude  = info["latitude"]?.ToString().Length > 10 ? info["latitude"]?.ToString().Substring(0, 10) : info["latitude"]?.ToString(),
                Labels    = $"{info["companyName"].ToString()}|{info["label"].ToString()}",
                City      = cityName,
                JsonData  = info.ToString(),
                PubTime   = new DateTime(info["postDate"]["year"].ToObject <int>(),
                                         info["postDate"]["mon"].ToObject <int>(),
                                         info["postDate"]["mday"].ToObject <int>(),
                                         info["postDate"]["hours"].ToObject <int>(),
                                         info["postDate"]["minutes"].ToObject <int>(),
                                         info["postDate"]["seconds"].ToObject <int>()),
                PicURLs = info["picsUrl"]?.ToString()
            };

            return(houseInfo);
        }
예제 #14
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houses = new List <DBHouse>();
            var topics = JToken.Parse(data)?["topics"];

            foreach (var topic in topics)
            {
                DBHouse house     = new DBHouse();
                var     onlineURL = $"https://fang.douban.com/topics/{topic["id"].ToString()}/";
                house.Id        = Tools.GetUUId();
                house.OnlineURL = onlineURL;
                var topicDetailJson = GetTopicDetail(topic["id"].ToString());
                if (!string.IsNullOrEmpty(topicDetailJson))
                {
                    var topicDetail = JToken.Parse(topicDetailJson)?["data"];
                    house.Title      = topicDetail["title"].ToString();
                    house.Price      = topicDetail["rent_fee"].ToObject <int>();
                    house.Location   = topicDetail["district_tag"]["name"].ToString();
                    house.Latitude   = topicDetail["district_tag"]["latitude"].ToString();
                    house.Longitude  = topicDetail["district_tag"]["longitude"].ToString();
                    house.PubTime    = topicDetail["create_time"].ToObject <DateTime>();
                    house.RentType   = ConvertRentType(topicDetail["rent_type"].ToObject <int>(), topicDetail["house_type_display"].ToString());
                    house.Text       = topicDetail["description"].ToString();
                    house.Labels     = string.Join("|", topicDetail["labels"].ToObject <List <string> >());
                    house.Source     = SourceEnum.DoubanWechat.GetSourceName();
                    house.JsonData   = topicDetailJson;
                    house.City       = config.City;
                    house.CreateTime = DateTime.Now;
                    house.Tags       = $"{topicDetail["house_type_display"]?.ToString()}|{topicDetail["direction_display"]?.ToString()}|{topicDetail["topic_kind_display"]?.ToString()}";
                    house.PicURLs    = JsonConvert.SerializeObject(topicDetail["photos"].Select(item => item["large_picture_url"].ToString()));
                    houses.Add(house);
                }
            }
            return(houses);
        }
예제 #15
0
        private static DBHouse ConvertHouse(string city, JToken item)
        {
            var room       = item["room"];
            var housePrice = room["cost1"].ToObject <int>();
            var house      = new DBHouse()
            {
                Location  = room["address"].ToString(),
                Title     = room["title"].ToString(),
                OnlineURL = $"http://www.zuber.im/app/room/{room["id"].ToString()}",
                Text      = room["content"]?.ToString(),
                Price     = housePrice,
                Source    = SourceEnum.Zuber.GetSourceName(),
                City      = city,
                RentType  = ConvertToRentType(room["summary"]?.ToString()),
                Longitude = room["longitude"]?.ToString(),
                Latitude  = room["latitude"]?.ToString(),
                PicURLs   = GetPhotos(room),
                JsonData  = item.ToString(),
                Tags      = $"{room["subway_line"]?.ToString()}|{room["room_type_affirm"]?.ToString()}|{room["region"]?.ToString()}",
                PubTime   = room["last_modify_time"].ToObject <DateTime>(),
                Id        = Tools.GetGuid()
            };

            return(house);
        }
예제 #16
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houses = new List <DBHouse>();

            if (data.Contains("<html"))
            {
                return(houses);
            }
            var result = JToken.Parse(data);

            if (result == null || result.Count() == 0 || result["rooms"] == null)
            {
                return(houses);
            }
            var jsonData = JToken.Parse(config.Json);
            var cityCode = jsonData["city_code"].ToString();

            foreach (var room in result["rooms"])
            {
                try
                {
                    DBHouse house = ConvertToHouse(config, room);
                    houses.Add(house);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"ConvertToHouse fail,StackTrace:{ex.StackTrace},room:{room.ToString()}");
                }
            }
            return(houses);
        }
예제 #17
0
        public static void SpawnLotMarker(DBHouse house)
        {
            var obj = new GameLotMarker
            {
                Position        = new Vector3(house.X, house.Y, house.Z),
                CurrentRegionID = house.RegionID,
                Heading         = (ushort)house.Heading,
                Name            = "Lot Marker",
                Model           = 1308,
                DatabaseItem    = house
            };

            //No clue how we can check if a region
            //is in albion, midgard or hibernia instead
            //of checking the region id directly
            switch (obj.CurrentRegionID)
            {
            case 2:
                obj.Model = 1308;
                obj.Name  = "Albion Lot";
                break;                         //ALB

            case 102:
                obj.Model = 1306;
                obj.Name  = "Midgard Lot";
                break;                         //MID

            case 202:
                obj.Model = 1307;
                obj.Name  = "Hibernia Lot";
                break;                         //HIB
            }

            obj.AddToWorld();
        }
예제 #18
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houses       = new List <DBHouse>();
            var configJToken = JToken.Parse(config.Json);
            var cityName     = configJToken["cityName"]?.ToString();
            var citySortName = configJToken["citySortName"]?.ToString();
            var houseList    = JToken.Parse(data)["data"]["list"];

            foreach (var rentHouse in houseList)
            {
                DBHouse house     = new DBHouse();
                var     onlineURL = GetHouseURL(rentHouse, citySortName);
                house.Id         = Tools.GetGuid();
                house.OnlineURL  = onlineURL;
                house.Title      = rentHouse["house_title"].ToString();
                house.Price      = GetPrice(rentHouse);
                house.Location   = !string.IsNullOrEmpty(rentHouse["resblock_name"]?.ToString()) ? rentHouse["resblock_name"].ToString() : rentHouse["desc"].ToString();
                house.PubTime    = DateTime.Now;
                house.RentType   = ConvertRentType(rentHouse["layout"].ToString());
                house.Text       = $"朝{rentHouse["frame_orientation"].ToString()},{rentHouse["layout"].ToString()}" + rentHouse["desc"].ToString();
                house.Labels     = string.Join("|", rentHouse["house_tags"].Select(i => i["name"].ToString()));
                house.Source     = SourceEnum.Beike.GetSourceName();
                house.JsonData   = rentHouse.ToString();
                house.City       = config.City;
                house.CreateTime = DateTime.Now;
                house.Tags       = $"{rentHouse["layout"]?.ToString()}|{rentHouse["bizcircle_name"]?.ToString()}";
                var picURL = rentHouse["list_picture"]?.ToString().Replace("280x210", "1280x960");;
                house.PicURLs = JsonConvert.SerializeObject(new List <string>()
                {
                    picURL
                });
                houses.Add(house);
            }
            return(houses);
        }
예제 #19
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houseList     = new List <DBHouse>();
            var resultJObject = JObject.Parse(data);

            if (resultJObject == null || resultJObject["head"] == null || !resultJObject["head"]["success"].ToObject <Boolean>())
            {
                return(houseList);
            }
            foreach (var item in resultJObject["houseList"])
            {
                DBHouse house = new DBHouse();
                house.Id = Tools.GetGuid();
                var houseDesc = item["houseDescript"].ToObject <string>().Replace("ЁЯШД", "");
                var houseURL  = $"http://www.huzhumaifang.com/Renting/house_detail/id/{item["houseId"]}.html";
                house.OnlineURL = houseURL;
                house.Title     = houseDesc;
                house.Location  = houseDesc;
                house.Text      = houseDesc;
                house.JsonData  = item.ToString();
                house.Price     = item["houseRentPrice"].ToObject <Int32>();
                house.City      = config.City;
                house.RentType  = GetRentType(houseDesc);
                house.PubTime   = item["houseCreateTime"].ToObject <DateTime>();
                house.PicURLs   = item["bigPicUrls"].ToString();
                house.Source    = SourceEnum.HuZhuZuFang.GetSourceName();
                houseList.Add(house);
            }
            return(houseList);
        }
예제 #20
0
        private static int GetHousePrice(DBHouse house)
        {
            var price = JiebaTools.GetHousePrice(house.Title);

            if (price == 0 && !string.IsNullOrEmpty(house.Text))
            {
                price = JiebaTools.GetHousePrice(house.Text);
            }
            return(price);
        }
예제 #21
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houses = new List <DBHouse>();
            var result = JToken.Parse(data);

            if (result == null || result.Count() == 0 || result["result"]?["list"] == null)
            {
                return(houses);
            }
            var jsonData = JToken.Parse(config.Json);
            var pinyin   = jsonData["pinyin"].ToString();

            foreach (var room in result["result"]?["list"])
            {
                var house = new DBHouse();
                house.Text     = room["area_name"]?.ToString() + room["subway_desc"]?.ToString();
                house.Title    = room["subdistrict_name"]?.ToString() + room["house_info_concat"]?.ToString();
                house.City     = config.City;
                house.Location = room["subdistrict_name"]?.ToString();
                if (!string.IsNullOrEmpty(room["latlon"]?.ToString()))
                {
                    house.Latitude  = room["latlon"]?.ToString().Split(",")[0];
                    house.Longitude = room["latlon"]?.ToString().Split(",")[1];
                }
                if (room["publish_date"]?.ToString() == "今天发布")
                {
                    house.PubTime = DateTime.Now.Date;
                }
                else if (room["publish_date"]?.ToString() == "昨天发布")
                {
                    house.PubTime = DateTime.Now.Date.AddDays(-1);
                }
                else if (room["publish_date"].ToString().Contains("天前发布"))
                {
                    house.PubTime = DateTime.Now.Date.AddDays(-int.Parse(room["publish_date"].ToString().Replace("天前发布", "").Trim()));
                }
                else
                {
                    Console.WriteLine(room["publish_date"]?.ToString());
                    LogHelper.Info(room.ToString());
                    continue;
                }
                house.Price     = !string.IsNullOrEmpty(room["month_rent"]?.ToString()) ? room["month_rent"].ToObject <int>() : 0;
                house.PicURLs   = Tools.GetPicURLs(room["house_main_image"]?.ToString().Replace("@!380_280.png", ""));
                house.Tags      = string.Join("|", room["labels"].Select(t => t.ToString()));
                house.OnlineURL = $"https://m.baletu.com/{pinyin}/house/{room["house_id"]?.ToString()}.html";
                house.Id        = Tools.GetGuid();
                house.Source    = SourceEnum.Baletu.GetSourceName();
                house.JsonData  = room.ToString();
                house.RentType  = GetRentType(room);
                houses.Add(house);
            }
            return(houses);
        }
예제 #22
0
        public static long GetLotPrice(DBHouse house)
        {
            TimeSpan diff = (DateTime.Now - house.CreationTime);

            long price = Properties.HOUSING_LOT_PRICE_START - (long)(diff.TotalHours * Properties.HOUSING_LOT_PRICE_PER_HOUR);
            if (price < Properties.HOUSING_LOT_PRICE_MINIMUM)
            {
                return Properties.HOUSING_LOT_PRICE_MINIMUM;
            }

            return price;
        }
예제 #23
0
        private static string GetGeoText(DBHouse h)
        {
            var text = RemoveImgLabels(h.Text, h.Pictures.Count);

            if (string.IsNullOrEmpty(text) || text.Contains("www.douban.com"))
            {
                text = h.Title;
            }
            text = Tools.RemoveSpecialCharacter(text).Replace("\n", "").Replace("|", "").Trim();
            if (text.Count() >= 100)
            {
                return(text.Substring(0, 100));
            }
            return(text);
        }
예제 #24
0
 public int UpdateLngLat(DBHouse house)
 {
     using (IDbConnection dbConnection = GetConnection())
     {
         dbConnection.Open();
         var tableName = SourceTool.GetHouseTableNameDic()[house.Source];
         return(dbConnection.Execute($"UPDATE {tableName} SET Longitude=@Longitude, Latitude=@Latitude,UpdateTime=now() WHERE Id=@Id;",
                                     new
         {
             Longitude = house.Longitude,
             Latitude = house.Latitude,
             Id = house.Id
         }));
     }
 }
예제 #25
0
        public override List <DBHouse> ParseHouses(DBConfig config, string data)
        {
            var houses        = new List <DBHouse>();
            var resultJObject = JsonConvert.DeserializeObject <JObject>(data);
            var city          = config.City;

            foreach (var topic in resultJObject["topics"])
            {
                // todo
                //var housePrice = JiebaTools.GetHousePrice(topic["content"].ToString());
                DBHouse house = ConvertToHouse(city, topic);
                houses.Add(house);
            }
            return(houses);
        }
예제 #26
0
 private static void FillHousePriceAndLocation(DBHouse house, JToken geocode)
 {
     if (geocode["location"].ToString().Split(",").Count() == 2)
     {
         house.Longitude = geocode["location"].ToString().Split(",")[0];
         house.Latitude  = geocode["location"].ToString().Split(",")[1];
         house.Location  = geocode["formatted_address"].ToString();
         house.Tags      = geocode["district"].ToString();
     }
     house.UpdateTime = DateTime.Now;
     if (geocode["location"].ToString().Split(",").Count() < 2 && house.Price == 0)
     {
         house.Status = (int)HouseStatusEnum.Deleted;
     }
 }
예제 #27
0
 public override void SyncHouses()
 {
     foreach (var config in _configDapper.LoadBySource(SourceEnum.Zuber.GetSourceName()))
     {
         LogHelper.RunActionNotThrowEx(() =>
         {
             List <HouseInfo> oldHouses = _oldHouseDapper.SearchHouses(new HouseCondition()
             {
                 Source      = SourceEnum.Zuber.GetSourceName(),
                 IntervalDay = 1000,
                 HouseCount  = 300000,
                 CityName    = config.City
             }).ToList();
             if (oldHouses == null)
             {
                 return;
             }
             LogHelper.Info($"zuber {config.City} SyncHouse start,count={oldHouses.Count}");
             var houses = new List <DBHouse>();
             foreach (var house in oldHouses)
             {
                 if (string.IsNullOrEmpty(house.HouseText) || !house.HouseText.Contains("room"))
                 {
                     var one = new DBHouse()
                     {
                         Id         = Tools.GetUUId(),
                         Title      = house.HouseTitle,
                         Text       = house.HouseTitle,
                         Location   = house.HouseLocation,
                         City       = house.LocationCityName,
                         PicURLs    = house.PicURLs,
                         Price      = (int)house.HousePrice,
                         RentType   = ConvertToRentType(house.HouseTitle),
                         PubTime    = house.PubTime,
                         CreateTime = house.DataCreateTime,
                         Source     = SourceEnum.HuZhuZuFang.GetSourceName(),
                         OnlineURL  = house.HouseOnlineURL,
                     };
                     houses.Add(one);
                 }
                 var newOne = ConvertHouse(config.City, JToken.Parse(house.HouseText));
                 houses.Add(newOne);
             }
             var result = _houseDapper.BulkInsertHouses(houses);
             LogHelper.Info($"zuber {config.City} SyncHouse finish,result:{result}");
         }, "SyncHouse", config);
     }
 }
예제 #28
0
        private static DBHouse ConvertToHouse(DBConfig config, JToken room, string houseDataJson)
        {
            var house     = new DBHouse();
            var houseData = JToken.Parse(houseDataJson)["data"];

            house.Title   = houseData["name"].ToString();
            house.City    = config.City;
            house.PubTime = DateTime.Now;
            house.Text    = houseData["introduction"].ToString();
            if (!string.IsNullOrEmpty(houseData["resblock"]?["around"].ToString()))
            {
                house.Text = house.Text + "<br/>" + houseData["resblock"]?["around"].ToString();
            }
            if (!string.IsNullOrEmpty(houseData["resblock"]?["traffic"].ToString()))
            {
                house.Text = house.Text + "<br/>" + houseData["resblock"]?["traffic"].ToString();
            }

            house.Text = house.Text + $"<br/><br/>上线时间:{houseData["actually_complete_date"]?.ToString()}";
            if (!string.IsNullOrEmpty(houseData["air_report_detail"].ToString()))
            {
                house.Text = house.Text + $" <br/>空气检测信息如下:";
                foreach (var item in houseData["air_report_detail"]["data"])
                {
                    house.Text = house.Text + $"<br/>{item["title"].ToString()}:{item["value"].ToString()}";
                    if (!string.IsNullOrEmpty(item["link"]?.ToString()))
                    {
                        house.Text = house.Text + $"<br/>在线链接:<a href='{item["link"].ToString()}' target='_blank'>{item["link"].ToString()}</a>";
                    }
                }
            }
            house.Location  = houseData["location"]?.ToString();
            house.Latitude  = houseData["resblock"]?["lat"].ToString();
            house.Longitude = houseData["resblock"]?["lng"].ToString();
            house.Price     = 0;
            List <string> allPhotos = GetPhotos(houseData);

            house.PicURLs   = JsonConvert.SerializeObject(allPhotos);;
            house.Tags      = string.Join("|", room["tags"].Select(t => t["title"].ToString()));
            house.OnlineURL = houseData["weibo_share"]?["url"]?.ToString();
            house.Id        = Tools.GetGuid();
            house.Source    = SourceEnum.ZiRoom.GetSourceName();
            house.JsonData  = houseData.ToString();
            house.RentType  = GetRentType(houseData);
            return(house);
        }
예제 #29
0
 public override void SyncHouses()
 {
     foreach (var city in new List <string>()
     {
         "北京", "杭州"
     })
     {
         LogHelper.RunActionNotThrowEx(() =>
         {
             List <HouseInfo> oldHouses = _oldHouseDapper.SearchHouses(new HouseCondition()
             {
                 Source      = SourceEnum.Douban.GetSourceName(),
                 IntervalDay = 1000,
                 HouseCount  = 300000,
                 CityName    = city
             }).ToList();
             if (oldHouses == null)
             {
                 return;
             }
             LogHelper.Info($"{city} SyncHouse start,count={oldHouses.Count}");
             var houses = new List <DBHouse>();
             foreach (var house in oldHouses)
             {
                 var one = new DBHouse()
                 {
                     Id         = Tools.GetUUId(),
                     Title      = house.HouseTitle,
                     Text       = house.HouseText,
                     Location   = house.HouseLocation,
                     City       = house.LocationCityName,
                     PicURLs    = house.PicURLs,
                     Price      = (int)house.HousePrice,
                     RentType   = GetRentType(house.HouseText),
                     PubTime    = house.PubTime,
                     CreateTime = house.DataCreateTime,
                     Source     = SourceEnum.Douban.GetSourceName(),
                     OnlineURL  = house.HouseOnlineURL,
                 };
                 houses.Add(one);
             }
             var result = _houseDapper.BulkInsertHouses(houses);
             LogHelper.Info($"{city} SyncHouse finish,result:{result}");
         }, "SyncHouse", city);
     }
 }
예제 #30
0
 private void FillHouses(JObject resultJObject, string city, List <DBHouse> lowHouses, List <DBHouse> goodHouses)
 {
     foreach (var topic in resultJObject["topics"])
     {
         DBHouse house = ConvertToHouse(city, topic);
         if (ProCheck(topic) || string.IsNullOrEmpty(GetGeoText(house)))
         {
             // 基本可以判定为无用的信息,回头可以考虑作为样本去做机器学习
             house.Status = (int)HouseStatusEnum.LowGrade;
             lowHouses.Add(house);
         }
         else
         {
             goodHouses.Add(house);
         }
     }
 }
예제 #31
0
        private void FillTextAndPicURLs(DBHouse house, string resource)
        {
            var roomDetailHTML = GetOne(resource);

            if (!string.IsNullOrEmpty(roomDetailHTML))
            {
                var roomDetail = htmlParser.Parse(roomDetailHTML);
                house.Text = house.Text + roomDetail.QuerySelectorAll("div.contentCenter").Select(d => d.TextContent)
                             .FirstOrDefault(div => div.Contains("挂牌人信息")).Replace("\t", "").Replace("\n\n", "\n").Replace("   ", " ");
                var imgSource     = "/rent/WebRentAction_selectFwzpList.jspx?ztcode=" + GetZtcode(roomDetailHTML);
                var imgJsonResult = GetOne(imgSource);
                if (!string.IsNullOrEmpty(imgJsonResult))
                {
                    var imageList = JToken.Parse(imgJsonResult)["list"].Select(i => "http://zl.hzfc.gov.cn/" + i["wllj"]?.ToString()).ToList();
                    house.PicURLs = JsonConvert.SerializeObject(imageList);
                }
            }
        }
예제 #32
0
        /// <summary>
        /// An account vault that masquerades as a house vault to the game client
        /// </summary>
        /// <param name="player">Player who owns the vault</param>
        /// <param name="vaultNPC">NPC controlling the interaction between player and vault</param>
        /// <param name="vaultOwner">ID of vault owner (can be anything unique, if it's the account name then all toons on account can access the items)</param>
        /// <param name="vaultNumber">Valid vault IDs are 0-3</param>
        /// <param name="dummyTemplate">An ItemTemplate to satisfy the base class's constructor</param>
        public AccountVault(GamePlayer player, GameNPC vaultNPC, string vaultOwner, int vaultNumber, ItemTemplate dummyTemplate)
            : base(dummyTemplate, vaultNumber)
        {
            m_player = player;
            m_vaultNPC = vaultNPC;
            m_vaultOwner = vaultOwner;
            m_vaultNumber = vaultNumber;

            DBHouse dbh = new DBHouse();
            //was allowsave = false but uhh i replaced with allowadd = false
            dbh.AllowAdd = false;
            dbh.GuildHouse = false;
            dbh.HouseNumber = player.ObjectID;
            dbh.Name = player.Name + "'s House";
            dbh.OwnerID = player.DBCharacter.ObjectId;
            dbh.RegionID = player.CurrentRegionID;

            CurrentHouse = new House(dbh);
        }
예제 #33
0
파일: House.cs 프로젝트: mynew4/DAoC
		public House(DBHouse house)
		{
			_databaseItem = house;
			_permissionLevels = new Dictionary<int, DBHousePermissions>();
			_indoorItems = new Dictionary<int, IndoorItem>();
			_outdoorItems = new Dictionary<int, OutdoorItem>();
			_housepointItems = new Dictionary<uint, DBHouseHookpointItem>();
			_housePermissions = new Dictionary<int, DBHouseCharsXPerms>();
		}
예제 #34
0
		public static void SpawnLotMarker(DBHouse house)
		{
			var obj = new GameLotMarker
			          	{
			          		X = house.X,
			          		Y = house.Y,
			          		Z = house.Z,
			          		CurrentRegionID = house.RegionID,
			          		Heading = (ushort) house.Heading,
			          		Name = "Lot Marker",
			          		Model = 1308,
			          		DatabaseItem = house
			          	};

			//No clue how we can check if a region
			//is in albion, midgard or hibernia instead
			//of checking the region id directly
			switch (obj.CurrentRegionID)
			{
				case 2:
					obj.Model = 1308;
					obj.Name = "Albion Lot";
					break; //ALB
				case 102:
					obj.Model = 1306;
					obj.Name = "Midgard Lot";
					break; //MID
				case 202:
					obj.Model = 1307;
					obj.Name = "Hibernia Lot";
					break; //HIB
			}

			obj.AddToWorld();
		}
예제 #35
0
파일: HouseMgr.cs 프로젝트: mynew4/DAoC
		/// <summary>
		/// Checks if a player is the owner of the house, this checks all characters on the account
		/// </summary>
		/// <param name="house">The house object</param>
		/// <param name="player">The player to check</param>
		/// <returns>True if the player is the owner</returns>
		public static bool IsOwner(DBHouse house, GamePlayer player)
		{
			// house and player can't be null
			if (house == null || player == null)
				return false;

			// if owner id isn't set, there is no owner
			if (string.IsNullOrEmpty(house.OwnerID))
				return false;

			// check if this a guild house, and if the player
			// 1) belongs to the guild and is 2) a GM in the guild
			if (player.Guild != null && house.GuildHouse)
			{
				if (player.Guild.Name == house.GuildName && player.Guild.HasRank(player, Guild.eRank.Leader))
					return true;
			}
			else
			{
				foreach (DOLCharacters c in player.Client.Account.Characters)
				{
					if (house.OwnerID == c.ObjectId)
						return true;
				}
			}

			return false;
		}
예제 #36
0
파일: HouseMgr.cs 프로젝트: mynew4/DAoC
		/// <summary>
		/// Spawn house or lotmarker on this lot
		/// </summary>
		/// <param name="house"></param>
		private static eLotSpawnType SpawnLot(DBHouse house, Dictionary<int, House> housesForRegion)
		{
			eLotSpawnType spawnType = eLotSpawnType.Marker;

			if (string.IsNullOrEmpty(house.OwnerID) == false)
			{
				var newHouse = new House(house) { UniqueID = house.HouseNumber };

				newHouse.LoadFromDatabase();

				// store the house
				housesForRegion.Add(newHouse.HouseNumber, newHouse);

				if (newHouse.Model > 0)
				{
					spawnType = eLotSpawnType.House;
				}
			}

			if (spawnType == eLotSpawnType.Marker)
			{
				// this is either an available lot or a purchased lot without a house
				GameLotMarker.SpawnLotMarker(house);
			}

			return spawnType;
		}