Files
tytd2025/Tesses.YouTubeDownloader/src/ids.tcross
2026-02-28 06:32:39 -06:00

133 lines
4.3 KiB
Plaintext

func TYTD.GetVideoId(v)
{
func IsValidId(_v)
{
if(_v.Count != 11) return false;
each(var item : _v)
{
if(!(item.IsLetter() || item.IsDigit() || item == '-' || item == '_')) return false;
}
return true;
}
if(TypeOf(v) != "String") return null;
if(IsValidId(v)) return v;
each(var __re : ["youtube\\..+?/watch.*?v=(.*?)(?:&|/|$)","youtu\\.be/(.*?)(?:\\?|&|/|$)","youtube\\..+?/embed/(.*?)(?:\\?|&|/|$)","youtube\\..+?/shorts/(.*?)(?:\\?|&|/|$)","youtube\\..+?/live/(.*?)(?:\\?|&|/|$)"])
{
var __r = new Regex(__re);
var __s = __r.Search(v);
if(__s.Count == 2)
{
__r=__s[1].Text;
if(IsValidId(__r))
{
return __r;
}
}
}
return null;
}
func TYTD.GetPlaylistId(pid)
{
func IsValidId(v)
{
if(v.Count < 2) return false;
each(var item : v)
{
if(!(item.IsLetter() || item.IsDigit() || item == '-' || item == '_')) return false;
}
return true;
}
if(TypeOf(pid) != "String") return null;
if(IsValidId(pid)) return pid;
each(var __re : ["youtube\\..+?/playlist.*?list=(.*?)(?:&|/|$)","youtube\\..+?/watch.*?list=(.*?)(?:&|/|$)","youtu\\.be/.*?/.*?list=(.*?)(?:&|/|$)","youtube\\..+?/embed/.*?/.*?list=(.*?)(?:&|/|$)"])
{
var __r = new Regex(__re);
var __s = __r.Search(pid);
if(__s.Count == 2)
{
__r=__s[1].Text;
if(IsValidId(__r))
{
return __r;
}
}
}
return null;
}
func TYTD.GetChannelId(cid)
{
func IsValidId(v)
{
if(v.Count != 24) return false;
if(!v.StartsWith("UC")) return false;
each(var item : v)
{
if(!(item.IsLetter() || item.IsDigit() || item == '-' || item == '_')) return false;
}
return true;
}
if(TypeOf(cid) != "String") return null;
if(IsValidId(cid)) return cid;
each(var __re : ["youtube\\..+?/channel/(.*?)(?:\\?|&|/|$)"])
{
var __r = new Regex(__re);
var __s = __r.Search(cid);
if(__s.Count == 2)
{
__r=__s[1].Text;
if(IsValidId(__r))
{
return __r;
}
}
}
return null;
}
func TYTD.CreateYouTubeTempPlaylist(ids)
{
var url = "https://www.youtube.com/watch_videos?video_ids=";
var first=true;
each(var item : ids)
{
if(!first) url += $"{url},{Net.Http.UrlEncode(item)}";
else
url += Net.Http.UrlEncode(item);
first=false;
}
return url;
}
func TYTD.GetYouTubeTempPlaylistRedirect(url)
{
if(url.Contains("/watch_videos?") && url.Contains("video_ids="))
{
var queryPart = url.Split("?",true,2);
return $"/watch_videos?{queryPart[1]}";
}
return null;
}
func TYTD.GetYouTubeTempPlaylist(url)
{
if(url.Contains("/watch_videos?") && url.Contains("video_ids="))
{
var queryPart = url.Split("?",true,2);
if(queryPart.Length == 2)
{
var queryParms =queryPart[1].Split("&");
each(var item : queryParms)
{
const vals = item.Split("=",true,2);
if(vals.Length == 2 && vals[0] == "video_ids")
{
return Net.Http.UrlDecode(vals[1]).Split(",");
}
}
}
}
return null;
}