Esempio n. 1
0
 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)
Esempio n. 2
0
 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)