Opensearchserver API with C#
本文关键字:with API Opensearchserver | 更新日期: 2023-09-27 18:36:45
我/正在开发一个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();
}
此外,该请求是使用 OpenSearchServer API 版本 1 发出的,因为我无法让 API2 工作。任何示例查询都会有所帮助,因为我找不到任何工作示例。
还尝试执行文档中给出的示例(版本 2 API):
http://localhost:9090/services/rest/index/my_index/document?login=lorem&key=08762e43getye0042f875e86eaiu687f
它抛出一个 http 405 - 方法不允许错误。 我正在寻找实现opensearchserver的restful JSON API。在现有代码中(尝试使用返回 XML 的 API 版本 1)任何想法??
您将无法在浏览器中使用此查询,因为它是 PUT 请求,而不是 GET 请求。
APIV2(Restful)使用不同的HTTP方法,而API V1仅使用GET请求。
例如,尝试使用适用于Chrome的扩展程序POSTMAN来测试您的不同查询,它可以轻松地发送带有内容和标头的PUT/POST/GET/DELETE请求。
关于C代码,恐怕我将无法准确地帮助您。
问候亚历山大