Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }