Exemple #1
0
        public List <UrlContainer.UrlContainer> GetImageUrlList(UrlContainer.UrlContainer uc, string[] format)
        {
            var ret  = new List <UrlContainer.UrlContainer>();
            var mode = GetSeigaDisplayMode(uc);

            if (mode == "seiga")
            {
                Regex re = new Regex("https?://seiga.nicovideo.jp/seiga/im(?<Id>[0-9]+)$");
                Match m  = re.Match(uc.Url);
                if (m.Success)
                {
                    uc.Url = "http://seiga.nicovideo.jp/image/source?id=" + m.Groups["Id"].Value;
                    string resUrl = uc.GetResponseUrl(mUserAccount.CookieContainer);
                    uc.DownloadUrl = resUrl.Replace("/o/", "/priv/");
                    if (!String.IsNullOrEmpty(uc.DownloadUrl))
                    {
                        ret.Add(uc);
                    }
                }
            }
            else if (mode == "watch")
            {
                var hc = new HtmlContainer.HtmlContainer(uc, mUserAccount.CookieContainer);
                hc.UpdateAttributeUrlList("img", "data-original", null);
                ret = hc.AttributeUrlList;
            }
            return(ret);
        }
Exemple #2
0
        ImageInfo InitImageInfo(HtmlContainer.HtmlContainer hc, UrlContainer.UrlContainer uc, string dir)
        {
            string tmpName  = Utilities.Common.RemoveChars(uc.FileName, mInvalidCharsF, "_");
            string fileName = mSettings.FileNameGenerator.Generate(dir, tmpName);

            ImageInfo info = new ImageInfo();

            info.ImageUrl    = uc.Url;
            info.ParentUrl   = hc.UrlContainer.Url;
            info.ParentTitle = hc.Title;
            info.ImagePath   = dir + fileName;

            return(info);
        }
Exemple #3
0
        private string GetPostKey()
        {
            var   hc = new HtmlContainer.HtmlContainer("https://accounts.pixiv.net/login");
            Match m  = new Regex("\"post_key\" value=\"(?<Key>[a-z0-9]+)\"").Match(hc.Html);

            if (m.Success)
            {
                mUserAccount.CookieContainer.Add(hc.CookieContainer.GetCookies(mBaseUri));
                return(m.Groups["Key"].Value);
            }
            else
            {
                return(null);
            }
        }
Exemple #4
0
        bool DownloadImages(HtmlContainer.HtmlContainer hc)
        {
            mTempStatus.Size   = 0;
            mTempStatus.Images = 0;
            // 重複ダウンロードのフィルタリング
            var urlList = mSettings.OverlappedUrlFilter.Filter(hc.AttributeUrlList);
            // 画像枚数更新
            var    imgCount = urlList.Count;
            string dir      = InitAndCreateDirectory(hc);

            for (int i = 0; i < imgCount; i++)
            {
                // 終了条件を満たす
                if (IsCompleted())
                {
                    return(false);
                }
                else if (!mSettings.ImageUrlFilter.Filter(urlList[i].Url))
                {
                    // ファイルが存在せず, パスが初期化されている
                    ImageInfo info = InitImageInfo(hc, urlList[i], dir);
                    if (!File.Exists(info.ImagePath) && info.ImagePath != null)
                    {
                        Download(urlList[i], info);
                    }
                }
                else
                {
                    mSettings.Logger.Write("Downloader", "画像 URL フィルタが適用されました > " + urlList[i].Url);
                }

                if (mTempStatus.Images == 1)
                {
                    OnInitProgress(hc, imgCount);
                }
                else if (mTempStatus.Images > 1)
                {
                    OnUpdateProgress(mTempStatus.Images, i);
                }
            }
            if (mTempStatus.Images > 0)
            {
                mSumStatus.Pages++;
                OnFinalizeProgress();
            }
            Utilities.Common.DeleteEmptyDirectory(dir);
            return(true);
        }
Exemple #5
0
        private List <UrlContainer.UrlContainer> PixivImageUrls(HtmlContainer.HtmlContainer hc)
        {
            var html = hc.Html.Replace("\\/", "/");
            var urls = new List <UrlContainer.UrlContainer>();
            var re   = new Regex(@"https?://i.pximg.net/img-original/[a-z0-9\./_]+");

            foreach (Match m in re.Matches(html))
            {
                if (m.Success)
                {
                    var uc = new UrlContainer.UrlContainer(m.Value, hc.UrlContainer.Url);
                    urls.Add(uc);
                }
            }
            return(urls);
        }
Exemple #6
0
        public List <UrlContainer.UrlContainer> GetLinkList(HtmlContainer.HtmlContainer hc)
        {
            List <UrlContainer.UrlContainer> ret = new List <UrlContainer.UrlContainer>();
            var re = new Regex(@"""illustId"":""(?<Id>[0-9]+)""");

            foreach (Match m in re.Matches(hc.Html))
            {
                if (m.Success)
                {
                    var uc = new UrlContainer.UrlContainer(
                        "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=" + m.Groups["Id"].Value,
                        hc.UrlContainer.Url);
                    ret.Add(uc);
                }
            }
            return(ret);
        }
