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); }
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; }
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; }
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; }
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); }
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(); }
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; }
protected virtual void ParseGeoObjectElement(XElement element, Shop shopPoint) { }