Delete ofdl dl.go
This commit is contained in:
parent
376dde3665
commit
c9e5e60bc5
225
ofdl dl.go
225
ofdl dl.go
|
|
@ -1,225 +0,0 @@
|
|||
private static async Task<string?> GetDRMMPDPSSH(string mpdUrl, string policy, string signature, string kvp)
|
||||
{
|
||||
try
|
||||
{
|
||||
HttpClient client = new HttpClient();
|
||||
var request = new HttpRequestMessage
|
||||
{
|
||||
RequestUri = new Uri(mpdUrl),
|
||||
Method = HttpMethod.Get,
|
||||
};
|
||||
request.Headers.Add("Accept", "application/dash+xml,video/vnd.mpeg.dash.mpd");
|
||||
request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36");
|
||||
request.Headers.Add("Cookie", $"CloudFront-Policy={policy}; CloudFront-Signature={signature}; CloudFront-Key-Pair-Id={kvp}");
|
||||
|
||||
var response = await client.SendAsync(request);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
string mpdContent = await response.Content.ReadAsStringAsync();
|
||||
XDocument mpdDoc = XDocument.Parse(mpdContent);
|
||||
XNamespace ns = "urn:mpeg:dash:schema:mpd:2011";
|
||||
var psshElement = mpdDoc.Descendants(ns + "PSSH").FirstOrDefault();
|
||||
|
||||
return psshElement?.Value;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error("Error getting PSSH: {0}", ex.Message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task<DateTime> GetDRMMPDLastModified(string mpdUrl, string policy, string signature, string kvp)
|
||||
{
|
||||
try
|
||||
{
|
||||
HttpClient client = new HttpClient();
|
||||
var request = new HttpRequestMessage
|
||||
{
|
||||
RequestUri = new Uri(mpdUrl),
|
||||
Method = HttpMethod.Head,
|
||||
};
|
||||
request.Headers.Add("Accept", "application/dash+xml,video/vnd.mpeg.dash.mpd");
|
||||
request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36");
|
||||
request.Headers.Add("Cookie", $"CloudFront-Policy={policy}; CloudFront-Signature={signature}; CloudFront-Key-Pair-Id={kvp}");
|
||||
|
||||
var response = await client.SendAsync(request);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
return response.Content.Headers.LastModified?.DateTime ?? DateTime.Now;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error("Error getting MPD last modified date: {0}", ex.Message);
|
||||
return DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
private static Dictionary<string, string> GetDynamicHeaders(string url, string queryParams)
|
||||
{
|
||||
var headers = new Dictionary<string, string>();
|
||||
try
|
||||
{
|
||||
headers = auth.GetDynamicHeaders(url, queryParams);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error("Error getting dynamic headers: {0}", ex.Message);
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
private static async Task<string> GetDecryptionKeyOFDL(Dictionary<string, string> drmHeaders, string licenseUrl, string pssh)
|
||||
{
|
||||
try
|
||||
{
|
||||
var client = new HttpClient();
|
||||
var request = new HttpRequestMessage(HttpMethod.Post, "https://ofdl.tools/wv")
|
||||
{
|
||||
Content = new FormUrlEncodedContent(new Dictionary<string, string>
|
||||
{
|
||||
{ "license_url", licenseUrl },
|
||||
{ "headers", JsonConvert.SerializeObject(drmHeaders) },
|
||||
{ "pssh", pssh },
|
||||
{ "build_identifier", "windows_software_widevinecdm_win_x86_64" },
|
||||
{ { "proxy", "" }
|
||||
})
|
||||
};
|
||||
|
||||
var response = await client.SendAsync(request);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
var jsonResponse = JObject.Parse(responseContent);
|
||||
return jsonResponse["keys"][0]["key"].ToString();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error("Error getting decryption key from OFDL: {0}", ex.Message);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task<string> GetDecryptionKeyCDM(Dictionary<string, string> drmHeaders, string licenseUrl, string pssh)
|
||||
{
|
||||
try
|
||||
{
|
||||
var client = new WidevineClient.Widevine.CDMClient();
|
||||
return await client.GetContentKey(licenseUrl, drmHeaders, pssh);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error("Error getting decryption key from CDM: {0}", ex.Message);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task<bool> DownloadPurchasedMessageDRMVideo(
|
||||
string policy,
|
||||
string signature,
|
||||
string kvp,
|
||||
string url,
|
||||
string decryptionKey,
|
||||
string folder,
|
||||
DateTime lastModified,
|
||||
long media_id,
|
||||
string api_type,
|
||||
ProgressTask task,
|
||||
string filenameFormat,
|
||||
Purchased.List? messageInfo,
|
||||
Medium? messageMedia,
|
||||
User? fromUser,
|
||||
Dictionary<string, int> users)
|
||||
{
|
||||
try
|
||||
{
|
||||
string filename = string.Empty;
|
||||
string customFileName = string.Empty;
|
||||
string path = string.Empty;
|
||||
|
||||
if (messageInfo != null && messageMedia != null && fromUser != null)
|
||||
{
|
||||
filename = await DownloadHelper.GenerateFilename(filenameFormat, "Messages", messageInfo, messageMedia, fromUser, users, api_type);
|
||||
customFileName = filename.Split('.')[0];
|
||||
path = Path.Combine(folder, filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
filename = $"{media_id}.mp4";
|
||||
path = Path.Combine(folder, filename);
|
||||
}
|
||||
|
||||
if (File.Exists(path) && new FileInfo(path).Length > 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var downloader = new DownloadHelper.DRMVideoDownloader();
|
||||
await downloader.DownloadDRMVideo(
|
||||
url: url,
|
||||
decryptionKey: decryptionKey,
|
||||
folder: folder,
|
||||
lastModified: lastModified,
|
||||
policy: policy,
|
||||
signature: signature,
|
||||
kvp: kvp,
|
||||
customFileName: customFileName,
|
||||
task: task);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error("Error downloading DRM video: {0}", ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task<bool> DownloadPurchasedMedia(
|
||||
string url,
|
||||
string folder,
|
||||
long media_id,
|
||||
string api_type,
|
||||
ProgressTask task,
|
||||
string filenameFormat,
|
||||
Purchased.List? messageInfo,
|
||||
Medium? messageMedia,
|
||||
User? fromUser,
|
||||
Dictionary<string, int> users)
|
||||
{
|
||||
try
|
||||
{
|
||||
string filename = string.Empty;
|
||||
string path = string.Empty;
|
||||
|
||||
if (messageInfo != null && messageMedia != null && fromUser != null)
|
||||
{
|
||||
filename = await DownloadHelper.GenerateFilename(filenameFormat, "Messages", messageInfo, messageMedia, fromUser, users, api_type);
|
||||
path = Path.Combine(folder, filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
filename = $"{media_id}.mp4";
|
||||
path = Path.Combine(folder, filename);
|
||||
}
|
||||
|
||||
if (File.Exists(path) && new FileInfo(path).Length > 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var downloader = new DownloadHelper.MediaDownloader();
|
||||
await downloader.DownloadMedia(
|
||||
url: url,
|
||||
folder: folder,
|
||||
filename: filename,
|
||||
task: task);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error("Error downloading media: {0}", ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue