public override (List <NetTask>, ExtractedInfo) Extract(string url, IExtractorOption option = null) { var html = NetTools.DownloadString(NetTask.MakeDefault(url, cookie: cookies[0])); var data = EHentaiExtractor.ParseArticleData(html, @"https://exhentai.org/.*?(?=\))"); var pages = EHentaiExtractor.GetPagesUri(html); var image_urls = new List <string>(); option.SimpleInfoCallback?.Invoke($"{data.Title}"); if (option == null) { option = RecommendOption(url); } if (option.ExtractInformation) { return(null, null /*data*/); } // // Extract Image Url-Url // image_urls.AddRange(EHentaiExtractor.GetImagesUri(html)); for (int i = 1; i < pages.Length; i++) { (option as EHentaiExtractorOption).PageReadCallback?.Invoke(pages[i]); var page = NetTools.DownloadString(NetTask.MakeDefault(pages[i], cookie: cookies[0])); image_urls.AddRange(EHentaiExtractor.GetImagesUri(page)); } // // Extract Image Url // var result = new NetTask[image_urls.Count]; var artist = "N/A"; var group = "N/A"; var series = "N/A"; if (data.artist != null && data.artist.Length > 0) { artist = data.artist[0]; } if (data.group != null && data.group.Length > 0) { group = data.group[0]; } if (data.parody != null && data.parody.Length > 0) { series = data.parody[0]; } if (artist == "N/A" && group != "N/A") { artist = group; } for (int i = 0; i < image_urls.Count; i++) { var html2 = NetTools.DownloadString(NetTask.MakeDefault(image_urls[i], cookies[0])); var durl = EHentaiExtractor.GetImagesAddress(html2); var task = NetTask.MakeDefault(durl, cookies[0]); task.SaveFile = true; task.Filename = durl.Split('/').Last(); task.Format = new ExtractorFileNameFormat { Title = data.Title, FilenameWithoutExtension = Path.GetFileNameWithoutExtension(task.Filename), Extension = Path.GetExtension(task.Filename).Replace(".", ""), OriginalTitle = data.SubTitle, Artist = artist, Group = group, Series = series }; result[i] = task; if (i == 0) { option.ThumbnailCallback?.Invoke(task); } } var result_list = result.ToList(); result_list.ForEach(task => task.Format.Extractor = GetType().Name.Replace("Extractor", "")); return(result_list, new ExtractedInfo { Type = ExtractedInfo.ExtractedType.WorksComic }); }
public override (List <NetTask>, ExtractedInfo) Extract(string url, IExtractorOption option = null) { var html = NetTools.DownloadString(url); var data = ParseArticleData(html); var pages = GetPagesUri(html); var image_urls = new List <string>(); if (option == null) { option = RecommendOption(url); } option.SimpleInfoCallback?.Invoke($"{data.Title}"); if (option.ExtractInformation) { return(null, null /*data*/); } // // Extract Image Url-Url // image_urls.AddRange(GetImagesUri(html)); for (int i = 1; i < pages.Length; i++) { (option as EHentaiExtractorOption).PageReadCallback?.Invoke(pages[i]); var page = NetTools.DownloadString(pages[i]); image_urls.AddRange(GetImagesUri(page)); } // // Extract Image Url // var result = new NetTask[image_urls.Count]; var count = image_urls.Count; var wait = new ManualResetEvent(false); var artist = "N/A"; var group = "N/A"; var series = "N/A"; if (data.artist != null && data.artist.Length > 0) { artist = data.artist[0]; } if (data.group != null && data.group.Length > 0) { group = data.group[0]; } if (data.parody != null && data.parody.Length > 0) { series = data.parody[0]; } if (artist == "N/A" && group != "N/A") { artist = group; } for (int i = 0; i < image_urls.Count; i++) { var task = NetTask.MakeDefault(image_urls[i]); var j = i; task.Priority = new NetPriority { Type = NetPriorityType.Trivial, TaskPriority = i }; task.DownloadString = true; task.CompleteCallbackString = (string str) => { var durl = GetImagesAddress(str); var tt = NetTask.MakeDefault(durl); tt.SaveFile = true; tt.Filename = durl.Split('/').Last(); tt.Format = new ExtractorFileNameFormat { Title = data.Title, FilenameWithoutExtension = Path.GetFileNameWithoutExtension(tt.Filename), Extension = Path.GetExtension(tt.Filename).Replace(".", ""), OriginalTitle = data.SubTitle, Artist = artist, Group = group, Series = series }; result[j] = tt; if (Interlocked.Decrement(ref count) == 0) { wait.Set(); } }; AppProvider.Scheduler.Add(task); } wait.WaitOne(); option.ThumbnailCallback?.Invoke(result[0]); var result_list = result.ToList(); result_list.ForEach(task => task.Format.Extractor = GetType().Name.Replace("Extractor", "")); return(result_list, new ExtractedInfo { Type = ExtractedInfo.ExtractedType.WorksComic }); }