Exemple #7
0
        HtmlContainer.HtmlContainer GetHtmlContainerForImages(UrlContainer.UrlContainer uc)
        {
            if (IsIgnore(uc.Url))
            {
                return(null);
            }

            // URLに対応するプラグインを検索,見つかればCookie取得
            Plugins.IPlugin plugin = FindPlugin(uc);
            var             hc     = new HtmlContainer.HtmlContainer(uc, mCookieContainer);

            // Htmlを取得しない
            if (mSettings.UrlFilter.Filter(uc.Url))
            {
                mSettings.Logger.Write("Downloader", "URL フィルタが適用されました > " + uc.Url);
                return(hc);
            }
            // Htmlを取得する
            if (mSettings.TitleFilter.Filter(hc.Title))
            {
                mSettings.Logger.Write("Downloader", "タイトルフィルタが適用されました > " + hc.Title);
                return(hc);
            }

            mSettings.Logger.Write("Downloader", uc.Url + " を取得しました");
            if (plugin != null && plugin.IsExclusive)
            {
                hc.AttributeUrlList = plugin.GetImageUrlList(uc, mSettings.Formats);
            }
            else
            {
                if (mSettings.ParseHrefAttr)
                {
                    hc.UpdateAttributeUrlList("a", "href", mSettings.Formats);
                }
                if (mSettings.ParseImgTag)
                {
                    hc.UpdateAttributeUrlList("img", "src", mSettings.Formats);
                    hc.UpdateAttributeUrlList("img", "data-src", mSettings.Formats);
                }
            }
            return(hc);
        }
Exemple #8
0
        string InitAndCreateDirectory(HtmlContainer.HtmlContainer hc)
        {
            string safeTitle     = Utilities.Common.RemoveChars(hc.Title, mInvalidCharsF, "_");
            string safeLocalPath = Utilities.Common.RemoveChars(hc.UrlContainer.LocalPath, mInvalidCharsP, "_");
            string dir           = mSettings.RootDirectory;

            if (mSettings.AppendsUrl)
            {
                dir += safeLocalPath;
            }
            if (mSettings.AppendsTitle)
            {
                dir += safeTitle + "\\";
            }

            Directory.CreateDirectory(dir);

            return(dir);
        }
Exemple #9
0
        private List <UrlContainer.UrlContainer> PixivMangaUrls(HtmlContainer.HtmlContainer hc, string[] format)
        {
            var urls = new List <UrlContainer.UrlContainer>();
            var re   = new Regex(@"mode=manga_big");

            hc.UpdateAttributeUrlList("a", "href", null);
            foreach (var uc in hc.AttributeUrlList)
            {
                Match m = re.Match(uc.Url);
                if (m.Success)
                {
                    var tmp = new HtmlContainer.HtmlContainer(uc.Url, hc.CookieContainer);
                    tmp.UpdateAttributeUrlList("img", "src", format);
                    urls.AddRange(tmp.AttributeUrlList);
                }
            }

            return(urls);
        }
Exemple #10
0
        HtmlContainer.HtmlContainer GetHtmlContainerForLinks(UrlContainer.UrlContainer uc)
        {
            if (IsIgnore(uc.Url))
            {
                return(null);
            }

            // URLに対応するプラグインを検索,見つかればCookie取得
            Plugins.IPlugin plugin = FindPlugin(uc);
            var             hc     = new HtmlContainer.HtmlContainer(uc, mCookieContainer);

            if (plugin != null && plugin.IsExclusive)
            {
                hc.AttributeUrlList = plugin.GetLinkList(hc);
            }
            if (hc.AttributeUrlList.Count == 0)
            {
                hc.UpdateAttributeUrlList("a", "href", new string[] { "php", "phtml", "html", "htm", "" });
            }
            return(hc);
        }
Exemple #11
0
        public List <UrlContainer.UrlContainer> GetImageUrlList(UrlContainer.UrlContainer uc, string[] format)
        {
            var   ret = new List <UrlContainer.UrlContainer>();
            Regex re  = new Regex("https?://www.pixiv.net/member_illust.php.*?illust_id=(?<Id>[0-9]+)");

            Match m = re.Match(uc.Url);

            if (m.Success)
            {
                var hc = new HtmlContainer.HtmlContainer(uc, mUserAccount.CookieContainer);
                foreach (var url in PixivImageUrls(hc))
                {
                    ret.Add(url);
                }
                hc = new HtmlContainer.HtmlContainer(
                    new UrlContainer.UrlContainer("https://www.pixiv.net/member_illust.php?mode=manga&illust_id=" + m.Groups["Id"].Value),
                    mUserAccount.CookieContainer);
                foreach (var url in PixivMangaUrls(hc, format))
                {
                    ret.Add(url);
                }
            }
            return(ret);
        }
Exemple #12
0
 public List <UrlContainer.UrlContainer> GetLinkList(HtmlContainer.HtmlContainer hc)
 {
     return(new List <UrlContainer.UrlContainer>());
 }
Exemple #13
0
 void OnInitProgress(HtmlContainer.HtmlContainer hc, int max)
 {
     mParentForm.Invoke(new Action(() => mParentForm.InitProgress(hc.Title, hc.UrlContainer.Url, max)));
 }