private static List <ServiceTemplate> GetServices(string tocUrl) { var content = RemoteFileAccess.GetOnlineContent(tocUrl); //if 404 or no content then return empty list if (content == null) { return(new List <ServiceTemplate>()); } //parse toc.json var urlAbsPath = tocUrl.Replace("toc.json", ""); var tocJsonObj = JObject.Parse(content); var objWithChildren = tocJsonObj["items"].Where(obj => obj["children"] != null && obj["toc_title"] != null && obj["href"] != null); if (!objWithChildren.Any()) { objWithChildren = tocJsonObj["items"].Where(obj => obj["children"] != null && obj["toc_title"] != null && obj["children"].First() != null && obj["children"].First()["toc_title"] != null && obj["children"].First()["toc_title"].ToString() == "Overview" && obj["children"].First()["href"] != null); } var services = objWithChildren.Select(obj => { var name = (string)obj["toc_title"]; var href = obj["href"] == null ? obj["children"].First()["href"] : obj["href"]; var url = new Uri(urlAbsPath + href).ToString(); var des = GetDes(url); return(new ServiceTemplate(name, url, des)); }).ToList(); return(services); }
private static string GetDes(string serviceUrl) { var content = WebUtility.HtmlDecode(RemoteFileAccess.GetOnlineContent(serviceUrl)); const string defaultDesContent = ""; //if 404 or parse error then return "" if (content == null) { return(defaultDesContent); } //parse the html Console.WriteLine($"Parse description from {serviceUrl}"); var doc = new HtmlDocument(); doc.LoadHtml(content); var desNodes = doc.DocumentNode.SelectSingleNode("//main/div[contains(@class, 'content')]/p"); var des = desNodes?.InnerText ?? defaultDesContent; return(des); }