public async Task LoginAsync(CancellationToken token) { Net = new NetSwap(Settings, HomeUrl); Net.SetTimeOut(20); var index = new Random().Next(0, _user.Length); var content = new FormUrlEncodedContent(new Dictionary <string, string> { { "login", _user[index] }, { "password", _pass[index] } }); var respose = await Net.Client.PostAsync($"{HomeUrl}/login/submit", content, token); // http://mjv-art.org/login/submit if (respose.IsSuccessStatusCode) { IsLogon = true; } else { App.Log("https://anime-pictures.net 网站登陆失败"); return; } }
public override async Task <ImageItems> GetRealPageImagesAsync(SearchPara para, CancellationToken token) { if (!IsLogon) { await LoginAsync(token); } // pages source //http://mjv-art.org/pictures/view_posts/0?lang=en var url = $"{HomeUrl}/pictures/view_posts/{para.PageIndex - 1}?lang=en"; if (para.Keyword.Length > 0) { //http://mjv-art.org/pictures/view_posts/0?search_tag=suzumiya%20haruhi&order_by=date&ldate=0&lang=en url = $"{HomeUrl}/pictures/view_posts/{para.PageIndex - 1}?search_tag={para.Keyword}&order_by=date&ldate=0&lang=en"; } var pageres = await Net.Client.GetAsync(url, token); var pageString = await pageres.Content.ReadAsStringAsync(); // images var imgs = new ImageItems(); var doc = new HtmlDocument(); doc.LoadHtml(pageString); var pre = "https:"; var listnode = doc.DocumentNode.SelectNodes("//*[@id='posts']/div[@class='posts_block']/span[@class='img_block_big']"); if (listnode == null) { return(imgs); } foreach (var node in listnode) { var img = new ImageItem(this, para); //img.Net = Net; img.Site = this; var imgnode = node.SelectSingleNode("a/picture/img"); var idattr = imgnode.GetAttributeValue("id", "0"); var reg = Regex.Replace(idattr, @"[^0-9]+", ""); int.TryParse(reg, out var id); img.Id = id; var src = imgnode.GetAttributeValue("src", ""); if (!string.IsNullOrWhiteSpace(src)) { img.Urls.Add(new UrlInfo("缩略图", 1, $"{pre}{src}", url)); } var resstrs = node.SelectSingleNode("div[@class='img_block_text']/a")?.InnerText.Trim().Split('x'); int.TryParse(resstrs[0], out var width); int.TryParse(resstrs[1], out var height); img.Width = width; img.Height = height; var scorestr = node.SelectSingleNode("div[@class='img_block_text']/span")?.InnerText.Trim(); int.TryParse(Regex.Match(scorestr ?? "0", @"[^0-9]+").Value, out var score); img.Score = score; var detail = node.SelectSingleNode("a").GetAttributeValue("href", ""); if (!string.IsNullOrWhiteSpace(detail)) { img.DetailUrl = $"{HomeUrl}{detail}"; img.GetDetailAction = async() => { var detialurl = img.DetailUrl; var net = new NetSwap(Settings); net.SetTimeOut(25); try { var detailPageStr = await net.Client.GetStringAsync(detialurl); var subdoc = new HtmlDocument(); subdoc.LoadHtml(detailPageStr); var downnode = subdoc.DocumentNode?.SelectSingleNode("//*[@id='rating']/a[@class='download_icon']"); var fileurl = downnode?.GetAttributeValue("href", ""); if (!string.IsNullOrWhiteSpace(fileurl)) { img.Urls.Add(new UrlInfo("原图", 4, $"{HomeUrl}{fileurl}", detialurl)); } } catch (Exception e) { App.Log(e); } }; } imgs.Add(img); } token.ThrowIfCancellationRequested(); return(imgs); }
public override async Task <ImageItems> GetRealPageImagesAsync(SearchPara para, CancellationToken token) { if (Net == null) { Net = new NetSwap(Settings, HomeUrl); Net.HttpClientHandler.AllowAutoRedirect = true; Net.SetTimeOut(40); } if (!IsLogin) { await LoginAsync(token); } if (!IsLogin) { return(new ImageItems()); } // page var word = para.Keyword; var page = para.PageIndex; var query = ""; var xmodestr = para.IsShowExplicit ? "" : "&mode=safe"; if (Lv3ListIndex == 1) { xmodestr = "&mode=r18"; } var r18 = Lv3ListIndex == 1 ? "_r18" : ""; switch (SearchType) { case SearchTypeEnum.TagOrNew: if (string.IsNullOrWhiteSpace(word)) // empty { // https://www.pixiv.net/new_illust.php?type=all&p=2 query = $"{HomeUrl}/new_illust{r18}.php?type=all&p={page}"; } else { query = $"{HomeUrl}/search.php?s_mode=s_tag&word={word.ToEncodedUrl()}&order=date_d&p={page}{xmodestr}"; } break; case SearchTypeEnum.Author: // 作者 member id //word = "4338012"; // test if (!int.TryParse(word.Trim(), out var memberId)) { App.ShowMessage("参数错误,必须在关键词中指定画师 id(纯数字)"); return(new ImageItems()); } // https://www.pixiv.net/member_illust.php?id=4338012&p=1 query = $"{HomeUrl}/member_illust.php?id={word.Trim()}&p={page}"; query = word; break; case SearchTypeEnum.Day: query = $"{HomeUrl}/ranking.php?mode=daily{r18}&p={page}&format=json"; break; case SearchTypeEnum.Week: // https://www.pixiv.net/ranking.php?mode=weekly&p=1&format=json query = $"{HomeUrl}/ranking.php?mode=weekly{r18}&p={page}&format=json"; break; case SearchTypeEnum.Month: query = $"{HomeUrl}/ranking.php?mode=monthly&p={page}&format=json"; break; } // ----------------images--------------------------- var imgs = new ImageItems(); switch (SearchType) { case SearchTypeEnum.TagOrNew: if (string.IsNullOrWhiteSpace(word)) { await SearchByNew(imgs, query, para, token); } else { await SearchByTag(imgs, query, para, token); } break; case SearchTypeEnum.Day: case SearchTypeEnum.Week: case SearchTypeEnum.Month: await SearchByRank(imgs, query, para, token); break; case SearchTypeEnum.Author: await SearchByAuthor(imgs, query, para, token); break; } token.ThrowIfCancellationRequested(); return(imgs); }