def download_single(raw_song, number=None): """ Logic behind downloading a song. """ content, meta_tags = youtube_tools.match_video_and_metadata(raw_song) if content is None: log.debug("Found no matching video") return if const.args.download_only_metadata and meta_tags is None: log.info("Found no metadata. Skipping the download") return # "[number]. [artist] - [song]" if downloading from list # otherwise "[artist] - [song]" youtube_title = youtube_tools.get_youtube_title(content, number) log.info("{} ({})".format(youtube_title, content.watchv_url)) # generate file name of the song to download songname = content.title if meta_tags is not None: refined_songname = internals.format_string(const.args.file_format, meta_tags, slugification=True) log.debug('Refining songname from "{0}" to "{1}"'.format( songname, refined_songname)) if not refined_songname == " - ": songname = refined_songname else: if not const.args.no_metadata: log.warning("Could not find metadata") songname = internals.sanitize_title(songname) if const.args.dry_run: return if not check_exists(songname, raw_song, meta_tags): # deal with file formats containing slashes to non-existent directories songpath = os.path.join(const.args.folder, os.path.dirname(songname)) os.makedirs(songpath, exist_ok=True) input_song = songname + const.args.input_ext output_song = songname + const.args.output_ext if youtube_tools.download_song(input_song, content): print("") try: convert.song( input_song, output_song, const.args.folder, avconv=const.args.avconv, trim_silence=const.args.trim_silence, ) except FileNotFoundError: encoder = "avconv" if const.args.avconv else "ffmpeg" log.warning( "Could not find {0}, skipping conversion".format(encoder)) const.args.output_ext = const.args.input_ext output_song = songname + const.args.output_ext if not const.args.input_ext == const.args.output_ext: os.remove(os.path.join(const.args.folder, input_song)) if not const.args.no_metadata and meta_tags is not None: metadata.embed(os.path.join(const.args.folder, output_song), meta_tags) return True
def __init__(self, raw_song, number=None, count=None): self.raw_song = raw_song self.number = number self.count = count self.content, self.meta_tags = youtube_tools.match_video_and_metadata(raw_song) self.total_songs = int(self.meta_tags["total_tracks"])
def __init__(self, raw_song, number=None): self.raw_song = raw_song self.number = number self.content, self.meta_tags = youtube_tools.match_video_and_metadata( raw_song)
def match_metadata(self, track, metadata_type): _, metadata = youtube_tools.match_video_and_metadata(track) if metadata_type is None: assert metadata == metadata_type else: assert metadata["spotify_metadata"] == metadata_type