private static YoutubeModel LoadModel(string videoUrl) { var videoId = videoUrl.Replace("https://youtube.com/watch?v=", ""); var url = $"https://www.youtube.com/get_video_info?video_id={videoId}&eurl=https://youtube.googleapis.com/v/{videoId}"; return(YoutubeModel.FromJson(HttpHelper.UrlDecode(HttpHelper.ParseQueryString(HttpHelper.DownloadString(url))["player_response"]))); }
private static YoutubeModel LoadModel(string videoUrl) { var videoId = videoUrl.Replace("https://youtube.com/watch?v=", ""); var url = $"https://www.youtube.com/watch?v={videoId}&gl=US&hl=en&has_verified=1&bpctr=9999999999"; var pageSource = HttpHelper.DownloadString(url); var player_response = string.Empty; if (Regex.IsMatch(pageSource, @"[""\']status[""\']\s*:\s*[""\']LOGIN_REQUIRED")) { url = $"https://www.youtube.com/get_video_info?video_id={videoId}&eurl=https://youtube.googleapis.com/v/{videoId}"; pageSource = HttpHelper.DownloadString(url); player_response = HttpHelper.ParseQueryString(pageSource)["player_response"]; player_response = HttpHelper.UrlDecode(player_response); return(YoutubeModel.FromJson(player_response)); } var dataRegex = new Regex(@"ytplayer\.config\s*=\s*(\{.+?\});", RegexOptions.Multiline); var dataMatch = dataRegex.Match(pageSource); if (dataMatch.Success) { string extractedJson = dataMatch.Result("$1"); if (!extractedJson.Contains("raw_player_response:ytInitialPlayerResponse")) //https://www.youtube.com/watch?v=9Y7TRMISkGE { player_response = JObject.Parse(extractedJson)["args"]["player_response"].ToString(); return(YoutubeModel.FromJson(player_response)); } } dataRegex = new Regex(@"ytInitialPlayerResponse\s*=\s*({.+?})\s*;\s*(?:var\s+meta|</script|\n)", RegexOptions.Multiline); dataMatch = dataRegex.Match(pageSource); if (dataMatch.Success) { player_response = dataMatch.Result("$1"); return(YoutubeModel.FromJson(player_response)); } dataRegex = new Regex(@"ytInitialPlayerResponse\s*=\s*({.+?})\s*;", RegexOptions.Multiline); dataMatch = dataRegex.Match(pageSource); if (dataMatch.Success) { player_response = dataMatch.Result("$1"); return(YoutubeModel.FromJson(player_response)); } ThrowYoutubeParseException(new VideoNotAvailableException("Unable to extract video data"), videoUrl); return(null); }