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); }
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); }
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); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public List <UrlContainer.UrlContainer> GetLinkList(HtmlContainer.HtmlContainer hc) { return(new List <UrlContainer.UrlContainer>()); }
void OnInitProgress(HtmlContainer.HtmlContainer hc, int max) { mParentForm.Invoke(new Action(() => mParentForm.InitProgress(hc.Title, hc.UrlContainer.Url, max))); }