using System; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; namespace BaiduSearchApp { public class BaiduSearchApi { private readonly string _apiKey; private readonly HttpClient _httpClient; private const string ApiUrl = "https://qianfan.baidubce.com/v2/ai_search/web_search"; public BaiduSearchApi(string apiKey) { _apiKey = apiKey; _httpClient = new HttpClient(); _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _apiKey); _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); } public async Task SearchAsync(string query, int pageSize = 50) { if (string.IsNullOrEmpty(query)) throw new ArgumentException("搜索内容不能为空", nameof(query)); var requestBody = new SearchRequest { Messages = new List { new Message { Content = query, Role = "user" } }, SearchSource = "baidu_search_v2", ResourceTypeFilter = new List { new SearchResource { Type = "web", TopK = pageSize } }, SearchRecencyFilter = "year" }; var jsonContent = JsonConvert.SerializeObject(requestBody); var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); HttpResponseMessage response = await _httpClient.PostAsync(ApiUrl, content); response.EnsureSuccessStatusCode(); string responseContent = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(responseContent); } } // 请求相关类 public class SearchRequest { [JsonProperty("messages")] public List Messages { get; set; } [JsonProperty("search_source")] public string SearchSource { get; set; } [JsonProperty("resource_type_filter")] public List ResourceTypeFilter { get; set; } [JsonProperty("search_recency_filter")] public string SearchRecencyFilter { get; set; } [JsonProperty("edition")] public string Edition { get; set; } = "standard"; } public class Message { [JsonProperty("content")] public string Content { get; set; } [JsonProperty("role")] public string Role { get; set; } } public class SearchResource { [JsonProperty("type")] public string Type { get; set; } [JsonProperty("top_k")] public int TopK { get; set; } } // 响应相关类 public class SearchResponse { [JsonProperty("request_id")] public string RequestId { get; set; } [JsonProperty("references")] public List References { get; set; } [JsonProperty("code")] public string Code { get; set; } [JsonProperty("message")] public string ErrorMessage { get; set; } } public class Reference { [JsonProperty("title")] public string Title { get; set; } [JsonProperty("url")] public string Url { get; set; } [JsonProperty("content")] public string Content { get; set; } [JsonProperty("date")] public string Date { get; set; } [JsonProperty("type")] public string Type { get; set; } [JsonProperty("web_anchor")] public string WebAnchor { get; set; } [JsonProperty("website")] public string Website { get; set; } } }