]*>([\s\S]*?)<\/tr>");
+ foreach (Match trMatch in trMatches)
+ {
+ var trContent = trMatch.Groups[1].Value;
+ var tdMatches = Regex.Matches(trContent, @"| ]*>([\s\S]*?)<\/td>");
+ if (tdMatches.Count == 7)
+ {
+ var dateText = Regex.Replace(tdMatches[0].Groups[1].Value, @"<[^>]*>", "").Trim();
+ if (string.IsNullOrEmpty(dateText) || !dateText.Contains(".")) continue;
+
+ rows.Add(new Dictionary
+ {
+ { "date", dateText.Replace(".", "-") },
+ { "close", CleanNumber(Regex.Replace(tdMatches[1].Groups[1].Value, @"<[^>]*>", "")) },
+ { "open", CleanNumber(Regex.Replace(tdMatches[3].Groups[1].Value, @"<[^>]*>", "")) },
+ { "high", CleanNumber(Regex.Replace(tdMatches[4].Groups[1].Value, @"<[^>]*>", "")) },
+ { "low", CleanNumber(Regex.Replace(tdMatches[5].Groups[1].Value, @"<[^>]*>", "")) },
+ { "volume", CleanNumber(Regex.Replace(tdMatches[6].Groups[1].Value, @"<[^>]*>", "")) }
+ });
+ }
+ }
+ }
+
+ if (rows.Count == 0)
+ {
+ return JsonSerializer.Serialize(new { status = "DATA_MISSING", rows = new List |