using System.Text; using System.Text.Json; using System.Text.Json.Nodes; using Manager.YouTube.Models.Innertube; namespace Manager.YouTube.Parsers.Json; public static class JsonParser { public static List ParseImages(JsonElement.ArrayEnumerator array) => array .Select(image => new WebImage { Width = image.GetProperty("width").GetInt32(), Height = image.GetProperty("height").GetInt32(), Url = image.GetProperty("url").GetString() ?? "" }) .ToList(); public static string ExtractTextOrHtml(JsonElement element) { // Case 1: Simple text (no formatting) if (element.TryGetProperty("simpleText", out var simpleText)) return simpleText.GetString() ?? string.Empty; // Case 2: Runs (formatted text segments) if (element.TryGetProperty("runs", out var runs) && runs.ValueKind == JsonValueKind.Array) { var sb = new StringBuilder(); foreach (var run in runs.EnumerateArray()) { var text = run.GetProperty("text").GetString() ?? string.Empty; var formatted = System.Net.WebUtility.HtmlEncode(text); var bold = run.TryGetProperty("bold", out var boldProp) && boldProp.GetBoolean(); var italic = run.TryGetProperty("italic", out var italicProp) && italicProp.GetBoolean(); var underline = run.TryGetProperty("underline", out var underlineProp) && underlineProp.GetBoolean(); var strikethrough = run.TryGetProperty("strikethrough", out var strikeProp) && strikeProp.GetBoolean(); if (bold) formatted = $"{formatted}"; if (italic) formatted = $"{formatted}"; if (underline) formatted = $"{formatted}"; if (strikethrough) formatted = $"{formatted}"; if (run.TryGetProperty("navigationEndpoint", out var nav) && nav.TryGetProperty("url", out var urlProp)) { var url = urlProp.GetString(); if (!string.IsNullOrEmpty(url)) formatted = $"{formatted}"; } if (run.TryGetProperty("emoji", out var emoji) && emoji.ValueKind == JsonValueKind.Object) { if (emoji.TryGetProperty("url", out var emojiUrl)) { var src = emojiUrl.GetString(); if (!string.IsNullOrEmpty(src)) formatted = $"\"{text}\""; } } sb.Append(formatted); } return sb.ToString(); } return string.Empty; } public static List ExtractWebImages(JsonElement element) { var thumbnailsArray = element.GetProperty("thumbnail").GetProperty("thumbnails"); return thumbnailsArray.Deserialize>() ?? []; } }