diff options
Diffstat (limited to 'youtube.py')
-rwxr-xr-x | youtube.py | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/youtube.py b/youtube.py deleted file mode 100755 index 1e60546..0000000 --- a/youtube.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env python3 -from urllib.request import urlopen -from urllib.error import HTTPError -from urllib.parse import urlencode, urlparse, parse_qs -from json import loads as json_loads - - -class YouTube: - def __init__(self): - try: - YouTube.prefer_playlist = YouTube.prefer_playlist - except AttributeError: - YouTube.prefer_playlist = False - - def mesg(self, msg, t=None): - self.util.mesg(msg, t) - - def match_urls(self, str): - r = [ - i - for i in str.split() - if "https://youtu.be/" in i - or "https://www.youtube.com/watch?v=" in i - or "https://m.youtube.com/watch?v=" in i - or "https://youtube.com/watch?v=" in i - or "https://www.youtube.com/embed/" in i - or "https://www.youtube-nocookie.com/embed/" in i - or "https://music.youtube.com/watch?v=" in i - or "https://youtube.com/shorts/" in i - or "https://www.youtube.com/shorts/" in i - ] - r = list(dict.fromkeys(r)) - n = 0 - for i in r: - if not i.startswith("http"): - r.pop(n) - n += 1 - - return r - - def is_embed(self, *str): - if type(self) == type("a"): - str = self - else: - str = str[0] - return str.startswith("https://www.youtube.com/embed/") or str.startswith( - "https://www.youtube-nocookie.com/embed/" - ) - - def is_ytmusic(self, *str): - if type(self) == type("a"): - str = self - else: - str = str[0] - return str.startswith("https://music.youtube.com/watch?v=") - - def is_ytshorts(self, *str): - if type(self) == type("a"): - str = self - else: - str = str[0] - return str.startswith("https://youtube.com/shorts/") or str.startswith( - "https://www.youtube.com/shorts/" - ) - - def is_clip(self, *str): - if type(self) == type("a"): - str = self - else: - str = str[0] - return str.startswith("https://youtube.com/clip/") or str.startswith( - "https://www.youtube.com/clip/" - ) - - def yt(self, url): - irc_string = "[\x0304Youtube\x03] \x0307ERROR:\x0308 got no data from server! \x0315(check your URL for typos!)\x03" - ansi_string = "[\x1b[31mYoutube\x1b[0m] \x1b[33;2mERROR:\x1b[33;1m got no data from server! \x1b[37;2m(check your URL for typos!)\x1b[0m" - # self.util.mesg("dbg hello") - url = url.rstrip("\x01") - if self.is_embed(url): - videoId = url.split("/")[4] - url = f"https://www.youtube.com/watch?v={videoId}" - elif self.is_ytmusic(url): - for i in url.split("?")[1].split("&"): - if i[0:2] == "v=": - videoId = i[2:] - url = f"https://www.youtube.com/watch?v={videoId}" - elif self.is_ytshorts(url): - videoId = url.split("?")[0].split("/")[-1] - url = f"https://www.youtube.com/watch?v={videoId}" - url = urlparse(url) - qs = parse_qs(url.query) - try: - video_id = qs["v"][0] - except KeyError: - video_id = None - try: - playlist_id = qs["list"][0] - #ignore the "random mix" and "radio" lists - if playlist_id.startswith("RD"): - playlist_id = None - except KeyError: - playlist_id = None - if (self.prefer_playlist and playlist_id) or (playlist_id and not video_id): - url = url.scheme + "://" + url.netloc + "/playlist?list=" + playlist_id - else: - url = url.scheme + "://" + url.netloc + url.path + "?v=" + video_id - url = f"https://www.youtube.com/oembed?{urlencode([('url',url),('format','json')])}" - try: - # print(url, " and ", playlist_id) - data = urlopen(url).read().decode() - data = json_loads(data) - title = data["title"] - channelName = data["author_name"] - except HTTPError as e: - irc_string = f"[\x0304Youtube\x03] \x0307ERROR:\x0308 {e} \x0315\x03" - ansi_string = f"[\x1b[31mYoutube\x1b[0m] \x1b[33;2mERROR:\x1b[33;1m {e} \x1b[37;2m\x1b[0m" - print(ansi_string) - return irc_string, True - irc_string = ( - f"[\x0303Youtube\x03] \x02{title}\x02 uploaded by \x1d{channelName}\x1d" - ) - ansi_string = f"[\x1b[32mYoutube\x1b[0m] \x1b[1m{title}\x1b[0m uploaded by \x1b[03m{channelName}\x1b[0m" - print(ansi_string) - return irc_string, False - - -if __name__ == "__main__": - import sys - - # if url is a video that's part of a playlist, - # return playlist (True) or video (False, default)? - # YouTube.prefer_playlist=False - YouTube().yt(sys.argv[1]) - # YouTube.yt(YouTube, sys.argv[1]) |