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); }
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); }
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); }
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); } }
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); }
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); }
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); }
/// <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); }
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); }
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); }
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; }
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); }
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); }
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); }
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); }
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); }
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(); }
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); }
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); }
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); }
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); }
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; }
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); }
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 })); } }
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); }
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; } }
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); } }
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); }
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); } }
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); } } }
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); } } }
/// <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); }
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>(); }
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(); }
/// <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; }
/// <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; }