63 lines
2.1 KiB
C#
63 lines
2.1 KiB
C#
using DotNetTools.SharpGrabber;
|
|
using DotNetTools.SharpGrabber.Grabbed;
|
|
using System;
|
|
using System.IO;
|
|
using System.Net.Http;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace WebAPI.Logics
|
|
{
|
|
public class VideoDownloadLogic
|
|
{
|
|
public async void Download(string youtubeUrl, string filePath)
|
|
{
|
|
var grabber = GrabberBuilder.New()
|
|
.UseDefaultServices()
|
|
.AddYouTube()
|
|
.Build();
|
|
var result = await grabber.GrabAsync(new Uri(youtubeUrl));
|
|
|
|
var info = result.Resource<GrabbedInfo>();
|
|
Console.WriteLine("Time Length: {0}", info.Length);
|
|
var videos = result.Resources<GrabbedMedia>();
|
|
|
|
foreach (var video in videos)
|
|
{
|
|
if ("mp4" == video.Format.Extension)
|
|
{
|
|
if (video.Resolution == "1080p")
|
|
{
|
|
await DownloadMedia(video, result, $"{filePath}/{video.Title}.mp4");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
public async void DownloadWorship(string youtubeUrl)
|
|
{
|
|
await Task.Run(() =>
|
|
{
|
|
Download(youtubeUrl, ServerUtils.MapPath("WorshipVideos"));//ServerUtils.MapPath("Church/Test.mp4")
|
|
});
|
|
|
|
}
|
|
|
|
private static async Task<string> DownloadMedia(GrabbedMedia media, IGrabResult grabResult, string path)
|
|
{
|
|
HttpClient Client = new HttpClient();
|
|
Client.Timeout = TimeSpan.FromMinutes(30);
|
|
Console.WriteLine("Downloading {0}...", media.Title ?? media.FormatTitle ?? media.Resolution);
|
|
using var response = await Client.GetAsync(media.ResourceUri);
|
|
response.EnsureSuccessStatusCode();
|
|
using var downloadStream = await response.Content.ReadAsStreamAsync();
|
|
using var resourceStream = await grabResult.WrapStreamAsync(downloadStream);
|
|
|
|
using var fileStream = new FileStream(path, FileMode.Create);
|
|
await resourceStream.CopyToAsync(fileStream);
|
|
return path;
|
|
}
|
|
}
|
|
}
|
|
|