コード例 #1
0
def get_file_details(urlObj):
    '''
	Function fetches information about media files.
	The output may be used as init parameters for a Main.Song object.
	
	@param urlObj: A metaUrl Object.
	@return url, filesize, SupportsHTTPRange, bitrate, title, artist, source, quality, videoid
	'''
    if urlObj.isVideo:
        SupportsHTTPRange = True

        title, artist = utils.parse_title_from_filename(urlObj.title)

        ID3TagsToEdit = {}
        ID3TagsToEdit['TIT2'] = TIT2(encoding=3, text=title)
        ID3TagsToEdit['TPE1'] = TPE1(encoding=3, text=artist)
        dummyMP3 = utils.makeDummyMP3(config.temp_dir)
        utils.setID3Tags(ID3TagsToEdit, dummyMP3)

        ID3Info = [
            config.itag_audio_bitrates[urlObj.itag.quality], title, artist,
            dummyMP3
        ]
    elif urlObj.source.lower() in ["soundcloud", 'bandcamp']:
        SupportsHTTPRange = True

        ID3Info = get_id3info(urlObj.url)
        if not ID3Info[1] and not ID3Info[
                2]:  # if there is no title and artist data in ID3
            title, artist = utils.parse_title_from_filename(urlObj.title)

            ID3TagsToEdit = {}
            ID3TagsToEdit['TIT2'] = TIT2(encoding=3, text=title)
            ID3TagsToEdit['TPE1'] = TPE1(encoding=3, text=artist)
            dummyMP3 = utils.makeDummyMP3(config.temp_dir)
            utils.setID3Tags(ID3TagsToEdit, dummyMP3)
            ID3Info = [ID3Info[0], title, artist, dummyMP3]
    else:
        SupportsHTTPRange = is_ServerSupportHTTPRange(urlObj.url)
        ID3Info = get_id3info(urlObj.url)

    filesize = get_filesize(urlObj.url)
    bitrate, title, artist, ID3File = ID3Info

    # if file didn't have id3 tags, or if the 'title' and 'artist' values were empty
    if not ID3File or (not title and not artist):
        fn = ".".join(urlObj.url.split('/')[-1].split('.')[:-1])
        title, artist = utils.parse_title_from_filename(fn)

        ID3TagsToEdit = {}
        ID3TagsToEdit['TIT2'] = TIT2(encoding=3, text=title)
        ID3TagsToEdit['TPE1'] = TPE1(encoding=3, text=artist)
        ID3File = utils.makeDummyMP3(config.temp_dir)
        utils.setID3Tags(ID3TagsToEdit, ID3File)

    return urlObj.url, filesize, SupportsHTTPRange, bitrate, title, artist, ID3File, \
      urlObj.source, urlObj.duration, urlObj.itag, urlObj.videoid, \
      urlObj.webpage_url, urlObj.view_count, urlObj.description
