def retrieve(self, albuminfo): try: artist = albuminfo['artist'] album = albuminfo['album'] set_status('Retrieving %s - %s' % (artist, album)) write_log('Retrieving %s - %s' % (artist, album)) except KeyError: set_status('Retrieving album.') write_log('Retrieving album.') write_log('Album URL - %s' % albuminfo['#albumurl']) url = albuminfo['#albumurl'] try: if self._useid: info, tracks, cover = retrieve_album(url, self._getcover) else: info, tracks, cover = retrieve_album(url, self._getcover) except urllib.error.URLError as e: write_log('Error: While retrieving album URL %s - %s' % (url, str(e))) raise RetrievalError(str(e)) if cover: info.update(cover) albuminfo = albuminfo.copy() albuminfo.update(info) return albuminfo, tracks
def search(self, artist, files=None): if files is not None and self.searchby: keywords = format_value(files[0], self.searchby) else: keywords = artist keywords = re.sub(r'\s+', self._separator, keywords) if self.search_source is None: album = self.retrieve(keywords) return [album] if album else [] url = self._search_base.replace('%s', keywords) write_log(translate('Mp3tag', 'Retrieving search page: %s') % url) set_status(translate('Mp3tag', 'Retrieving search page...')) if self.html is None: page = get_encoding(urlopen(url), True, 'utf8')[1] else: page = get_encoding(self.html, True, 'utf8')[1] write_log(translate('Mp3tag', 'Parsing search page.')) set_status(translate('Mp3tag', 'Parsing search page...')) infos = parse_search_page(self.indexformat, page, self.search_source, url) return [(info, []) for info in infos]
def submit(self, fns): if not self.__user_key: raise SubmissionError( translate("AcoustID", "Please enter AcoustID user key in settings.")) fns_len = len(fns) data = [] for i, fn in enumerate(fns): try: disp_fn = audioinfo.decode_fn(fn.filepath) except AttributeError: disp_fn = fn['__path'] write_log(FILE_MSG.arg(i + 1).arg(disp_fn)) try: fp = id_in_tag(fn) if fp: write_log(FOUND_ID_MSG) dur, fp = fp else: write_log(CALCULATE_MSG) dur, fp = fingerprint_file(fn.filepath) info = { 'duration': unicode(dur), 'fingerprint': unicode(fp), } info.update(convert_for_submit(fn)) data.append(info) if len(data) > 9 or i == fns_len - 1: msg = SUBMIT_MSG.arg(i - len(data) + 2) msg = msg.arg(i + 1).arg(fns_len) write_log(msg) set_status(msg) acoustid.submit(API_KEY, self.__user_key, data) data = [] except acoustid.FingerprintGenerationError, e: traceback.print_exc() write_log(FP_ERROR_MSG.arg(unicode(e))) continue except acoustid.WebServiceError, e: traceback.print_exc() set_status(SUBMIT_ERROR_MSG.arg(unicode(e))) write_log(SUBMIT_ERROR_MSG.arg(unicode(e))) break
def submit(self, fns): if not self.__user_key: raise SubmissionError(translate("AcoustID", "Please enter AcoustID user key in settings.")) fns_len = len(fns) data = [] for i, fn in enumerate(fns): try: disp_fn = audioinfo.decode_fn(fn.filepath) except AttributeError: disp_fn = fn['__path'] write_log(FILE_MSG.arg(i + 1).arg(disp_fn)) try: fp = id_in_tag(fn) if fp: write_log(FOUND_ID_MSG) dur, fp = fp else: write_log(CALCULATE_MSG) dur, fp = fingerprint_file(fn.filepath) info = { 'duration':unicode(dur), 'fingerprint': unicode(fp), } info.update(convert_for_submit(fn)) data.append(info) if len(data) > 9 or i == fns_len - 1: msg = SUBMIT_MSG.arg(i - len(data) + 2) msg = msg.arg(i + 1).arg(fns_len) write_log(msg) set_status(msg) acoustid.submit(API_KEY, self.__user_key, data) data = [] except acoustid.FingerprintGenerationError, e: traceback.print_exc() write_log(FP_ERROR_MSG.arg(unicode(e))) continue except acoustid.WebServiceError, e: traceback.print_exc() set_status(SUBMIT_ERROR_MSG.arg(unicode(e))) write_log(SUBMIT_ERROR_MSG.arg(unicode(e))) break
def search(self, artist, fns=None): tracks = [] albums = [] fns_len = len(fns) for i, fn in enumerate(fns): try: disp_fn = audioinfo.decode_fn(fn.filepath) except AttributeError: disp_fn = fn['__path'] write_log(disp_fn) try: fp = id_in_tag(fn) if fp: write_log(FOUND_ID_MSG) dur, fp = fp else: write_log(CALCULATE_MSG) dur, fp = (None, None) write_log(RETRIEVE_MSG.arg(i + 1).arg(fns_len)) set_status(RETRIEVE_MSG.arg(i + 1).arg(fns_len)) data, fp = match("gT8GJxhO", fn.filepath, fp, dur) write_log(translate('AcoustID', "Parsing Data")) info = parse_lookup_result(data, fp=fp) except acoustid.FingerprintGenerationError as e: write_log(FP_ERROR_MSG.arg(str(e))) continue except acoustid.WebServiceError as e: set_status(WEB_ERROR_MSG.arg(str(e))) write_log(WEB_ERROR_MSG.arg(str(e))) break if hasattr(info, 'items'): albums.append([{}]) info['#exact'] = fn tracks.append(info) elif info is not None: for album, track in info: if track and track['#score'] >= self.min_score: track['#exact'] = fn tracks.append(track) albums.append(album if album else [{}]) return starmap(retrieve_album_info, best_match(albums, tracks))
def retrieve(self, albuminfo): try: artist = albuminfo['artist'] album = albuminfo['album'] set_status('Retrieving %s - %s' % (artist, album)) write_log('Retrieving %s - %s' % (artist, album)) except KeyError: set_status('Retrieving album.') write_log('Retrieving album.') write_log('Album URL - %s' % albuminfo['#albumurl']) url = albuminfo['#albumurl'] try: if self._useid: info, tracks, cover = retrieve_album(url, self._getcover) else: info, tracks, cover = retrieve_album(url, self._getcover) except urllib2.URLError, e: write_log(u'Error: While retrieving album URL %s - %s' % (url, unicode(e))) raise RetrievalError(unicode(e))
def retrieve_album_info(album, tracks): if not album: return album, tracks msg = u'<b>%s - %s</b>' % tuple(map(escape_html, (album['artist'], album['album']))) msg = RETRIEVE_MB_MSG.arg(msg) write_log(msg) set_status(msg) info, new_tracks = retrieve_album(album['mbrainz_album_id']) for t in tracks: try: index = int(t['track']) except KeyError: for index, nt in enumerate(new_tracks): if nt['title'] == t['title']: break t.update(new_tracks[index]) new_tracks[index] = t return info, new_tracks
def retrieve_album_info(album, tracks): if not album: return album, tracks msg = u'<b>%s - %s</b>' % tuple( map(escape_html, (album['artist'], album['album']))) msg = RETRIEVE_MB_MSG.arg(msg) write_log(msg) set_status(msg) info, new_tracks = retrieve_album(album['mbrainz_album_id']) for t in tracks: try: index = int(t['track']) except KeyError: for index, nt in enumerate(new_tracks): if nt['title'] == t['title']: break t.update(new_tracks[index]) new_tracks[index] = t return info, new_tracks
def retrieve(self, info): if isinstance(info, str): text = info.replace(' ', self._separator) info = {} else: info = deepcopy(info) text = info['#url'] try: url = self.album_url % text except TypeError: url = self.album_url + text info['#url'] = url try: write_log(translate('Mp3tag', 'Retrieving album page: %s') % url) set_status(translate('Mp3tag', 'Retrieving album page...')) page = get_encoding(urlopen(url), True, 'utf8')[1] except: page = '' write_log(translate('Mp3tag', 'Parsing album page.')) set_status(translate('Mp3tag', 'Parsing album page...')) new_info, tracks = parse_album_page(page, self.album_source, url) info.update(dict((k, v) for k, v in new_info.items() if v)) if self._get_cover and COVER in info: cover_url = new_info[COVER] if isinstance(cover_url, str): info.update(retrieve_cover(cover_url)) else: info.update(list(map(retrieve_cover, cover_url))) if not tracks: tracks = None return info, tracks
def search(self, artist, fns=None): tracks = [] albums = [] fns_len = len(fns) for i, fn in enumerate(fns): try: disp_fn = audioinfo.decode_fn(fn.filepath) except AttributeError: disp_fn = fn['__path'] write_log(disp_fn) try: fp = id_in_tag(fn) if fp: write_log(FOUND_ID_MSG) dur, fp = fp else: write_log(CALCULATE_MSG) dur, fp = (None, None) write_log(RETRIEVE_MSG.arg(i + 1).arg(fns_len)) set_status(RETRIEVE_MSG.arg(i + 1).arg(fns_len)) data, fp = match("gT8GJxhO", fn.filepath, fp, dur) write_log(translate('AcoustID', "Parsing Data")) info = parse_lookup_result(data, fp=fp) except acoustid.FingerprintGenerationError, e: write_log(FP_ERROR_MSG.arg(unicode(e))) continue except acoustid.WebServiceError, e: set_status(WEB_ERROR_MSG.arg(unicode(e))) write_log(WEB_ERROR_MSG.arg(unicode(e))) break
def retrieve(self, info): if isinstance(info, basestring): text = info.replace(u' ', self._separator) info = {} else: info = deepcopy(info) text = info['#url'] try: url = self.album_url % text except TypeError: url = self.album_url + text info['#url'] = url try: write_log(translate('Mp3tag', u'Retrieving album page: %s') % url) set_status(translate('Mp3tag', u'Retrieving album page...')) page = get_encoding(urlopen(url), True, 'utf8')[1] except: page = u'' write_log(translate('Mp3tag', u'Parsing album page.')) set_status(translate('Mp3tag', u'Parsing album page...')) new_info, tracks = parse_album_page(page, self.album_source, url) info.update(dict((k,v) for k,v in new_info.iteritems() if v)) if self._get_cover and COVER in info: cover_url = new_info[COVER] if isinstance(cover_url, basestring): info.update(retrieve_cover(cover_url)) else: info.update(map(retrieve_cover, cover_url)) if not tracks: tracks = None return info, tracks
def search(self, artist, files=None): if files is not None and self.searchby: keywords = format_value(files[0], self.searchby) else: keywords = artist keywords = re.sub('\s+', self._separator, keywords) if self.search_source is None: album = self.retrieve(keywords) return [album] if album else [] url = self._search_base.replace(u'%s', keywords) write_log(translate('Mp3tag', u'Retrieving search page: %s') % url) set_status(translate('Mp3tag', u'Retrieving search page...')) if self.html is None: page = get_encoding(urlopen(url), True, 'utf8')[1] else: page = get_encoding(self.html, True, 'utf8')[1] write_log(translate('Mp3tag', u'Parsing search page.')) set_status(translate('Mp3tag', u'Parsing search page...')) infos = parse_search_page(self.indexformat, page, self.search_source, url) return [(info, []) for info in infos]