private async Task <string> SendQuery(string query) { CurrentAnswerIndex = 0; Answers.Clear(); AnswerImageUrls.Clear(); QueryInProgress = true; QueryBuilder builder = new QueryBuilder(new Uri(ApiConstants.QueryBaseUrl)); builder.Input = query; builder.AppId = WolframAlphaConfig.AppId; QueryRequest request = new QueryRequest(); var uri = builder.QueryUri; var response = await request.ExecuteAsync(uri); if (response == null || response.Pods == null) { throw new InvalidOperationException("No Results Found."); } foreach (var pod in response.Pods) { if (pod.SubPods.Length == 0) { throw new InvalidOperationException("No Results Found."); } Answers.Add(pod.SubPods[0].PlainText); AnswerImageUrls.Add(pod.SubPods[0].Img.Src); } QueryInProgress = false; return(CurrentAnswer); }
private async Task <Tuple <string, string> > CalcComplexOrAnalRoot(bool typeIsComplex, string expression) { var b = new QueryBuilder(); //это ключ к API который надо получать у них на сайте, каждый ключ расчитан на 2000 обращений к сайту b.AppId = "3V4XEQ-X7PVP274KW"; //Your API key //b.Input = "sqrt(a^2+2*a*b+b^2)"; b.Input = string.Format("sqrt({0})", expression); //b.Input = "sqrt(i*i)"; var r = new QueryRequest(); var result = await r.ExecuteAsync(b.QueryUri); string root1 = "", root2 = ""; //Эта параша возвращает результат в виде XML файла, который надо парсить if (result != null) { /* * Короче если корень из отрицательного то ячейка 6, а если там еще есть i то 7, надо как-то искать нужную колонку * по тайтлу скорее всего */ if (typeIsComplex) { //Здесь я беру ячейку в которой должен быть +-корень) var pod = result.Pods.FirstOrDefault(x => x.Title.Contains("All 2nd roots of")); //MessageBox.Show(pod.Title); if (pod.SubPods != null) { //привожу результат в нормальный вид root1 = pod.SubPods[0].PlainText; root1 = root1.Replace(" (principal root)", string.Empty); root1 = root1.Substring(1 + root1.IndexOf((char)8776)); //8776 - знак приближенного root2 = pod.SubPods[1].PlainText; root2 = root2.Replace(" (principal root)", string.Empty); root2 = root2.Substring(1 + root2.IndexOf((char)8776)); } } else { //Alternate form assuming a and b are real var pod = result.Pods.FirstOrDefault(x => x.Title.Contains("Alternate form assuming")); if (pod != null) { if (pod.SubPods != null) { root1 = pod.SubPods[0].PlainText; } } else { pod = result.Pods.FirstOrDefault(x => x.Title.Contains("Input")); if (pod.SubPods != null) { root1 = pod.SubPods[0].PlainText; } } } } var exitTask = new Task <Tuple <string, string> >(() => { return(new Tuple <string, string>(root1, root2)); }); exitTask.Start(); return(exitTask.Result); }