-3

winforms c# アプリケーションを開発していますが、アプリケーションで openSearchServer API を使用したいと考えています。検索で JSON/XML 応答を取得する方法の例をいくつか教えてください。現在、以下のアプローチを使用していますが、効率的にすることができます

WebRequest request = WebRequest.Create("http://localhost:9090/select?use=MSG&login=lorem&key=08762e43getye0042f875e86eaiu687f&qt=search&q="+searchTerm );
        string responseFromServer = GetQueryResults(request);

        // Parse XML Data

        string response = GetResultsFromXML(responseFromServer);
   private string GetQueryResults(WebRequest request)
    {
        //specify protcol
        request.ContentType = "application/json";
        //request.Headers.
        request.Method = "PUT";

        ////Get Request stream
        Stream datastream = request.GetRequestStream();


        datastream.Close();
        // Get response

        WebResponse respose = request.GetResponse();

        datastream = respose.GetResponseStream();

        StreamReader reader = new StreamReader(datastream);
        string responseFromServer = reader.ReadToEnd();
        return responseFromServer;
    }

    private string GetResultsFromXML(string responseFromServer)
    {
        StringBuilder output = new StringBuilder();

        #region XmlDocument
        XmlDocument xdoc = new XmlDocument();


        xdoc.LoadXml(responseFromServer);


        XmlNodeList nodelist = xdoc.SelectNodes("/response/result/doc");
                    foreach (XmlNode node in nodelist)
        {
            DataGridViewRow dgvRow = (DataGridViewRow)dgvResults.Rows[0].Clone();
            foreach (XmlAttribute attrib in node.Attributes)
            {

                if (attrib.Name == "score")
                {
                    dgvRow.Cells[0].Value = attrib.Value;
                }
                else if (attrib.Name == "docId")
                {
                    dgvRow.Cells[1].Value = attrib.Value;
                }
                else if (attrib.Name == "pos")
                {
                    dgvRow.Cells[2].Value = attrib.Value;
                }

            }

            XmlNodeList elements = node.SelectNodes("snippet");
            foreach (XmlNode node_element in elements)
            {
                if (node_element.Attributes[0].Value == "title")
                {
                    dgvRow.Cells[3].Value = node_element.InnerText;
                }
            }
            dgvResults.Rows.Add(dgvRow);
        }
        #endregion




        return output.ToString();
    }

また、API2 を機能させることができないため、OpenSearchServer API バージョン 1 を使用してリクエストが行われます。

また、ドキュメントに記載されている例を実行してみました (バージョン 2 API):

http://localhost:9090/services/rest/index/my_index/document?login=lorem&key=08762e43getye0042f875e86eaiu687f

http 405 -Method not allowed エラーがスローされます。opensearchserver の安らかな JSON API の実装を探しています。既存のコードで(XMLを返すAPIバージョン1で試しました)何かアイデアはありますか??

4

1 に答える 1