def getAlbumDetails(album_mbid): ''' given an album mbid, returns a list of potential album_id matches. it will be in a { artist, id, name } dict because you still need to verify it belongs to the expected artist. ''' album_mbid_url = urllib.urlencode({'mbid' : album_mbid}) url = 'http://ws.audioscrobbler.com/2.0/?method=album.getinfo&' + album_mbid_url my_dom = genericQuery(url) if not my_dom: mylog.ERR('bad DOM for %s' % album_mbid_url) return [] album_nodes = my_dom.getElementsByTagName(XMLTAG.ALBUMNODE) album_strs = [] hits = 0 for album_node in album_nodes: if hits == globalz.MAX_POTENTIAL_ALBUM_MATCH: break hits += 1 album_info = {'artist' : '', 'id' : '', 'name' : ''} album_info['artist'] = findxml.safeChildGet(album_node, XMLTAG.ALBUMARTIST) album_info['id'] = findxml.safeChildGet(album_node, XMLTAG.ALBUMID) album_info['name'] = findxml.safeChildGet(album_node, XMLTAG.ALBUMNAME) album_info['rank'] = findxml.safeChildGet(album_node, XMLTAG.ALBUMRANK) mylog.DBG1(4, "getAlbumDetails: for album %s appending potential name %s" % (album_mbid, album_info.get('name'))) album_strs.append(album_info) del my_dom return album_strs
def importMP3s(mp3_list, file_name): ''' load an xml file into an MP3File list ''' tag_reader = findxml.XMLReader(xmlFile=file_name) mp3_nodes = tag_reader.getTheseNodes('mp3') tmp_sort = [] for node in mp3_nodes: orig_artist = findxml.safeChildGet(node, 'originalartist').strip() clean_artist = findxml.safeChildGet(node, 'cleanartist').strip() orig_track = findxml.safeChildGet(node, 'originaltrack').strip() clean_track = findxml.safeChildGet(node, 'cleantrack').strip() orig_album = findxml.safeChildGet(node, 'originalalbum').strip() clean_album = findxml.safeChildGet(node, 'cleanalbum').strip() orig_tracknum = findxml.safeChildGet(node, 'originaltracknum').strip() clean_tracknum = findxml.safeChildGet(node, 'cleantracknum').strip() path = findxml.safeChildGet(node, 'path').strip() artist = clean_artist if clean_artist else orig_artist track = clean_track if clean_track else orig_track album = clean_album if clean_album else orig_album tracknum = clean_tracknum if clean_tracknum else orig_tracknum mylog.INFO('orig_artist: \'%s\' clean_artist: \'%s\' track: %s album: %s tracknum: %s' % (orig_artist, clean_artist, track, album, tracknum)) orig_mp3 = Track(_artist=artist, _name=track, _album=album, _track_num=tracknum, _path=path) mp3_list.append(MP3File(orig_track=orig_mp3.copy(), my_path=path)) tag_reader.close()
def getArtistsAlbums(artist_str): ''' given an artist name, returns strings of popular albums with their MBIDs ''' artist_url = urllib.urlencode({'artist' : artist_str.encode('utf-8')}) url = unicode(u'http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums&' + artist_url).encode('utf-8') my_dom = genericQuery(url) if not my_dom: mylog.ERR('bad DOM for %s' % artist_str) return [] album_mbids = [] album_nodes = my_dom.getElementsByTagName(XMLTAG.ALBUMNODE) hits = 0 for album_node in album_nodes: if hits == globalz.MAX_ALBUM_MATCH: break hits += 1 mbid = findxml.safeChildGet(album_node, XMLTAG.ALBUMMBID) if mbid: mylog.DBG("getArtistsAlbums: for artist %s appending album mbid %s" % (artist_str, mbid)) album_mbids.append(mbid) del my_dom return album_mbids
def getAlbumTracks(album_id): ''' given an album number, returns the track listing for that album. album numbers are obtained from getAlbumDetails. ''' url = 'http://ws.audioscrobbler.com/2.0/?method=playlist.fetch&playlistURL=lastfm://playlist/album/' + album_id my_dom = genericQuery(url) if not my_dom: mylog.ERR('bad DOM for %s' % album_id) return [] tracks = [] track_root = my_dom.getElementsByTagName(XMLTAG.TRACKLIST) if track_root: track_nodes = track_root[0].getElementsByTagName(XMLTAG.TRACKNODE) track_num = 1 for track_node in track_nodes: track_str = findxml.safeChildGet(track_node, XMLTAG.TRACKNAME) mylog.DBG("getAlbumTracks: appending track %s number: %s" % (track_str, str(track_num))) tracks.append((track_str, track_num)) track_num += 1 del my_dom return tracks
def artistSearch(artist_str): ''' given an atrist name, returns likely name matches ''' artist_url = urllib.urlencode({'artist' : artist_str.encode('utf-8')}) url = 'http://ws.audioscrobbler.com/2.0/?method=artist.search&' + artist_url my_dom = genericQuery(url) if not my_dom: mylog.ERR('bad DOM for %s' % artist_str) return [] artist_nodes = my_dom.getElementsByTagName(XMLTAG.ARTIST) artist_names = [] for artist_node in artist_nodes: fixed_artist_str = findxml.safeChildGet(artist_node, XMLTAG.ARTISTNAME) if fixed_artist_str: artist_names.append(fixed_artist_str) del my_dom return artist_names