def __on_get_youtube_id(self, uri, status, content, track, cancellable, methods): """ Get youtube id or run another method if not found @param uri as str @param status as bool @param content as bytes @param track as Track @param cancellable as Gio.Cancellable @param methods as [function] """ try: youtube_id = None if status: decode = json.loads(content.decode("utf-8")) dic = {} best = self.__BAD_SCORE for i in decode["items"]: score = get_page_score(i["snippet"]["title"], track.name, track.artists[0], track.album.name) if score == -1 or score == best: continue elif score < best: best = score dic[score] = i["id"]["videoId"] # Return url from first dic item if best != self.__BAD_SCORE: youtube_id = dic[best] except: Logger.warning("YouTubeHelper::__on_get_youtube_id(): %s", content) self.__emit_uri_loaded(youtube_id, track, cancellable, methods)
def __on_get_youtube_id_duckduck(self, uri, status, content, track, cancellable, methods): """ Get youtube id or run another method if not found @param uri as str @param status as bool @param content as bytes @param track as Track @param cancellable as Gio.Cancellable @param methods as [function] """ try: from bs4 import BeautifulSoup youtube_id = None html = content.decode("utf-8") soup = BeautifulSoup(html, "html.parser") ytems = [] for link in soup.findAll("a"): href = GLib.uri_unescape_string(link.get("href"), None) title = link.get_text() if href is None or title is None or\ href.find("youtube.com/watch?v") == -1: continue youtube_id = href.split("watch?v=")[1] ytems.append((youtube_id, title)) dic = {} best = self.__BAD_SCORE for (yid, title) in ytems: score = get_page_score(title, track.name, track.artists[0], track.album.name) if score == -1 or score == best: continue elif score < best: best = score dic[score] = yid # Return url from first dic item if best != self.__BAD_SCORE: youtube_id = dic[best] except Exception as e: print("$ sudo pip3 install beautifulsoup4") Logger.warning("YouTubeHelper::__get_youtube_id_duckduck(): %s", e) self.__emit_uri_loaded(youtube_id, track, cancellable, methods)