コード例 #2
0
ファイル: HTTPQuery.py プロジェクト: iTaybb/iQuality
def get_file_details(urlObj):
	'''
	Function fetches information about media files.
	The output may be used as init parameters for a Main.Song object.
	
	@param urlObj: A metaUrl Object.
	@return url, filesize, SupportsHTTPRange, bitrate, title, artist, source, quality, videoid
	'''
	if urlObj.isVideo:
		SupportsHTTPRange = True
		
		title, artist = utils.parse_title_from_filename(urlObj.title)
		
		ID3TagsToEdit = {}
		ID3TagsToEdit['TIT2'] = TIT2(encoding=3, text=title)
		ID3TagsToEdit['TPE1'] = TPE1(encoding=3, text=artist)
		dummyMP3 = utils.makeDummyMP3(config.temp_dir)
		utils.setID3Tags(ID3TagsToEdit, dummyMP3)
			
		ID3Info = [config.itag_audio_bitrates[urlObj.itag.quality], title, artist, dummyMP3]
	elif urlObj.source.lower() in ["soundcloud", 'bandcamp']:
		SupportsHTTPRange = True
		
		ID3Info = get_id3info(urlObj.url)
		if not ID3Info[1] and not ID3Info[2]: # if there is no title and artist data in ID3
			title, artist = utils.parse_title_from_filename(urlObj.title)
			
			ID3TagsToEdit = {}
			ID3TagsToEdit['TIT2'] = TIT2(encoding=3, text=title)
			ID3TagsToEdit['TPE1'] = TPE1(encoding=3, text=artist)
			dummyMP3 = utils.makeDummyMP3(config.temp_dir)
			utils.setID3Tags(ID3TagsToEdit, dummyMP3)
			ID3Info = [ID3Info[0], title, artist, dummyMP3]
	else:
		SupportsHTTPRange = is_ServerSupportHTTPRange(urlObj.url)
		ID3Info = get_id3info(urlObj.url)
		
	filesize = get_filesize(urlObj.url)
	bitrate, title, artist, ID3File = ID3Info
	
	# if file didn't have id3 tags, or if the 'title' and 'artist' values were empty
	if not ID3File or (not title and not artist):
		fn = ".".join(urlObj.url.split('/')[-1].split('.')[:-1])
		title, artist = utils.parse_title_from_filename(fn)
	
		ID3TagsToEdit = {}
		ID3TagsToEdit['TIT2'] = TIT2(encoding=3, text=title)
		ID3TagsToEdit['TPE1'] = TPE1(encoding=3, text=artist)
		ID3File = utils.makeDummyMP3(config.temp_dir)
		utils.setID3Tags(ID3TagsToEdit, ID3File)
		
	return urlObj.url, filesize, SupportsHTTPRange, bitrate, title, artist, ID3File, \
			urlObj.source, urlObj.duration, urlObj.itag, urlObj.videoid, \
			urlObj.webpage_url, urlObj.view_count, urlObj.description
コード例 #3
0
ファイル: ID3Window.py プロジェクト: shaharbukra/iQuality
    def __init__(self, songPath, id3_action="", parent=None):
        super(MainWin, self).__init__(parent)
        self.isValid = True

        self.path = songPath
        self.id3_action = id3_action if id3_action else config.id3_action
        self.changed_AlbumArt = False
        self.pix_path = ""
        self.albumArt_task = "nothing"
        '''
		albumArt_task may be 'nothing', 'add' and 'delete':
		'nothing': Do not touch the APIC tag.
		'add': creates an APIC tag with self.pix_path.
		'delete': deletes an APIC tag, if exists.
		'''
        self.lyricsList = []  # The lyrics list
        self.lyricsListIndex = -1

        # Will be enabled when the last value of lyricsList will be fetched
        # and the servers will return EOF.
        # Until then, the lyrics groupbox will look like:
        # Lyrics (4/7+) (showing lyrics num. 4 out of seven, and more are available but not fetched yet)
        # When that switch will be enabled, the plus sign will get disappeared.
        self.lyricsList_EOF = False

        # If value is 0, notfound errors won't be suppressed. Any other value will suppress all errors.
        self.suppress_notfound_errors = 0

        self.setWindowTitle(tr("ID3 Editor"))
        self.resize(650, 430)
        self.setWindowIcon(QtGui.QIcon(r'pics\id3edit.png'))
        self.empty_cdbox_path = r"pics\empty_cdbox_%s.png" % config.lang if os.path.exists(
            "pics\empty_cdbox_%s.png" %
            config.lang) else r"pics\empty_cdbox.png"

        log.debug("Initializing SetID3Window Widgets...")
        self.init_threads()
        self.init_id3data()
        if not self.isValid:
            return
        if not [
                x for x in self.easyID3Obj.values() if x[0]
        ]:  # If all values are actually blank, we shall attemp to parse it from the filename.
            fn = os.path.splitext(os.path.basename(self.path))[0]
            title, artist = utils.parse_title_from_filename(fn)
            self.easyID3Obj['title'] = [title]
            self.easyID3Obj['artist'] = [artist]

        self.init_widgets()

        if self.id3_action == 'ask_albumart':
            self.fetch_all(autochoose_albumart=False)
        if self.id3_action == 'ask':
            self.fetch_all(autochoose_albumart=True)
        if self.id3_action == 'noask':
            self.close_with_timeout()
            self.fetch_all(autochoose_albumart=True)
コード例 #4
0
ファイル: ID3Window.py プロジェクト: shaharbukra/iQuality
	def __init__(self, songPath, id3_action="", parent=None):
		super(MainWin, self).__init__(parent)
		self.isValid = True
		
		self.path = songPath
		self.id3_action = id3_action if id3_action else config.id3_action
		self.changed_AlbumArt = False
		self.pix_path = ""
		self.albumArt_task = "nothing"
		
		'''
		albumArt_task may be 'nothing', 'add' and 'delete':
		'nothing': Do not touch the APIC tag.
		'add': creates an APIC tag with self.pix_path.
		'delete': deletes an APIC tag, if exists.
		'''
		self.lyricsList = [] # The lyrics list
		self.lyricsListIndex = -1
		
		# Will be enabled when the last value of lyricsList will be fetched
		# and the servers will return EOF.
		# Until then, the lyrics groupbox will look like:
		# Lyrics (4/7+) (showing lyrics num. 4 out of seven, and more are available but not fetched yet)
		# When that switch will be enabled, the plus sign will get disappeared.
		self.lyricsList_EOF = False
		
		# If value is 0, notfound errors won't be suppressed. Any other value will suppress all errors.
		self.suppress_notfound_errors = 0
		
		self.setWindowTitle(tr("ID3 Editor"))
		self.resize(650, 430)
		self.setWindowIcon(QtGui.QIcon(r'pics\id3edit.png'))
		self.empty_cdbox_path = r"pics\empty_cdbox_%s.png" % config.lang if os.path.exists("pics\empty_cdbox_%s.png" % config.lang) else r"pics\empty_cdbox.png"
		
		log.debug("Initializing SetID3Window Widgets...")
		self.init_threads()
		self.init_id3data()
		if not self.isValid:
			return
		if not [x for x in self.easyID3Obj.values() if x[0]]: # If all values are actually blank, we shall attemp to parse it from the filename.
			fn = os.path.splitext(os.path.basename(self.path))[0]
			title, artist = utils.parse_title_from_filename(fn)
			self.easyID3Obj['title'] = [title]
			self.easyID3Obj['artist'] = [artist]
			
		self.init_widgets()
		
		if self.id3_action == 'ask_albumart':
			self.fetch_all(autochoose_albumart=False)
		if self.id3_action == 'ask':
			self.fetch_all(autochoose_albumart=True)
		if self.id3_action == 'noask':
			self.close_with_timeout()
			self.fetch_all(autochoose_albumart=True)
