Files
EbayListingTool/EbayListingTool/Services/EbayCategoryService.cs
2026-04-13 17:37:29 +01:00

77 lines
2.5 KiB
C#

using System.Net.Http.Headers;
using Newtonsoft.Json.Linq;
namespace EbayListingTool.Services;
public class CategorySuggestion
{
public string CategoryId { get; set; } = "";
public string CategoryName { get; set; } = "";
public string CategoryPath { get; set; } = "";
}
public class EbayCategoryService
{
private readonly EbayAuthService _auth;
public EbayCategoryService(EbayAuthService auth)
{
_auth = auth;
}
public async Task<List<CategorySuggestion>> GetCategorySuggestionsAsync(string query)
{
if (string.IsNullOrWhiteSpace(query) || query.Length < 3)
return new List<CategorySuggestion>();
try
{
var token = await _auth.GetValidAccessTokenAsync();
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
http.DefaultRequestHeaders.Add("X-EBAY-C-MARKETPLACE-ID", "EBAY_GB");
var url = $"{_auth.BaseUrl}/commerce/taxonomy/v1/category_tree/3/get_category_suggestions" +
$"?q={Uri.EscapeDataString(query)}";
var json = await http.GetStringAsync(url);
var obj = JObject.Parse(json);
var results = new List<CategorySuggestion>();
var suggestions = obj["categorySuggestions"] as JArray;
if (suggestions == null) return results;
foreach (var s in suggestions.Take(8))
{
var cat = s["category"];
if (cat == null) continue;
// Build breadcrumb path
var ancestors = s["categoryTreeNodeAncestors"] as JArray;
var path = ancestors != null
? string.Join(" > ", ancestors.Reverse().Select(a => a["categoryName"]?.ToString() ?? "")) + " > " + cat["categoryName"]
: cat["categoryName"]?.ToString() ?? "";
results.Add(new CategorySuggestion
{
CategoryId = cat["categoryId"]?.ToString() ?? "",
CategoryName = cat["categoryName"]?.ToString() ?? "",
CategoryPath = path
});
}
return results;
}
catch (InvalidOperationException)
{
return new List<CategorySuggestion>();
}
}
public async Task<string?> GetCategoryIdByKeywordAsync(string keyword)
{
var suggestions = await GetCategorySuggestionsAsync(keyword);
return suggestions.FirstOrDefault()?.CategoryId;
}
}