示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }