reset ffmpeg-checker

This commit is contained in:
kepoorhampond 2017-09-18 19:58:37 -07:00
parent 13c71da9c4
commit d21ac18059

View file

@ -18,7 +18,7 @@ from spotipy.oauth2 import SpotifyClientCredentials
# Local utilities # Local utilities
from .utils import YdlUtils, ObjManip, Config from .utils import YdlUtils, ObjManip, Config, CaptchaCheat
from .metadata import Metadata from .metadata import Metadata
from .metadata import find_album_and_track, parse_genre from .metadata import find_album_and_track, parse_genre
@ -58,6 +58,9 @@ class Ripper:
client_credentials_manager = SpotifyClientCredentials(CLIENT_ID, client_credentials_manager = SpotifyClientCredentials(CLIENT_ID,
CLIENT_SECRET CLIENT_SECRET
# Stupid lint # Stupid lint
# and stupid
# long var
# names
) )
self.spotify = spotipy.Spotify( self.spotify = spotipy.Spotify(
@ -130,7 +133,7 @@ class Ripper:
return locations return locations
def find_yt_url(self, song=None, artist=None, additional_search=None): def find_yt_url(self, song=None, artist=None, additional_search=None, caught_by_google=False, first=False):
if additional_search is None: if additional_search is None:
additional_search = Config.parse_search_terms(self) additional_search = Config.parse_search_terms(self)
print(str(self.args["hook-text"].get("youtube"))) print(str(self.args["hook-text"].get("youtube")))
@ -150,22 +153,28 @@ init, or in method arguments.")
search_terms.encode('utf-8'))}) search_terms.encode('utf-8'))})
link = "http://www.youtube.com/results?" + query_string link = "http://www.youtube.com/results?" + query_string
if not caught_by_google:
html_content = urlopen(link).read() html_content = urlopen(link).read()
soup = BeautifulSoup(html_content, 'html.parser') # .prettify() soup = BeautifulSoup(html_content, 'html.parser')
else:
soup = BeautifulSoup(CaptchaCheat.cheat_it(link), 'html.parser')
# with open("index.html", "w") as f:
# f.write(soup.prettify().encode('utf-8'))
def find_link(link): def find_link(link):
try: try:
if "yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 yt-uix-\ if "yt-simple-endpoint style-scope ytd-video-renderer" in str(" ".join(link["class"])) or \
sessionlink spf-link" in str(" ".join(link["class"])): "yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 yt-uix-sessionlink spf-link " in str(" ".join(link["class"])):
if "&list=" not in link["href"]: if "&list=" not in link["href"]:
return link return link
except KeyError: except KeyError:
pass pass
results = list(filter(None, (map(find_link, soup.find_all("a"))))) results = list(filter(None, map(find_link, soup.find_all("a"))))
garbage_phrases = "cover album live clean rare version full full \ garbage_phrases = "cover album live clean rare version full full \
album".split(" ") album row at @ session".split(" ")
self.code = None self.code = None
counter = 0 counter = 0
@ -173,11 +182,14 @@ album".split(" ")
while self.code is None and counter <= 10: while self.code is None and counter <= 10:
counter += 1 counter += 1
for link in results: for link in results:
if ObjManip.blank_include(link["title"], song) and \ if first == True:
ObjManip.blank_include(link["title"], artist): self.code = link
break
if ObjManip.check_garbage_phrases(garbage_phrases, if ObjManip.check_garbage_phrases(garbage_phrases,
link["title"], song): link["title"], song):
continue continue
if ObjManip.blank_include(link["title"], song) and \
ObjManip.blank_include(link["title"], artist):
self.code = link self.code = link
break break
@ -193,15 +205,31 @@ album".split(" ")
break break
if self.code is None: if self.code is None:
song = ObjManip.limit_song_name(song) for link in results:
if ObjManip.check_garbage_phrases(garbage_phrases,
link["title"], song):
continue
if ObjManip.blank_include(link["title"], song):
self.code = link
break
if self.code is None: if self.code is None:
if additional_search == "lyrics": song = ObjManip.limit_song_name(song)
return self.find_yt_url(song, artist, "")
else:
self.code = results[0]
if self.code is None and first is not True:
if additional_search == "lyrics":
return self.find_yt_url(song, artist, additional_search, caught_by_google, first)
try:
return ("https://youtube.com" + self.code["href"], self.code["title"]) return ("https://youtube.com" + self.code["href"], self.code["title"])
except TypeError:
if first is not True:
return self.find_yt_url(song, artist, additional_search, caught_by_google, first=True)
# # Assuming Google catches you trying to search youtube for music ;)
# print("Trying to bypass google captcha.")
# return self.find_yt_url(song=song, artist=artist, additional_search=additional_search, caught_by_google=True)
def album(self, title, artist=None): # Alias for spotify_list("album", ..) def album(self, title, artist=None): # Alias for spotify_list("album", ..)
return self.spotify_list("album", title=title, artist=artist) return self.spotify_list("album", title=title, artist=artist)
@ -241,6 +269,23 @@ with init, or in method arguments.")
if len(list_of_lists) > 0: if len(list_of_lists) > 0:
the_list = None the_list = None
for list_ in list_of_lists: for list_ in list_of_lists:
if Config.parse_exact(self) == True:
if list_["name"].encode("utf-8") == title.encode("utf-8"):
if Config.parse_artist(self):
if list_["artists"][0]["name"].encode("utf-8") == \
Config.parse_artist(self).encode('utf-8'):
the_list = self.spotify.album(list_["uri"])
break
else:
if type == "album":
the_list = self.spotify.album(list_["uri"])
else:
the_list = self.spotify.user_playlist(
list_["owner"]["id"], list_["uri"])
the_list["artists"] = [{"name": username}]
break
else:
if ObjManip.blank_include(list_["name"], title): if ObjManip.blank_include(list_["name"], title):
if Config.parse_artist(self): if Config.parse_artist(self):
if ObjManip.blank_include(list_["artists"][0]["name"], if ObjManip.blank_include(list_["artists"][0]["name"],
@ -386,7 +431,6 @@ init, or in method arguments.")
print(self.args["hook-text"].get("song").format(song, artist)) print(self.args["hook-text"].get("song").format(song, artist))
file_name = data["file_prefix"] + ObjManip.blank(song, False) + ".mp3" file_name = data["file_prefix"] + ObjManip.blank(song, False) + ".mp3"
ydl_opts = { ydl_opts = {
'format': 'bestaudio/best', 'format': 'bestaudio/best',
'postprocessors': [{ 'postprocessors': [{
@ -398,9 +442,11 @@ init, or in method arguments.")
'progress_hooks': [YdlUtils.my_hook], 'progress_hooks': [YdlUtils.my_hook],
'output': "tmp_file", 'output': "tmp_file",
'prefer-ffmpeg': True, 'prefer-ffmpeg': True,
'ffmpeg_location': os.path.expanduser("~/.irs/bin/")
} }
if Config.check_ffmpeg() is False:
ydl_opts.update({'ffmpeg_location': os.path.expanduser("~/.irs/bin/")})
with youtube_dl.YoutubeDL(ydl_opts) as ydl: with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([video_url]) ydl.download([video_url])