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);
        }
Пример #2
0
        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);
        }