public object Validate([FromQuery] string validateArr) { var Parameters = JsonConvert.DeserializeObject <List <ParameterForValidate> >(validateArr); List <object> parametersCorrect = new List <object>(); bool resultVerification; string message; foreach (var parameter in Parameters) { if (StaticData.CurrentSystems.ParametersWithEnter.TryGetValue(parameter.parameterName, out ParameterWithEnter parameterWithEnter)) { parameterWithEnter.Value = parameter.value; resultVerification = parameterWithEnter.Verification(out message); if (!resultVerification) { QueryResponse.AddNegativeMessage(message); } parametersCorrect.Add(new { parameterName = parameter.parameterName.GetName(), Correct = resultVerification }); } } QueryResponse.Add("parametersCorrect", parametersCorrect); return(QueryResponse.ToResult()); }
public object GetParametersForAnalysis() { QueryResponse.Add("ParametersForAnalysis", StaticData.CurrentSystems.GetParametersForAnalysis(out List <string> message)); QueryResponse.AddNegativeMessages(message, true); QueryResponse.Add("U", StaticData.CurrentSystems.GetParameterU(out string result)); QueryResponse.Add("result", result); return(QueryResponse.ToResult()); }
private void tidiedData(Query q, XmlDocument objXmlDocument) { // Only deal with one page for now (I think there is only one) _bMoreResults = false; // Grab sub frame XmlNodeList objNodeListRetailerNames = objXmlDocument.SelectNodes("/html/body/div/table/tr/td/table/tr/td/table/tr/td/a[@href!='/retailers']"); XmlNodeList objNodeListDistances = objXmlDocument.SelectNodes("/html/body/div/table/tr/td/table/tr/td/table/tr/td/a[@href!='/retailers']/../../td[@class='indent'][@align='right']"); // Check if (objNodeListDistances == null || objNodeListRetailerNames == null) { throw new Exception("Big problems - can't extract data"); } for (int i = 0; i < objNodeListRetailerNames.Count; i++) { string strURL = TidyString(objNodeListRetailerNames[i].Attributes["href"].Value); string strName = TidyString(objNodeListRetailerNames[i].InnerText); string strDistance = TidyString(objNodeListDistances[i].InnerText); // CHANGE: Need a better way to extract ID string strID = strURL.Substring(strURL.IndexOf("dealer_no=") + 10); QueryResponse objResponse = new QueryResponse(); objResponse.Add("URL", "http://" + Domain + strURL); objResponse.Add("NAME", strName); objResponse.Add("DISTANCE", strDistance); objResponse.Add("ID", strID); _arrResponses.Add(objResponse); } // Go get next set of data ? if (_bMoreResults) { doQuery(); } if (OnResults != null) { OnResults(this, Responses); } }
public object GetParameters() { var ParametersWithEnter = HelperEnum.GetValuesWithoutDefault <NameParameterWithEnter>().Where(x => !StaticData.ConditionsForParameterWithEnter.ContainsKey(x)).Select(x => x.ToJson()); var ParametersWithCalculation = HelperEnum.GetValuesWithoutDefault <NameParameterWithCalculation>().Where(x => !StaticData.ConditionsForParameterWithCalculation.ContainsKey(x)).Select(x => x.ToJson()); //var ParametersForAnalysis = HelperEnum.GetValuesWithoutDefault<NameParameterForAnalysis>().Where(x => !StaticData.ConditionsForParameterForAnalysis.ContainsKey(x)).Select(x => x.ToJson()); QueryResponse.Add("Properties", ParametersWithEnter.Union(ParametersWithCalculation)); return(QueryResponse.ToResult()); }
public object AddRestriction(string parameter = null, string condition = null, string value = null) { ConditionType conditionValue = ConditionType.NoCorrect; double Value = 0; if (string.IsNullOrEmpty(value)) { QueryResponse.AddNegativeMessage("Значение ограничения не указано"); } else { if (!double.TryParse(value, out Value)) { QueryResponse.AddNegativeMessage(String.Format("Указанное значение \"{0}\" не является числом", value)); } else if (!(Value > 0)) { QueryResponse.AddNegativeMessage("Значение ограничения должно быть > 0"); } } if (string.IsNullOrEmpty(condition)) { QueryResponse.AddNegativeMessage("Условие для ограничения не указано"); } else { HelperEnum.TryGetValue <ConditionType>(condition, out conditionValue); if (HelperEnum.IsDefault(conditionValue)) { QueryResponse.AddNegativeMessage(String.Format("Условие типа \"{0}\" не найдено", condition)); } } if (string.IsNullOrEmpty(parameter)) { QueryResponse.AddNegativeMessage("Параметр для ограничения не указан"); } else { var result = ParameterUniversal.AddToRestriction(parameter, conditionValue, Value, QueryResponse.IsSuccess, out bool correct); if (QueryResponse.IsSuccess) { QueryResponse.Add(result); } else if (!correct) { QueryResponse.AddNegativeMessage(String.Format("Параметр с именем \"{0}\" не найден", parameter)); } } return(QueryResponse.ToResult()); }
public object GetCalculationForDiagram([FromQuery] string queryString) { ParameterForCalculationDiagram parameterForCalculationDiagram = ValidateDiagram(queryString); if (QueryResponse.IsSuccess) { DiagramCalculationResult diagramCalculationResult = new DiagramCalculationResult(); diagramCalculationResult.calculations = new List <DiagramCalculation>(); foreach (var nameSystem in parameterForCalculationDiagram.namesSystems) { diagramCalculationResult.calculations.Add(new DiagramCalculation(StaticData.Systems[nameSystem].GetParameterValue(parameterForCalculationDiagram.parameterName), nameSystem)); } diagramCalculationResult.parameterName = StaticData.CurrentSystems.GetParameterDesignation(parameterForCalculationDiagram.parameterName); StaticData.DiagramCalculation = diagramCalculationResult; QueryResponse.Add("ParameterName", diagramCalculationResult.parameterName); QueryResponse.Add("Calculations", diagramCalculationResult.calculations); } return(QueryResponse.ToResult()); }
public object GetCalculationForChart([FromQuery] string queryString) { ParameterForCalculationChart parameterForCalculationChart = ValidateChart(queryString); if (QueryResponse.IsSuccess) { ChartCalculationResult chartCalculationResult = new ChartCalculationResult(); chartCalculationResult.calculations = new List <ChartCalculation>(); foreach (var nameSystem in parameterForCalculationChart.namesSystems) { chartCalculationResult.calculations.Add(StaticData.Systems[nameSystem].GetCalculationsForChart(parameterForCalculationChart)); } chartCalculationResult.parameterNameX = StaticData.CurrentSystems.GetParameterDesignation(parameterForCalculationChart.parameterName); chartCalculationResult.parameterNameY = StaticData.CurrentSystems.GetParameterDesignation("U"); StaticData.ChartCalculation = chartCalculationResult; QueryResponse.Add("ParameterNameX", chartCalculationResult.parameterNameX); QueryResponse.Add("ParameterNameY", chartCalculationResult.parameterNameY); QueryResponse.Add("Calculations", chartCalculationResult.calculations.Select(x => x.ToObject())); } return(QueryResponse.ToResult()); }
private void tidiedData(Query q, XmlDocument objXmlDocument) { // Grab sub frame XmlNode objNodeIndex = objXmlDocument.SelectSingleNode("/html/frameset/frameset/frame[@name='PFC']"); // Are we in the main page - i.e. do we need to jump into the sub-frame ? if (objNodeIndex != null) { if (objNodeIndex.Attributes["src"] != null) { _strSubFrameQuery = objNodeIndex.Attributes["src"].Value + "&page=" + ++_iPageNo; objXmlDocument = GetTidiedData(_strSubFrameQuery); } } // Increment the page number and do the query again with a sub-frame query // FIXME: Do this better _strSubFrameQuery = _strSubFrameQuery.Replace("page=" + _iPageNo, "page=" + ++_iPageNo); // Grab images XmlNodeList objNodeListImages = objXmlDocument.SelectNodes("/html/body/form/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a"); XmlNodeList objNodeListDate = objXmlDocument.SelectNodes("/html/body/form/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a/../../td[3]"); XmlNodeList objNodeListMileage = objXmlDocument.SelectNodes("/html/body/form/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a/../../td[4]"); XmlNodeList objNodeListColor = objXmlDocument.SelectNodes("/html/body/form/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a/../../td[5]"); XmlNodeList objNodeListPrice = objXmlDocument.SelectNodes("/html/body/form/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a/../../td[6]"); XmlNode objNextNode = objXmlDocument.SelectSingleNode("/html/body/form/table/tr/td/table/tr/td/table/tr/td/p/a[@title='Next Page']"); if (objNextNode != null) { _bMoreResults = true; } else { _bMoreResults = false; } for (int i = 0; i < objNodeListImages.Count; i++) { string strPicURL = TidyString("/" + objNodeListImages[i].Attributes["href"].Value).Trim(); string strShortform = TidyString(objNodeListImages[i].InnerText).Trim(); string strDate = TidyString(objNodeListDate[i].InnerText).Trim(); string strMileage = TidyString(objNodeListMileage[i].InnerText).Trim(); string strColor = TidyString(objNodeListColor[i].InnerText).Trim(); string strPrice = TidyString(objNodeListPrice[i].InnerText).Trim(); QueryResponse objResponse = new QueryResponse(); Uri objUri = new Uri(_strSubFrameQuery); objResponse.Add("INFOURL", "http://" + objUri.Host + strPicURL); objResponse.Add("DETAILS", strShortform); objResponse.Add("DATE", strDate); objResponse.Add("MILEAGE", strMileage); objResponse.Add("COLOR", strColor); objResponse.Add("PRICE", strPrice); _arrResponses.Add(objResponse); } // Go get next set of data ? if (_bMoreResults) { doQuery(); } if (OnResults != null) { OnResults(this, Responses); } }
public object GetRestrictions() { QueryResponse.Add("Restrictions", ParameterUniversal.GetRestrictions().Select(x => x.ToResponse())); return(QueryResponse.ToResult()); }
public object GetConditions() { QueryResponse.Add("Conditions", HelperEnum.GetValuesWithoutDefault <ConditionType>().Select(x => x.ToJson())); return(QueryResponse.ToResult()); }
public object GetParametersForDiagram() { QueryResponse.Add("ParametersForDiagram", StaticData.CurrentSystems.GetParametersForDiagram()); return(QueryResponse.ToResult()); }
public object GetSystems() { QueryResponse.Add("Systems", StaticData.Systems.Keys.ToList()); return(QueryResponse.ToResult()); }
public object GetParametersWithCalculate() { QueryResponse.Add("ParametersWithCalculate", StaticData.CurrentSystems.GetParametersWithCalculate(out List <string> message)); QueryResponse.AddNegativeMessages(message, true); return(QueryResponse.ToResult()); }
public object GetParametersWithEnter() { QueryResponse.Add("ParametersWithEnter", StaticData.CurrentSystems.GetParametersWithEnter(out List <string> message)); QueryResponse.AddWarningMessages(message, true); return(QueryResponse.ToResult()); }
private void tidiedData(Query q, XmlDocument objXmlDocument) { // Grab results number XmlNode objNodeIndex = objXmlDocument.SelectSingleNode("/html/body/div/table[2]/tr[1]/td[1]/b"); string strIndex = objNodeIndex.InnerText; string[] strIndexInfo = strIndex.Split(new char[] { ' ' }); int iFirstResult; int iLastResult; int iTotalResults; iFirstResult = int.Parse(strIndexInfo[1]); iLastResult = int.Parse(strIndexInfo[3]); iTotalResults = int.Parse(strIndexInfo[5]); if (iTotalResults == MAX_RECORDS) { // FIXME: Throw an exception ? Debug.WriteLine("Warning: returned record count is equal to MAX_RECORDS. Query is too general"); } if (iLastResult < iTotalResults) { _bMoreResults = true; } // Grab list from this page XmlNodeList objNodeShortformList = objXmlDocument.SelectNodes("//div[@class='results']//table[@class='standardListAd']/tr/td/b/a"); XmlNodeList objNodeLongformList = objXmlDocument.SelectNodes("//div[@class='results']//table[@class='standardListAd']/tr/td[@class='listAdTextAreaPhoto']"); XmlNodeList objNodePriceList = objXmlDocument.SelectNodes("//div[@class='results']//table[@class='standardListAd']/tr/td[@class='priceCol']/b"); XmlNodeList objNodePicList = objXmlDocument.SelectNodes("//div[@class='results']//table[@class='standardListAd']/tr/td[@class='photoColWithPhoto']"); XmlNodeList objMoreInfoList = objXmlDocument.SelectNodes("//div[@class='results']//table[@class='standardListAd']/tr/td/b/a/@href"); for (int i = 0; i < objNodeLongformList.Count; i++) { QueryResponse objResponse = new QueryResponse(); string strPicURL; XmlNode objNode = objNodePicList[i]["img"]; if (objNode != null) { strPicURL = objNode.Attributes["src"].Value; } else { strPicURL = ""; } string strShortform = objNodeShortformList[i].InnerText; string strLongform = objNodeLongformList[i].InnerText; string [] strMoreInfoElements = objMoreInfoList[i].Value.Split(new char[] { ',', '(', ')' }); string strAdID = strMoreInfoElements[1]; string strDist = strMoreInfoElements[2]; string strCat = strMoreInfoElements[3]; string strPos = strMoreInfoElements[4]; string strURL = "http://" + _strDomain + "/WWW/CARS_popup.asp?modelexact=1&lid=search_used_cars_full&make=ANY&model=ANY&min_pr=500&max_pr=&mileage=&agerange=&postcode=L23%203DP&miles=10&max_records=&source=2&photo=1&sort=4&ukcarsearch_full=SEARCH&start=" + strPos + "&distance=" + strDist + "&adcategory=" + strCat + "&channel=CARS&id=" + strAdID; // Knock out all superfluous spaces while (strShortform.IndexOf(" ") >= 0) { strShortform = strShortform.Replace(" ", " "); } while (strLongform.IndexOf(" ") >= 0) { strLongform = strLongform.Replace(" ", " "); } // Knock out new lines strShortform = strShortform.Replace("\r\n", ""); strLongform = strLongform.Replace("\r\n", ""); string strNodePrice = objNodePriceList[i].InnerText; strNodePrice = strNodePrice.Replace(",", ""); #if false Debug.WriteLine("Got: " + strPicURL + ", " + strLongform + ", " + strNodePrice); #endif objResponse.Add("PictureURL", strPicURL); objResponse.Add("ShortForm", strShortform); objResponse.Add("Details", strLongform); objResponse.Add("Price", strNodePrice); objResponse.Add("MoreInfoURL", strURL); _arrResponses.Add(objResponse); } // Go get next set of data ? if (_bMoreResults) { _iPageNo++; // Increment the page number and do the query again doQuery(); } if (OnResults != null) { OnResults(this, Responses); } }