/// <summary> /// Create a valid, empty shell of a document, suitable for adding more elements to. /// </summary> /// <param name="baseUri">baseUri of document</param> /// <returns>document with html, head, and body elements.</returns> public static Document CreateShell(string baseUri) { Validate.NotNull(baseUri); Document doc = new Supremes.Nodes.Document(baseUri); Element html = doc.AppendElement("html"); html.AppendElement("head"); html.AppendElement("body"); return doc; }
/* * ============================================ * Protected * ============================================ */ override protected bool Parse(Supremes.Nodes.Document doc) { if (string.IsNullOrEmpty(this.Url)) { return(false); } string url = this.Url; if (url.EndsWith("/")) { url = url.Substring(0, url.Length - 1); } int lastSlash = url.LastIndexOf('/'); string imageId = url.Substring(lastSlash + 1); Supremes.Nodes.Element tagList = doc.Select("#quicktag1_" + imageId).First; Supremes.Nodes.Element seriesList = doc.Select("#quicktag2_" + imageId).First; Supremes.Nodes.Element characterList = doc.Select("#quicktag4_" + imageId).First; Supremes.Nodes.Element artistList = doc.Select("#quicktag3_" + imageId).First; // Get tags this.AddTags(tagList); this.AddTags(seriesList, "series"); this.AddTags(characterList, "character"); this.AddTags(artistList, "creator"); // Get rating if (Properties.Settings.Default.AddRating) { Supremes.Nodes.Element rating = doc.Select("#rating" + imageId).First; if (rating != null && rating.Text != "N/A") { this.AddTag(rating.Text, "rating"); } } // Get informations Supremes.Nodes.Element imageBlock = doc.Select("#content .image_block").First; if (imageBlock == null) { return(true); } Supremes.Nodes.Element imageLink = imageBlock.Select(".thumb > a.thumb_image[href]").First; Supremes.Nodes.Elements metas = imageBlock.Select(".meta > dl").Select("> *"); if (imageLink != null) { this.full = URL + imageLink.Attr("href"); } for (byte i = 0; i < metas.Count; i += 2) { if (i + 1 >= metas.Count) { break; } Supremes.Nodes.Element dt = metas[i]; Supremes.Nodes.Element dd = metas[i + 1]; if (dt.Text == "File size:") { this.size = this.KbOrMbToBytes(dd.Text); } else if (dt.Text == "Dimensions:") { string dimensions = dd.Text; if (dimensions.Contains("(")) { dimensions = dimensions.Substring(0, dimensions.IndexOf(" ")); } this.parseResolution(dimensions); } } return(true); }
/* * ============================================ * Protected * ============================================ */ override protected bool Parse(Supremes.Nodes.Document doc) { Supremes.Nodes.Element tagList = doc.Select("#tag-list").First; if (tagList == null) { return(false); } // Get tags this.AddTags(tagList, "copyright", "series"); this.AddTags(tagList, "character", "character"); this.AddTags(tagList, "artist", "creator"); this.AddTags(tagList, "general"); this.AddTags(tagList, "metadata", "meta"); // Get rating if (Properties.Settings.Default.AddRating) { this.GetRating(doc, "#tag-list li"); } // Get informations Supremes.Nodes.Elements lis = tagList.Select("li"); foreach (Supremes.Nodes.Element li in lis) { string content = li.Html; if (content == null) { continue; } content = content.Trim(); if (content.Length < 1) { continue; } if (content.StartsWith("Size:")) { int end = content.IndexOf('<'); if (end > SIZE_SUBSTR_START) { content = content.Substring(SIZE_SUBSTR_START, end - SIZE_SUBSTR_START); string[] parts = content.Trim().Split('x'); if (parts.Length == 2) { int.TryParse(parts[0], out this.width); int.TryParse(parts[1], out this.height); } } } Supremes.Nodes.Element link = li.Select("> a").First; if (link != null && link.Text == "Original image") { this.full = link.Attr("href"); } } return(true); }
/* * ============================================ * Protected * ============================================ */ override protected bool Parse(Supremes.Nodes.Document doc) { Supremes.Nodes.Elements tagRows = doc.Select("ul#tags li"); if (tagRows == null) { return(false); } // Get tags foreach (Supremes.Nodes.Element tagRow in tagRows) { Supremes.Nodes.Elements link = tagRow.Select("a"); if (link == null) { continue; } if (tagRow.Text.Length < 1) { continue; } string value = link.Text.Replace(tagRow.Text, "").Trim(); if (value.Length < 1) { continue; } string nameSpace = tagRow.Text.Replace(value, "").Trim(); switch (nameSpace) { case "Artiste": nameSpace = "creator"; break; case "Studio": nameSpace = "series"; break; case "Game": nameSpace = "series"; break; case "Character": nameSpace = "character"; break; case "Source": nameSpace = "series"; break; default: nameSpace = null; break; } this.AddTag(value.ToLower(), nameSpace); } // Get informations Supremes.Nodes.Element imageLink = doc.Select("#large > a.preview").First; Supremes.Nodes.Element imageElement = doc.Select("#large > img").First; Supremes.Nodes.Elements paragraphs = doc.Select("#large > p"); if (imageLink != null) { this.full = imageLink.Attr("href"); } else if (imageElement != null) { this.full = imageElement.Attr("src"); } Regex resolutionnRegex = new Regex(@"\d+x\d+", RegexOptions.Compiled | RegexOptions.IgnoreCase); foreach (Supremes.Nodes.Element paragraph in paragraphs) { MatchCollection resolutionMatches = resolutionnRegex.Matches(paragraph.OwnText); if (resolutionMatches.Count == 1) { GroupCollection groups = resolutionMatches[0].Groups; this.parseResolution(groups[0].Value); } Supremes.Nodes.Element span = paragraph.Select("> span").First; if (span != null && !string.IsNullOrWhiteSpace(span.OwnText)) { this.size = this.KbOrMbToBytes(span.OwnText); } } return(true); }
/* * ============================================ * Protected * ============================================ */ override protected bool Parse(Supremes.Nodes.Document doc) { Supremes.Nodes.Element tagSidebar = doc.Select("#tag-sidebar").First; // Get tags if (tagSidebar != null) { this.AddTags(tagSidebar, "copyright", "series"); this.AddTags(tagSidebar, "character", "character"); this.AddTags(tagSidebar, "artist", "creator"); this.AddTags(tagSidebar, "medium", "meta"); this.AddTags(tagSidebar, "general"); } // Get details Supremes.Nodes.Element stats = doc.Select("#stats > ul").First; if (stats != null) { Supremes.Nodes.Elements listItems = stats.Select("li"); foreach (Supremes.Nodes.Element li in listItems) { string content = li.Html; if (content == null) { continue; } content = content.Trim(); if (content.StartsWith("Original:")) { Supremes.Nodes.Element full = li.Select("a").First; int space = full.Text.IndexOf(' '); if (full != null) { string size = full.Text.Substring(space + 1); string dimensions = full.Text.Substring(0, space); size = size.Substring(1, size.Length - 2); string[] parts = dimensions.Split('x'); this.full = full.Attr("href"); this.size = this.KbOrMbToBytes(size); if (parts.Length == 2) { int.TryParse(parts[0], out this.width); int.TryParse(parts[1], out this.height); } } } else if (content.StartsWith("Rating:")) { this.rating = content.Substring("Rating: ".Length); } } } return(true); }