30 lines
883 B
C#
30 lines
883 B
C#
using System.Text.Json;
|
|
using OpenQuery.Models;
|
|
|
|
namespace OpenQuery.Services;
|
|
|
|
public class SearxngClient
|
|
{
|
|
private readonly HttpClient _httpClient;
|
|
private readonly string _baseUrl;
|
|
|
|
public SearxngClient(string baseUrl)
|
|
{
|
|
_baseUrl = baseUrl.TrimEnd('/');
|
|
_httpClient = new HttpClient();
|
|
}
|
|
|
|
public async Task<List<SearxngResult>> SearchAsync(string query, int limit = 10)
|
|
{
|
|
var encodedQuery = Uri.EscapeDataString(query);
|
|
var url = $"{_baseUrl}/search?q={encodedQuery}&format=json";
|
|
|
|
var response = await _httpClient.GetAsync(url);
|
|
response.EnsureSuccessStatusCode();
|
|
|
|
var json = await response.Content.ReadAsStringAsync();
|
|
var results = JsonSerializer.Deserialize<SearxngRoot>(json, AppJsonContext.Default.SearxngRoot);
|
|
|
|
return results?.Results?.Take(limit).ToList() ?? [];
|
|
}
|
|
} |