from html.parser import HTMLParser from urllib.request import urlopen class YouTube: y, z = {}, {} class parseprop(HTMLParser): def handle_starttag(self, tag, attrs): if tag != "meta" or [i for i in attrs if "itemprop" in i] == []: return global z for k, v in attrs: if k == "itemprop": if v not in ["name", "duration", "uploadDate", "channelId"]: return x = [v] elif k == "content": x += [v] z.update({x[0]: x[1]}) # print(x[0],"=",x[1]) def fmt_dur(dur): h, m, s = 0, 0, 0 m = dur[2:].split("M") s = int(m[1][:-1]) m = int(m[0]) if m >= 60: h = m // 60 m = round((m / 60 - h) * 60) return f"{h}h {m}m {s}s" else: return f"{m}m {s}s" def yt(self, url): url=url.rstrip("\x01") global y, z y, z = {}, {} p = self.parseprop() # url="https://www.youtube.com/watch?v=gyMpI8csWis" data = urlopen(url).read().decode() p.feed(data) z.update({"duration": self.fmt_dur(z["duration"])}) url = f"https://www.youtube.com/channel/{z['channelId']}" data = urlopen(url).read().decode() y, z = z, {} p.feed(data) y.update({"channelName": z["name"]}) y.pop("channelId") irc_string = f"[\x0303Youtube\x03] \x02{y['name']}\x02 ({y['duration']}) uploaded by \x1d{y['channelName']}\x1d on {y['uploadDate']}" ansi_string = f"[\x1b[32mYoutube\x1b[0m] \x1b[1m{y['name']}\x1b[0m ({y['duration']}) uploaded by \x1b[03m{y['channelName']}\x1b[0m on {y['uploadDate']}" print(ansi_string) return irc_string