コード例 #5
0
ファイル: LyricsGrabber.py プロジェクト: tmr232/iQuality
def parse(song, artist):
	"Function searches the web for song lyrics. returns a generator."
	s = '%s - %s' % (artist.strip(), song.strip())
	
	if utils.isHebrew(song) or utils.isHebrew(artist):
		log.debug("Grabbing lyrics for %s from shironet.co.il..." % s)
		gen = parse_shironet(s)
		for lyrics in gen:
			yield lyrics

	else: # if english
		log.debug("Grabbing lyrics for %s from LyricsMode..." % song)
		gen = parse_LyricsMode(song, artist)
		for lyrics in gen:
			yield lyrics
		
		# lets try trim the ()'s or []'s
		_song = song
		_artist = artist
		
		song = utils.trim_between(_song)
		song = utils.trim_between(song, '[', ']')
		if song != _song:
			log.debug("Trimming %s --> %s" % (_song, song))
			
		artist = utils.trim_between(_artist)
		artist = utils.trim_between(artist, '[', ']')
		if artist != _artist:
			log.debug("Trimming %s --> %s" % (_artist, artist))
			
		'''
		The following situation may happen:
		>>> song = "Train - 50 Ways To Say Goodbye"
		>>> artist = "Train"
		'''
		x, y = utils.parse_title_from_filename(song)
		if artist:
			if artist.lower() == x.lower():
				log.debug("Trimming %s --> %s" % (song, y))
				song = y
			if artist.lower() == y.lower():
				log.debug("Trimming %s --> %s" % (song, x))
				song = x
		else:
			log.debug("Setting artist name from nothing to %s" % y)
			song, artist = x, y
		
		if artist != _artist or song != _song:
			s = '%s - %s' % (artist.strip(), song.strip())
			log.debug("Grabbing lyrics for %s from LyricsMode..." % song)
			gen = parse_LyricsMode(song, artist)
			for lyrics in gen:
				yield lyrics
							
		log.debug("Grabbing lyrics for %s from OnlyLyrics..." % song)
		try:
			gen = parse_onlylyrics(song, artist)
		except socket.error:
			return
		for lyrics in gen:
			yield lyrics
			
		if len(artist.split()) == 2:
			flipped_artist = " ".join(artist.split(' ')[::-1])
			log.debug("Grabbing lyrics for %s from OnlyLyrics (flipping last and first name)..." % song)
			try:
				gen = parse_onlylyrics(song, flipped_artist)
			except socket.error:
				return
			for lyrics in gen:
				yield lyrics
			
		log.debug("Grabbing lyrics for %s from ChartLyrics..." % song)
		try:
			gen = parse_ChartLyrics(song, artist)
		except socket.error:
			return
		for lyrics in gen:
			yield lyrics
			
	return
コード例 #6
0
def parse(song, artist):
    "Function searches the web for song lyrics. returns a generator."
    s = '%s - %s' % (artist.strip(), song.strip())

    if utils.isHebrew(song) or utils.isHebrew(artist):
        log.debug("Grabbing lyrics for %s from shironet.co.il..." % s)
        gen = parse_shironet(s)
        for lyrics in gen:
            yield lyrics

    else:  # if english
        log.debug("Grabbing lyrics for %s from LyricsMode..." % song)
        gen = parse_LyricsMode(song, artist)
        for lyrics in gen:
            yield lyrics

        # lets try trim the ()'s or []'s
        _song = song
        _artist = artist

        song = utils.trim_between(_song)
        song = utils.trim_between(song, '[', ']')
        if song != _song:
            log.debug("Trimming %s --> %s" % (_song, song))

        artist = utils.trim_between(_artist)
        artist = utils.trim_between(artist, '[', ']')
        if artist != _artist:
            log.debug("Trimming %s --> %s" % (_artist, artist))
        '''
		The following situation may happen:
		>>> song = "Train - 50 Ways To Say Goodbye"
		>>> artist = "Train"
		'''
        x, y = utils.parse_title_from_filename(song)
        if artist:
            if artist.lower() == x.lower():
                log.debug("Trimming %s --> %s" % (song, y))
                song = y
            if artist.lower() == y.lower():
                log.debug("Trimming %s --> %s" % (song, x))
                song = x
        else:
            log.debug("Setting artist name from nothing to %s" % y)
            song, artist = x, y

        if artist != _artist or song != _song:
            s = '%s - %s' % (artist.strip(), song.strip())
            log.debug("Grabbing lyrics for %s from LyricsMode..." % song)
            gen = parse_LyricsMode(song, artist)
            for lyrics in gen:
                yield lyrics

        log.debug("Grabbing lyrics for %s from OnlyLyrics..." % song)
        try:
            gen = parse_onlylyrics(song, artist)
        except socket.error:
            return
        for lyrics in gen:
            yield lyrics

        if len(artist.split()) == 2:
            flipped_artist = " ".join(artist.split(' ')[::-1])
            log.debug(
                "Grabbing lyrics for %s from OnlyLyrics (flipping last and first name)..."
                % song)
            try:
                gen = parse_onlylyrics(song, flipped_artist)
            except socket.error:
                return
            for lyrics in gen:
                yield lyrics

        log.debug("Grabbing lyrics for %s from ChartLyrics..." % song)
        try:
            gen = parse_ChartLyrics(song, artist)
        except socket.error:
            return
        for lyrics in gen:
            yield lyrics

    return