using BinaryDad.Extensions; using Newtonsoft.Json; using System.Text.RegularExpressions; namespace BinaryDad.AacpsBusAlert.Services { public class HtmlScrapeBusRouteService : IBusRouteService { private readonly HttpClient httpClient; public HtmlScrapeBusRouteService(IHttpClientFactory httpClientFactory) { httpClient = httpClientFactory.CreateClient(); } public async Task> GetBusRoutesAsync() { var url = "https://busstops.aacps.org/public/BusRouteIssues.aspx"; var content = await httpClient.GetStringAsync(url); var dataArrayMatch = Regex.Match(content, "var dataArray \\= (.*)\\;"); if (dataArrayMatch.Success && dataArrayMatch.Groups.Count == 2) { var dataArray = dataArrayMatch.Groups[1].Value; var parsedArray = JsonConvert.DeserializeObject(dataArray); return parsedArray .Select(r => new BusRoute { BusNumber = r[0].To(), SubBusNumber = r[1].To(), Schools = r[2], Schedules = r[3], Impact = r[4] }) .ToList(); } throw new ApplicationException("Unable to parse bus route page"); } } }