public static async Task<ImagePack> GetImage(string uri) { var result = new ImagePack(); var req = (HttpWebRequest) WebRequest.Create(uri); var html = ""; var encoder = Encoding.GetEncoding(@"UTF-8"); using (var res = await req.GetResponseAsync()) using (var resStream = res.GetResponseStream()) if (resStream != null) { using (var sr = new StreamReader(resStream, encoder)) { html = sr.ReadToEnd(); } } var doc = new HAP.HtmlDocument { OptionCheckSyntax = false, OptionFixNestedTags = true }; doc.LoadHtml(html); var divStyle = doc.DocumentNode.SelectSingleNode(@"//div[@id='_image']")?.GetAttributeValue(@"style", null); if (!string.IsNullOrEmpty(divStyle)) { var regex = new Regex(@"background:url\((.*)\).*"); if (regex.IsMatch(divStyle)) { var imageUri = regex.Matches(divStyle)[0].Groups[1].Value; result.ImageUri = imageUri; req = (HttpWebRequest)WebRequest.Create(imageUri); using (var res = await req.GetResponseAsync()) using (var resStream = res.GetResponseStream()) using (var ms = new MemoryStream()) { resStream?.CopyTo(ms); result.ImageData = ms.ToArray(); } } } return result; }
public static async Task<ImagePack> GetImage(string uri) { var result = new ImagePack(); var req = (HttpWebRequest) WebRequest.Create(uri); var html = ""; var encoder = Encoding.GetEncoding(@"UTF-8"); using (var res = await req.GetResponseAsync()) using (var resStream = res.GetResponseStream()) if (resStream != null) { using (var sr = new StreamReader(resStream, encoder)) { html = sr.ReadToEnd(); } } var doc = new HAP.HtmlDocument { OptionCheckSyntax = false, OptionFixNestedTags = true }; doc.LoadHtml(html); var imageUri = doc.DocumentNode.SelectSingleNode(@"//meta[@property='og:image']")? .GetAttributeValue(@"content", string.Empty)? .Replace(@"/sp/", @"/"); if (!string.IsNullOrEmpty(imageUri)) { result.ImageUri = imageUri; req = (HttpWebRequest) WebRequest.Create(imageUri); using (var res = await req.GetResponseAsync()) using (var resStream = res.GetResponseStream()) using (var ms = new MemoryStream()) { resStream?.CopyTo(ms); result.ImageData = ms.ToArray(); } } return result; }
public static async Task<ImagePack> GetImage(string uri) { var result = new ImagePack(); if (_cookie == null) { var cookie = CookieHelper.LoadCookie(Service); if (cookie != null) { _cookie = cookie; } } var getHtml = new Func<string, Task<string>>(async u => { var r = string.Empty; var req = (HttpWebRequest) WebRequest.Create(u); req.CookieContainer = _cookie; var encoder = Encoding.GetEncoding(@"UTF-8"); using (var res = await req.GetResponseAsync()) using (var resStream = res.GetResponseStream()) { if (resStream != null) { using (var sr = new StreamReader(resStream, encoder)) { r = sr.ReadToEnd(); } } } return r; }); var html = await getHtml(uri); if (!html.Contains(@"ログアウト")) { await Login(); html = await getHtml(uri); } else { CookieHelper.SaveCookie(_cookie, Service); } var doc = new HAP.HtmlDocument { OptionCheckSyntax = false, OptionFixNestedTags = true }; doc.LoadHtml(html); var imageUri = doc.DocumentNode.SelectSingleNode(@"//img[@class='original-image']")? .GetAttributeValue(@"data-src", null) ?? doc.DocumentNode.SelectSingleNode(@"//meta[@property='og:image']")? .GetAttributeValue(@"content", string.Empty)? .Replace(@"150x150", @"1200x1200"); if (!string.IsNullOrEmpty(imageUri)) { result.ImageUri = imageUri; var req = (HttpWebRequest) WebRequest.Create(imageUri); req.CookieContainer = _cookie; req.Referer = uri; using (var res = await req.GetResponseAsync()) using (var resStream = res.GetResponseStream()) using (var ms = new MemoryStream()) { resStream?.CopyTo(ms); result.ImageData = ms.ToArray(); } } return result; }
public static async Task<ImagePack> GetImage(string uri) { var result = new ImagePack(); if (_cookie == null && Config.IsUseNicoSeigaWebScraping) { var cookie = CookieHelper.LoadCookie(Service); if (cookie != null) { _cookie = cookie; } } var getHtml = new Func<string, Task<string>>(async u => { var r = string.Empty; var req = (HttpWebRequest) WebRequest.Create(u); req.CookieContainer = _cookie; var encoder = Encoding.GetEncoding(@"UTF-8"); using (var res = await req.GetResponseAsync()) using (var resStream = res.GetResponseStream()) { if (resStream != null) { using (var sr = new StreamReader(resStream, encoder)) { r = sr.ReadToEnd(); } } } return r; }); var html = await getHtml(uri); if (Config.IsUseNicoSeigaWebScraping && !html.Contains(@"ログアウト")) { await Login(); html = await getHtml(uri); } if (Config.IsUseNicoSeigaWebScraping) { CookieHelper.SaveCookie(_cookie, Service); } var doc = new HAP.HtmlDocument { OptionCheckSyntax = false, OptionFixNestedTags = true }; doc.LoadHtml(html); string imageUri; var fallbackUri = doc.DocumentNode.SelectSingleNode(@"//meta[@property='og:image']")? .GetAttributeValue(@"content", string.Empty); if (Config.IsUseNicoSeigaWebScraping) { var nextUri = doc.DocumentNode.SelectSingleNode(@"//a[@id='illust_link']")? .GetAttributeValue(@"href", null); if (!string.IsNullOrEmpty(nextUri)) { html = await getHtml(BaseUri + nextUri); doc.LoadHtml(html); var origUri = doc.DocumentNode.SelectSingleNode(@"//div[@class='illust_view_big']")? .ChildNodes?.Where(x => x.Name == @"img").ElementAt(0)? .GetAttributeValue(@"src", string.Empty); imageUri = !string.IsNullOrEmpty(origUri) ? LohasUri + origUri : fallbackUri; } else { imageUri = fallbackUri; } } else { imageUri = fallbackUri; } if (!string.IsNullOrEmpty(imageUri)) { result.ImageUri = imageUri; var req = (HttpWebRequest) WebRequest.Create(imageUri); using (var res = await req.GetResponseAsync()) using (var resStream = res.GetResponseStream()) using (var ms = new MemoryStream()) { resStream?.CopyTo(ms); result.ImageData = ms.ToArray(); } } CookieHelper.SaveCookie(_cookie, Service); return result; }