public async Task <List <ServiceResult> > GetServiceResult(string url) { _c = new HttpClient(); var psi = new ProcessStartInfo() { FileName = @"youtube-dl.exe", Arguments = $"-i --no-warnings -J --no-playlist \"{url}\"", RedirectStandardOutput = true, UseShellExecute = false }; var ytDLProcess = Process.Start(psi); var ytDlJson = await ytDLProcess.StandardOutput.ReadToEndAsync(); ytDLProcess.Dispose(); var ytDlResult = JsonConvert.DeserializeObject <YTDL.Root>(ytDlJson); var bestAudio = ytDlResult.formats.OrderByDescending(x => x.abr).First(); var urls = new List <string>(); if (bestAudio.fragments?.Count() != 0 && bestAudio.fragments != null) { foreach (var fragment in bestAudio.fragments) { urls.Add($"{bestAudio.fragment_base_url}{fragment.path}"); } } else { urls.Add(bestAudio.url); } var ServiceResults = new List <ServiceResult>(); //Bilibili needs these set to allow downloading/access to the videofile _c.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"); _c.DefaultRequestHeaders.Add("Referer", url); ServiceResults.Add(new ServiceResult(Enums.ContentService.BiliBili, Enums.Playlist.No, _c, TimeSpan.FromSeconds(ytDlResult.duration), urls, url, TimeConversion.ParseYTDLDate(ytDlResult.upload_date), ytDlResult.uploader, "https://space.bilibili.com/" + ytDlResult.uploader_id, ytDlResult.title, ytDlResult.thumbnail)); return(ServiceResults); }
/// <summary> /// Get a ServiceResult from a URL /// </summary> /// <param name="url"></param> /// <returns></returns> public async Task <List <ServiceResult> > GetServiceResult(string url) { _c = new HttpClient(); var psi = new ProcessStartInfo() { FileName = @"youtube-dl.exe", Arguments = $"-i --no-warnings -J --no-playlist \"{url}\"", RedirectStandardOutput = true, UseShellExecute = false }; var ytDlProcess = Process.Start(psi); var ytDlJson = await ytDlProcess.StandardOutput.ReadToEndAsync(); ytDlProcess.Dispose(); var ytDlResult = JsonConvert.DeserializeObject <YTDL.Root>(ytDlJson); var bestAudio = ytDlResult.formats.OrderByDescending(x => x.abr).First(); var urls = new List <string>(); if (bestAudio.fragments?.Count() != 0 && bestAudio.fragments != null) { foreach (var fragment in bestAudio.fragments) { urls.Add($"{bestAudio.fragment_base_url}{fragment.path}"); } } else { urls.Add(bestAudio.url); } var serviceResults = new List <ServiceResult>(); serviceResults.Add(new ServiceResult(Enums.ContentService.Direct, Enums.Playlist.No, _c, TimeSpan.FromSeconds(ytDlResult.duration), urls, url, TimeConversion.ParseYTDLDate(ytDlResult.upload_date), ytDlResult.uploader, ytDlResult.uploader_url, ytDlResult.title, ytDlResult.thumbnail)); return(serviceResults); }
/// <summary> /// Get the ServiceResult from NND, Its slow, so it gets cached immediately /// </summary> /// <param name="url"></param> /// <returns></returns> public async Task <List <ServiceResult> > GetServiceResult(string url) { this.url = url; LoginTask = Task.Run(DoLogin); UriTask = Task.Run(GetDirectUri); await Task.WhenAll(LoginTask, UriTask); var serviceResult = new List <ServiceResult>(); var bestVids = ytDlResult.formats.OrderByDescending(x => x.abr); var bestVids2 = bestVids.Where(x => x.abr == bestVids.First().abr); var bestAudio = bestVids2.OrderBy(x => x.height).First(); var urls = new List <string>(); if (bestAudio.fragments?.Count() != 0 && bestAudio.fragments != null) { foreach (var fragments in bestAudio.fragments) { urls.Add($"{bestAudio.fragment_base_url}{fragments.path}"); } } else { urls.Add(bestAudio.url); } serviceResult.Add(new ServiceResult(ContentService.Youtube, Playlist.No, _c, TimeSpan.FromSeconds(ytDlResult.duration), urls, url, TimeConversion.ParseYTDLDate(ytDlResult.upload_date), ytDlResult.uploader, ytDlResult.uploader_url, ytDlResult.title, ytDlResult.thumbnail, true)); return(serviceResult); }