Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }