Esempio n. 1
0
        void FillShop(string text, Shop shop)
        {
            var index = text.IndexOf("contacts__text");
            Func<String, String> getPValue = delegate(String s)
            { 
                var start = text.IndexOf("<p>", index) + 3;
                var end = text.IndexOf("</p>", start);
                index = end;
                return text.Substring(start, end - start).Trim();
            };

            shop.FullAddress = getPValue(text);
            
            // вытаскиваем адрес из строки пересечение МКАД и Алтуфьевского шоссе (141031, МО, Мытищинский район, МКАД  84-й км, ТПЗ «Алтуфьево», Автомобильный проезд, влад. 3, стр.1).
            var unnecessaryString = "пересечение МКАД и Алтуфьевского шоссе";
            if (shop.FullAddress.Contains(unnecessaryString))
            {
                var s = shop.FullAddress;
                s = s.Replace(unnecessaryString, "");
                s = s.Replace("(", "");
                s = s.Replace(").", "");
                shop.FullAddress = s;
            }

            shop.Phone = getPValue(text);
            shop.TimeWork = getPValue(text);
        }
Esempio n. 2
0
        public IEnumerable<Shop> ParseFromMap(String xml)
        {
            var parsed = XDocument.Parse(xml);

            var geoObjectsElements = parsed.Element(XName.Get("ymaps", ymapsNs))
                .Element(XName.Get("GeoObjectCollection", ymapsNs))
                .Element(XName.Get("featureMembers", gmlNs)).Elements();

            var shopPoints = new List<Shop>();
            foreach (var element in geoObjectsElements)
            {
                var position = element.Element(XName.Get("Point", gmlNs))
                        .Element(XName.Get("pos", gmlNs)).Value;

                if (String.IsNullOrEmpty(position))
                    continue;

                string dolgota, shirota;
                ParseHelper.GetCoordinates(position, out shirota, out dolgota, " ", false);

                var shop = new Shop()
                {
                    Shirota = shirota,
                    Dolgota = dolgota
                };

                // кастомный парсинг элемента
                ParseGeoObjectElement(element, shop);

                shopPoints.Add(shop);
            }
            
            return shopPoints;
        }
Esempio n. 3
0
        protected override void ParseGeoObjectElement(XElement element, Shop shop)
        {
            shop.Address = element.Element(XName.Get("name", gmlNs)).Value;

            var infoElement = element.Element(XName.Get("metaDataProperty", gmlNs))
                .Element(XName.Get("ShopData"))
                .Element(XName.Get("info"));

            shop.FullAddress = infoElement.Element(XName.Get("adress")).Value;
            shop.Phone = infoElement.Element(XName.Get("phone")).Value;
            shop.TimeWork = infoElement.Element(XName.Get("shedule")).Value;
        }
Esempio n. 4
0
        protected override void ParseGeoObjectElement(XElement element, Shop shop)
        {
            shop.FullAddress = element.Element(XName.Get("name", gmlNs)).Value;

            var infoElement = element.Element(XName.Get("metaDataProperty", gmlNs))
                .Element(XName.Get("AnyMetaData", ymapsNs));

            var phoneElement =infoElement.Element(XName.Get("phone"));
            if ( phoneElement != null )
                shop.Phone = phoneElement.Value;

            var timeWorkElement = infoElement.Element(XName.Get("hours"));
            if ( timeWorkElement != null )
                shop.TimeWork = timeWorkElement.Value;
        }
Esempio n. 5
0
        async Task FillShop(String link, String coordinates, ConcurrentQueue<Shop> shops)
        {
            String shirota, dolgota;
            ParseHelper.GetCoordinates(coordinates, out shirota, out dolgota);
            
            var shop = new Shop()
            {
                Shirota = shirota,
                Dolgota = dolgota
            };

            var shopHtml = await HttpHelper.HttpGet(@"http://www.selgros.ru/" + link);
            FillShop(shopHtml, shop);

            shops.Enqueue(shop);
        }
Esempio n. 6
0
        private IEnumerable<Shop> ParseJsonToShops(String jsonText)
        { 
            jsonText = jsonText.Replace("var placesJSON =", "");
            var index = jsonText.IndexOf("}}") + 2;
            jsonText = jsonText.Remove(index);

            var shopsJson = JsonConvert.DeserializeObject<ShopListJSON>(jsonText);

            var shops = new ConcurrentQueue<Shop>();
            var tasks = new List<Task>();
            foreach (var s in shopsJson.places.place)
            {
                tasks.Add(Task.Run(async() =>
                    {
                        var shirota = s.location.Substring(0, s.location.IndexOf(","));
                        var dolgota = s.location.Substring(s.location.IndexOf(",") + 1);

                        // получаем название города через YandexMapsApi из координат
                        var city = await ParseHelper.GetCityByCoordinatesAsync(dolgota, shirota);
                        // если в адресе нет города, добавляем его
                        if (!s.address.Contains(city))
                            s.address = city + ", " + s.address;

                        // если встречается пустой JS-объект, то он сериализуется в {}
                        // тогда преобразуем его в ""
                        var timeWork = "";
                        if ( s.schedule != null )
                        {
                            timeWork = s.schedule.ToString();
                            if ( timeWork == "{}" )
                                timeWork = "";
                        }

                        var shop = new Shop()
                        {
                            City = city,
                            FullAddress = s.address,
                            Shirota = shirota,
                            Dolgota = dolgota,
                            TimeWork = timeWork,
                            Phone = s.telephone
                        };

                        shops.Enqueue(shop);
                    }
                ));
            }

            Task.WaitAll(tasks.ToArray());

            return shops.ToList();
        }
Esempio n. 7
0
        IEnumerable<Shop> GetShops(String html, IEnumerable<City> cities)
        {
            var start = "var myLoadYMapsItemsVar=";
            var end = "};";
            var startIndex = html.IndexOf(start) + start.Length;
            var endIndex = html.IndexOf(end, startIndex) + 1;

            var shopsJsonText = html.Substring(startIndex, endIndex - startIndex);
            var shopsJson = JsonConvert.DeserializeObject<ShopsJson>(shopsJsonText);

            var shops = new List<Shop>();
            var citiesDict = cities.ToDictionary(c => c.Id);
            foreach (var shopJson in shopsJson.items)
            {
                String shirota, dolgota;
                ParseHelper.GetCoordinates(shopJson.gps, out shirota, out dolgota);
                
                var shop = new Shop() 
                {
                    Address = shopJson.name,
                    Dolgota = dolgota,
                    Shirota = shirota,
                    City = citiesDict[shopJson.per_id].Name,
                    TimeWork = shopJson.time
                };

                shops.Add(shop);
            }

            return shops;
        }
Esempio n. 8
0
 protected virtual void ParseGeoObjectElement(XElement element, Shop shopPoint)
 {
 }