public ActionResult Parse(int[] selectedParts, int OrderId) { if (selectedParts == null) { AddError("Выберите элементы для парсинга"); return(RedirectToAction("Details", "Orders", new { Id = OrderId })); } ViewBag.SelectedParts = selectedParts; ViewBag.OrderId = OrderId; ParsersManager pm = new ParsersManager(); return(View(pm.GetAvailableParsers())); }
public ActionResult StartParse2(string selectedString) { ParseState st = (ParseState)Session["state"]; //достаем из сессии информацию о текущем состоянии парсинга if (st == null) { return(HttpNotFound()); } Order order = db.Orders.Find(st.OrderId); ParsersManager pm = new ParsersManager(); var parsers = pm.GetParsersByArrayIds(st.selectedParsers); //получаем необходимые парсеры foreach (KeyValuePair <int, string> kvp in st.SelectedStrings) { parsers[kvp.Key].setSelectedString(kvp.Value); //сохраняем в парсеры ранее выбранных производителей } bool juststarted = true; //переменная для того, чтобы определить, что мы только что попали в функцию //и необходимо продолжить парсить тем парсером, на котором остановились ранее for (; st.currentPart < st.selectedParts.Count(); st.currentPart++) { var dbpart = db.Parts.Find(st.selectedParts[st.currentPart]); if (juststarted) { juststarted = false; } else { st.currentParser = 0; } for (; st.currentParser < st.selectedParsers.Count(); st.currentParser++) { if (selectedString != string.Empty) //если выбрана новая строка { st.SelectedStrings.Add(st.currentParser, selectedString); //сохраняем ее в объект статуса parsers[st.currentParser].setSelectedString(selectedString); //а также в соответствующий парсер selectedString = string.Empty; } var parsertype = parsers[st.currentParser].GetParserType(); var PartNumber = from part in order.Parts where part.Id == st.selectedParts[st.currentPart] select part.PartNumber; st.log.Add(string.Format(" парсим деталь {0} на сайте {1}...", PartNumber.First(), parsertype)); var r = parsers[st.currentParser].detailParse(PartNumber.First()).ToParsedData(); switch (parsers[st.currentParser].getError()) { case 1: st.log.Add("!требуется выбор производителя"); DisposeParsers(st, parsers); ViewBag.st = st; Session["state"] = st; return(PartialView("_SelectManufacturer", parsers[st.currentParser].getStringsToSelect())); case 0: st.log.Add(string.Format("Ok. напарсено {0} результатов", r.Count)); if (st.parsed.ContainsKey(st.currentPart)) { st.parsed[st.currentPart].AddRange(r); } else { st.parsed[st.currentPart] = r; } break; case 2: break; default: break; } } } DisposeParsers(st, parsers); ViewBag.st = st; return(PartialView("StartParse")); }