mirror of
https://onedev.site.tesses.net/tytd2025
synced 2026-06-01 18:05:32 +00:00
133 lines
4.3 KiB
Plaintext
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;
|
|
} |