예제 #1
0
        public async Task <int> RefreshAllCommunityInfo()
        {
            SeashellContext context = new SeashellContext();

            List <AdministrativeDistrict> districts = context.AdministrativeDistrict.ToList();

            List <Community> communities = new List <Community>();

            foreach (AdministrativeDistrict district in districts)
            {
                List <Community> communitiesByDistrict = await ReadAllCommunities(district.CommunityMainPageURL);

                communities = communities.Concat(communitiesByDistrict).ToList();
            }

            communities = await ReadCommunityDetailInfo(communities);

            CommunityRepository repo = new CommunityRepository(context);

            repo.AddOrUpdate(communities);

            repo.Save();

            return(communities.Count());
        }
예제 #2
0
        //The url will be like 'https://xa.ke.com/xiaoqu/pg1/' which the number is the page number
        public static async Task <List <Community> > ReadCommunityListData(string url)
        {
            IDocument document = await WebPageReader.GetPageAsync(url);

            var communityItemList = document.QuerySelectorAll("ul.listContent li.xiaoquListItem");

            List <Community> communities = new List <Community>();

            foreach (var communityItem in communityItemList)
            {
                string communityName = communityItem.QuerySelector("div.info div.title a").InnerHtml;
                string districtName  = communityItem.QuerySelector("div.info div.positionInfo a.district").InnerHtml;
                string neighborhood  = communityItem.QuerySelector("div.info div.positionInfo a.bizcircle").InnerHtml;
                string listingPrice  = communityItem.QuerySelector("div.xiaoquListItemRight div.xiaoquListItemPrice div.totalPrice span").InnerHtml;
                string listingUnits  = communityItem.QuerySelector("div.xiaoquListItemRight div.xiaoquListItemSellCount a.totalSellCount span").InnerHtml;
                string seashellId    = communityItem.GetAttribute("data-id");
                string seashellURL   = communityItem.QuerySelector("div.info div.title a").GetAttribute("href");

                SeashellContext        context = new SeashellContext();
                AdministrativeDistrict administrativeDistrict = new AdministrativeDistrictRepository(context).GetByName(districtName);
                Community communityToAdd = new Community()
                {
                    CommunityName            = communityName,
                    AdministrativeDistrictId = administrativeDistrict.AdministrativeDistrictId,
                    Neighborhood             = neighborhood,
                    External_id          = seashellId,
                    SeashellURL          = seashellURL,
                    CommunityHistoryInfo = new List <CommunityHistoryInfo>().Append(new CommunityHistoryInfo()
                    {
                        CommunityListingPrice = decimal.TryParse(listingPrice, out decimal price) ? price : 0,
                        CommunityListingUnits = int.TryParse(listingUnits, out int units) ? units : 0,
                        DataTime = DateTime.Now.Date
                    }).ToList()
예제 #3
0
        public async Task TestDatabaseConnection()
        {
            SeashellContext context = new SeashellContext();

            AdministrativeDistrict district = context.AdministrativeDistrict.FirstOrDefault();

            Assert.IsNotNull(district);
        }
예제 #4
0
        public async Task <int> GetHistoryInfoForAllCommunities()
        {
            SeashellContext context = new SeashellContext();

            List <Community> communities = context.Communities.ToList();

            communities = await ReadCommunityDetailInfo(communities);

            CommunityRepository repo = new CommunityRepository(context);

            repo.AddOrUpdate(communities);

            repo.Save();

            return(communities.Count());
        }
 public CommunityHistoryInfoRepository(SeashellContext context) : base(context)
 {
     this.context = context;
 }
예제 #6
0
 public BaseRepository(SeashellContext context)
 {
     this.context = context;
 }
예제 #7
0
 public AdministrativeDistrictRepository(SeashellContext context) : base(context)
 {
     this.context = context;
 }