Example #1
0
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
Example #2
0
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()
Example #3
0
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
Example #4
0
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
Example #5
0
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