protected virtual bool ProcessOnePage(string url, IndexContent indexContent, ref PageInfo pi) { string content = string.Empty; Encoding encoding = null; string rooturl = FileDownloadUtil.GetRootUrl(HttpMainHost, CurrentUrl, url); int count = 0; bool res = false; while (count < Retry) { res = FileDownloadUtil.DownloadWebPage(rooturl, url, ref content, ref encoding); if (res) { break; } Logger.Instance.Error(string.Format("Download Page Failed! [{0}] = {1}", count, url)); count++; } if (!res) { Logger.Instance.Error(string.Format("Download Page Failed! [{0}]", url)); return(false); } else { pi = GetPageInfo(content, indexContent); return(true); } }
public BaseDownloadImagesText(string indexUri, string saveToRoot, string novelTitle, bool UpdateMode, int MaxPages, string httpMainHost, string httpImageHost) { novelTitle = FileDownloadUtil.GetInvalidPath(novelTitle); saveToRoot = FileDownloadUtil.GetInvalidPath(saveToRoot); mUpdateMode = UpdateMode; mNovelTitle = novelTitle; mIndexUri = FileDownloadUtil.GetCorrectCurrentUrl(indexUri); mSaveToRoot = string.Format("{0}\\{1}", saveToRoot, novelTitle); mSaveToImageRoot = string.Format("{0}\\Images", mSaveToRoot); mNovelRoot = mSaveToRoot; mMaxPages = MaxPages; htmlIndexTemplate = string.Format("{0}\\HTTPTemplateIndex.html", AppDomain.CurrentDomain.BaseDirectory); htmlPageTemplate = string.Format("{0}\\HTMLTemplatePages.html", AppDomain.CurrentDomain.BaseDirectory); novelJS = string.Format("{0}\\novel.js", AppDomain.CurrentDomain.BaseDirectory); HttpMainHost = httpMainHost; HttpImageHost = httpImageHost; CurrentUrl = FileDownloadUtil.GetCorrectCurrentUrl(FileDownloadUtil.CombindCorrectUrl(HttpMainHost, indexUri)); }
protected virtual bool ProcessIndex(ref List <IndexContent> indexList, ref Encoding encoding) { string content = string.Empty; int count = 0; bool res = false; while (count < Retry) { res = FileDownloadUtil.DownloadWebPage(HttpMainHost, mIndexUri, ref content, ref encoding); if (res) { break; } Logger.Instance.Error(string.Format("Download Page Failed! [{0}] = Index", count)); count++; } if (!res) { Logger.Instance.Error("Download Index Failed!"); return(false); } else { Logger.Instance.Info("Download Index OK!"); indexList = GetIndex(content); return(true); } }
private async Task DownloadFromRemoteUrlAsync() { var cachedFolder = ApplicationData.Current.TemporaryFolder; if (!string.IsNullOrEmpty(ExpectedFileName)) { var file = await cachedFolder.TryGetFileAsync(ExpectedFileName); if (file != null) { LocalPath = file.Path; await SetImageSourceAsync(file); return; } } else { ExpectedFileName = GenerateRandomFileName(); } using (var stream = await FileDownloadUtil.GetIRandomAccessStreamFromUrlAsync(this.RemoteUrl, CTSFactory.MakeCTS().Token)) { var file = await SaveStreamIntoFileAsync(stream.AsStream(), ExpectedFileName, cachedFolder); if (file != null) { LocalPath = file.Path; } stream.Seek(0); if (stream != null) { await SetImageSourceAsync(stream); } } }
protected virtual bool DownloadImages(PageInfo pi, bool overwrite) { try { if (!Directory.Exists(mSaveToImageRoot)) { Directory.CreateDirectory(mSaveToImageRoot); } int piCount = 0; int imgCount = 0; foreach (string image in pi.ImageList) { string FileName = image.Substring(image.LastIndexOf("/") + 1, (image.Length - image.LastIndexOf("/") - 1)); string saveToLoc = string.Format("{0}\\{1}", mSaveToImageRoot, FileName); if (File.Exists(saveToLoc) && overwrite) { Logger.Instance.InfoImportant("Over write mode, Delete: " + new FileInfo(saveToLoc).Name); File.Delete(saveToLoc); } else if (File.Exists(saveToLoc) && !overwrite) { Logger.Instance.InfoImportant("Update Mode, File Exists: " + new FileInfo(saveToLoc).Name); pi.DownloadedImageList.Add(FileName); continue; } if (FileDownloadUtil.DownloadFile(image, saveToLoc)) { Logger.Instance.Info(string.Format("Dwonload OK: {0}", image)); pi.DownloadedImageList.Add(FileName); imgCount++; } else { Logger.Instance.Info(string.Format("Dwonload Failed: {0}", image)); } piCount++; Logger.Instance.Info("Download Image For PI: " + piCount); Logger.Instance.Info("Download Image: " + imgCount); } return(true); } catch (Exception ex) { Logger.Instance.Error(ex.ToString()); return(false); } }
/// <summary> /// 下载6分钟内的弹幕,返回弹幕列表 /// </summary> /// <param name="avid">稿件avID</param> /// <param name="cid">视频CID</param> /// <param name="segmentIndex">分包,每6分钟一包</param> /// <returns></returns> public List <BiliDanmaku> GetDanmakuProto(long avid, long cid, int segmentIndex) { string url = $"https://api.bilibili.com/x/v2/dm/web/seg.so?type=1&oid={cid}&pid={avid}&segment_index={segmentIndex}"; string referer = "https://www.bilibili.com"; FileDownloadUtil fileDownload = new FileDownloadUtil(); fileDownload.Init(url, referer, Path.GetTempPath() + "downkyi/danmaku", $"{cid}-{segmentIndex}.proto", "DanmakuProtobuf"); fileDownload.Download(); var danmakuList = new List <BiliDanmaku>(); DmSegMobileReply danmakus; try { using (var input = File.OpenRead(Path.GetTempPath() + $"downkyi/danmaku/{cid}-{segmentIndex}.proto")) { danmakus = DmSegMobileReply.Parser.ParseFrom(input); if (danmakus == null || danmakus.Elems == null) { return(danmakuList); } foreach (var dm in danmakus.Elems) { var danmaku = new BiliDanmaku { Id = dm.Id, Progress = dm.Progress, Mode = dm.Mode, Fontsize = dm.Fontsize, Color = dm.Color, MidHash = dm.MidHash, Content = dm.Content, Ctime = dm.Ctime, Weight = dm.Weight, //Action = dm.Action, Pool = dm.Pool }; danmakuList.Add(danmaku); } } } catch (Exception e) { #if DEBUG Console.WriteLine("发生异常: {0}", e); #endif return(null); } return(danmakuList); }
void tbUrl_TextChanged(object sender, EventArgs e) { string format = FileDownloadUtil.GetUrlFromHost(this.tbUrl.Text); if (!format.Equals(this.tbUrl.Text)) { Logger.Instance.Info("Format Url"); this.tbUrl.Text = format; } else { ApplyUrl(); } }
private bool DownloadImages(List <PageInfo> pageInfoList, bool overwrite) { try { if (!Directory.Exists(mSaveToImageRoot)) { Directory.CreateDirectory(mSaveToImageRoot); } foreach (PageInfo pi in pageInfoList) { foreach (string image in pi.ImageList) { string FileName = image.Substring(image.LastIndexOf("/") + 1, (image.Length - image.LastIndexOf("/") - 1)); string saveToLoc = string.Format("{0}\\{1}", mSaveToImageRoot, FileName); if (File.Exists(saveToLoc) && overwrite) { File.Delete(saveToLoc); } else if (File.Exists(saveToLoc) && !overwrite) { pi.DownloadedImageList.Add(FileName); continue; } if (FileDownloadUtil.DownloadFile(image, saveToLoc)) { Logger.Instance.Info(string.Format("Dwonload OK: {0}", image)); pi.DownloadedImageList.Add(FileName); } else { Logger.Instance.Info(string.Format("Dwonload Failed: {0}", image)); } } } return(true); } catch (Exception ex) { Logger.Instance.Error(ex.ToString()); return(false); } }
private bool ProcessOnePage(string url, IndexContent indexContent, ref PageInfo pi) { string content = string.Empty; Encoding encoding = null; if (!FileDownloadUtil.DownloadWebPage(HttpMainHost, url, ref content, ref encoding)) { Logger.Instance.Error(string.Format("Download Page Failed! [{0}]", url)); return(false); } else { pi = GetPageInfo(content, indexContent); return(true); } }
private bool ProcessIndex(ref List <IndexContent> indexList, ref Encoding encoding) { string content = string.Empty; if (!FileDownloadUtil.DownloadWebPage(HttpMainHost, mIndexUri, ref content, ref encoding)) { Logger.Instance.Error("Download Index Failed!"); return(false); } else { Logger.Instance.Info("Download Index OK!"); indexList = GetIndex(content); return(true); } }
public async Task AddCustom(CommandContext ctx, [RemainingText, Description("Name of the command")] string customCommandName) { CustomAudioCommandModel custCom = CustomAudioCommandFile.Instance.GetAudioFileForCommand(customCommandName); if (custCom != null) { await ctx.RespondAsync("A command with that name already exists :^("); return; } if (await FileDownloadUtil.DownloadFileFromDiscordMessageAsync(ctx)) { DiscordAttachment attachment = ctx.Message.Attachments[0]; string customAudioPath = string.Format(@"AudioFiles\{0}", attachment.FileName); CustomAudioCommandFile.Instance.AddCustomCommand(customCommandName, customAudioPath); await ctx.RespondAsync(string.Format("Custom command ```{0}``` was added :^)", customCommandName)); } }
public async Task <StorageFile> DownloadImageAsync(string url, string desireName = "img.jpg") { if (CachedFiles.ContainsKey(url)) { return(await StorageFile.GetFileFromPathAsync(CachedFiles[url])); } using (var stream = await FileDownloadUtil.GetIRandomAccessStreamFromUrlAsync(url, CTSFactory.MakeCTS().Token)) { var newFile = await GetTempFolder().CreateFileAsync(desireName, CreationCollisionOption.GenerateUniqueName); var bytes = new byte[stream.AsStream().Length]; await stream.AsStream().ReadAsync(bytes, 0, (int)stream.AsStream().Length); await FileIO.WriteBytesAsync(newFile, bytes); CachedFiles.Add(url, newFile.Path); await SaveAsync(); return(newFile); } }
private void ApplyUrl() { this.LinkLabelToNovel.Text = DownloadConfig.Protocol + "://" + FileDownloadUtil.CombindCorrectUrl(this.CBHost.Text, tbUrl.Text); }
public void Start(string host, string url, string novelName, string maxPage, string updateMode) { try { IsRunning = true; StartTime = DateTime.Now; LogFile = DateTime.Now.ToString("yyyyMMdd_HHmmssfff") + ".txt"; novelName = FileDownloadUtil.GetInvalidPath(novelName); SaveTo = string.Format("{0}/Downloads", AppDomain.CurrentDomain.BaseDirectory); if (string.IsNullOrEmpty(novelName)) { mLogSaveToFileUrl = "Downloads/" + LogFile; } else { mLogSaveToFileUrl = "Downloads/" + novelName + "/" + LogFile; } mSaveToDirectory = SaveTo + System.IO.Path.DirectorySeparatorChar + novelName; SetLog(mSaveToDirectory); Url = url; Host = host; ProgressArgs arg = new ProgressArgs(); arg.Progress = ProgressEnum.Progressing; FireOnProgressChangedEvent(arg); if (string.IsNullOrEmpty(novelName)) { Logger.Instance.Error("Novel Name can't be empty"); EndTime = DateTime.Now; arg.Progress = ProgressEnum.FinishFailed; FireOnProgressChangedEvent(arg); return; } NovelName = novelName; if (!int.TryParse(maxPage, out MaxPages)) { MaxPages = 1000; Logger.Instance.Error("Use Default Max Pages 1000"); } UpdateMode = !updateMode.Equals("YES", StringComparison.OrdinalIgnoreCase); if (Host.TrimStart().TrimEnd().Equals("BIQUGE", StringComparison.OrdinalIgnoreCase) || Host.TrimStart().TrimEnd().Equals("BIQUGE.COM", StringComparison.OrdinalIgnoreCase)) { download = new BiqugeDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages); } else if (Host.TrimStart().TrimEnd().Equals("BIQUGE.CO", StringComparison.OrdinalIgnoreCase)) { download = new BiqugeCODownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages); } else if (Host.TrimStart().TrimEnd().Equals("DAYANWENXUE", StringComparison.OrdinalIgnoreCase) || Host.TrimStart().TrimEnd().Equals("DAYANWENXUE.COM", StringComparison.OrdinalIgnoreCase)) { download = new DayanwenxueDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages); } else if (Host.TrimStart().TrimEnd().Equals("XIAOSHUOM", StringComparison.OrdinalIgnoreCase) || Host.TrimStart().TrimEnd().Equals("XIAOSHUOM.COM", StringComparison.OrdinalIgnoreCase)) { download = new XiaoshuomDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages); } else if (Host.TrimStart().TrimEnd().Equals("SHUKEJU", StringComparison.OrdinalIgnoreCase) || Host.TrimStart().TrimEnd().Equals("SHUKEJU.COM", StringComparison.OrdinalIgnoreCase)) { download = new ShukejuDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages); } else if (Host.TrimStart().TrimEnd().Equals("WENXUELOU", StringComparison.OrdinalIgnoreCase) || Host.TrimStart().TrimEnd().Equals("WENXUELOU.COM", StringComparison.OrdinalIgnoreCase)) { download = new WenxuelouDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages); } else if (Host.TrimStart().TrimEnd().Equals("BIQUGE", StringComparison.OrdinalIgnoreCase) || Host.TrimStart().TrimEnd().Equals("BIQUGE.CC", StringComparison.OrdinalIgnoreCase)) { download = new BiqugeCCDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages); } else { Logger.Instance.Error("Can't find plug-in for this host"); EndTime = DateTime.Now; arg.Progress = ProgressEnum.FinishFailed; FireOnProgressChangedEvent(arg); return; } if (download != null) { download.CopyFiles(); download.OnProgressChanged += new ProgressChangeDelegate(download_OnProgressChanged); thread = new Thread(new ThreadStart(download.ProcessAllOneByOne)); thread.Start(); } } catch (Exception ex) { Logger.Instance.Error(ex.ToString()); ProgressArgs arg = new ProgressArgs(); arg.Progress = ProgressEnum.FinishFailed; FireOnProgressChangedEvent(arg); } finally { IsRunning = false; } }