private async static void DecryptingLink(VideoModels videoModel) { IDictionary<string, string> queries = HttpRequestHelper.AnalyseQueryString(videoModel.DownloadableLink); if (queries.ContainsKey(SignatureQuery)) { string encryptedSignature = queries[SignatureQuery]; string decrypted; try { decrypted = await GetDecipheredSignature(videoModel.HtmlPlayerVersion, encryptedSignature); } catch (Exception ex) { throw new YoutubeException("Could not decipher signature", ex); } videoModel.DownloadableLink = HttpRequestHelper.ReplacingQueryStringParameter(videoModel.DownloadableLink, SignatureQuery, decrypted); videoModel.RequiresDecryption = false; } }
internal VideoModels(VideoModels info) : this(info.FormatCode, info.VideoQuality, info.Resolution, info.Is3D, info.AudioModel, info.AudioBit, info.Type) { }
private static List<VideoModels> GetVideoModels(List<Information> extractionInfos, string videoTitle) { var downLoadInfos = new List<VideoModels>(); foreach (Information Info in extractionInfos) { string itag = HttpRequestHelper.AnalyseQueryString(Info.Uri.Query)["itag"]; int formatCode = int.Parse(itag); VideoModels info = VideoModels.Defaults.SingleOrDefault(videoModels => videoModels.FormatCode == formatCode); if (info != null) { info = new VideoModels(info) { DownloadableLink = Info.Uri.ToString(), Title = videoTitle, RequiresDecryption = Info.RequiresDecryption }; } else { info = new VideoModels(formatCode) { DownloadableLink = Info.Uri.ToString() }; } downLoadInfos.Add(info); } return downLoadInfos; }