mirror of
https://onedev.site.tesses.net/tytd2025
synced 2026-02-09 01:55:46 +00:00
First commit
This commit is contained in:
127
Tesses.YouTubeDownloader/src/Music.tcross
Normal file
127
Tesses.YouTubeDownloader/src/Music.tcross
Normal file
@@ -0,0 +1,127 @@
|
||||
class TYTD.Music
|
||||
{
|
||||
public getUserAgent() $"TYTDMusic/{this.getUserAgent.File.Version.Major}.{this.getUserAgent.File.Version.Minor}.{this.getUserAgent.File.Version.Patch} ( tesses@tesses.net )";
|
||||
public TYTD;
|
||||
public Music(tytd)
|
||||
{
|
||||
this.TYTD = tytd;
|
||||
TYTD.Storage.CreateDirectory(/"Album Arts");
|
||||
}
|
||||
|
||||
public GetArtists(query)
|
||||
{
|
||||
|
||||
var req = {
|
||||
RequestHeaders = [
|
||||
{
|
||||
Key = "User-Agent",
|
||||
Value = this.UserAgent
|
||||
}
|
||||
]
|
||||
};
|
||||
var resp = Net.Http.MakeRequest($"https://musicbrainz.org/ws/2/artist?query={Net.Http.UrlEncode(query)}&fmt=json",req);
|
||||
|
||||
if(resp.StatusCode >= 200 && resp.StatusCode <= 299)
|
||||
{
|
||||
var jo = Json.Decode(resp.ReadAsString());
|
||||
var items = [];
|
||||
each(var item : jo.artists)
|
||||
{
|
||||
items.Add({
|
||||
id = item.id,
|
||||
type = item.type,
|
||||
name = item.name
|
||||
});
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
public GetArtistsAlbums(artist_id)
|
||||
{
|
||||
var req = {
|
||||
RequestHeaders = [
|
||||
{
|
||||
Key = "User-Agent",
|
||||
Value = this.UserAgent
|
||||
}
|
||||
]
|
||||
};
|
||||
var resp = Net.Http.MakeRequest($"https://musicbrainz.org/ws/2/artist/{Net.Http.UrlPathEncode(artist_id)}?inc=artist-credits+releases&fmt=json",req);
|
||||
if(resp.StatusCode >= 200 && resp.StatusCode <= 299)
|
||||
{
|
||||
var jo = Json.Decode(resp.ReadAsString());
|
||||
var items = [];
|
||||
each(var item : jo.releases)
|
||||
{
|
||||
items.Add({
|
||||
id = item.id,
|
||||
packaging = item.packaging,
|
||||
title = item.title,
|
||||
date = item.date
|
||||
});
|
||||
}
|
||||
|
||||
return {items,name=jo.name};
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
public GetAlbumArts(album_id)
|
||||
{
|
||||
var req = {
|
||||
RequestHeaders = [
|
||||
{
|
||||
Key = "User-Agent",
|
||||
Value = UserAgent
|
||||
}
|
||||
],
|
||||
FollowRedirects=true
|
||||
};
|
||||
var url = $"https://coverartarchive.org/release/{Net.Http.UrlPathEncode(album_id)}";
|
||||
var resp = Net.Http.MakeRequest(url,req);
|
||||
if(resp.StatusCode >= 200 && resp.StatusCode <= 299)
|
||||
{
|
||||
return Json.Decode(resp.ReadAsString());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public GetAlbumArt(album_id, res)
|
||||
{
|
||||
var path = /"Album Arts"/$"{album_id}-{res}.jpg";
|
||||
if(TYTD.Storage.FileExists(path)) return FS.ReadAllBytes(TYTD.Storage,path);
|
||||
var arts = GetAlbumArts(album_id);
|
||||
if(arts == null) return null;
|
||||
|
||||
each(var img : arts.images)
|
||||
{
|
||||
if(img.front)
|
||||
{
|
||||
var url = res == "full" ? img.image : img.thumbnails.[res];
|
||||
var req = {
|
||||
RequestHeaders = [
|
||||
{
|
||||
Key = "User-Agent",
|
||||
Value = UserAgent
|
||||
}
|
||||
],
|
||||
FollowRedirects=true
|
||||
};
|
||||
var resp = Net.Http.MakeRequest(url.Replace("http://","https://"),req);
|
||||
if(resp.StatusCode >= 200 && resp.StatusCode <= 299)
|
||||
{
|
||||
var strm = TYTD.Storage.OpenFile(path,"wb");
|
||||
resp.CopyToStream(strm);
|
||||
strm.Close();
|
||||
return FS.ReadAllBytes(TYTD.Storage,path);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user