예제 #1
0
def search_on_amazon(asin, album, artist):
    '''
    Tries to locate the url of album by artis on amazon
    
    Returns '' if it can't be found
    '''
    from amazonproduct import API
    
    if not AMAZON_KEY or not AMAZON_SECRET or not AMAZON_ASSOCIATE_TAG:
        return ''

    api = API(AMAZON_KEY, AMAZON_SECRET, 'us')
    try:
        if asin:
            node = api.item_lookup(asin, AssociateTag=AMAZON_ASSOCIATE_TAG)
            for item in node.Items:
                attributes = item.Item.ItemAttributes
                if attributes.ProductGroup == 'Music':
                    url = item.Item.DetailPageURL
                    if url:
                        return url.text
        node = api.item_search('MP3Downloads', Keywords=album + ' ' + artist, AssociateTag=AMAZON_ASSOCIATE_TAG)
        for item in node.Items:
            attributes = item.Item.ItemAttributes
            if matching.match(artist, str(attributes.Creator)) \
                    and matching.match(album, str(attributes.Title)) \
                    and attributes.ProductGroup == 'Digital Music Album':
                url = item.Item.DetailPageURL
                if url:
                    return url.text
    except :
        pass
    return ''
예제 #2
0
def match_up_albums(artist, mb_artist, logger):
    '''Matches up the user albums by artist with the albums from musicbrainz'''
    mb_albums = MBAlbum.objects.filter(artist=mb_artist)
    for album in artist.album_set.all():
        if album.mb_id:
            continue
        for mb_album in mb_albums:
            if matching.match(album.name, mb_album.name):
                logger.debug('direct match album %s to mb album %s', album,
                             mb_album)
                album.mb_id = mb_album.mb_id
                album.save()
                break
        else:
            by_similarity = [(mba, matching.similarity(album.name, mba.name)) \
                                 for mba in mb_albums]
            by_similarity.sort(key=operator.itemgetter(1), reverse=True)
            if by_similarity:
                mb_album, similarity = by_similarity[0]
                if similarity > 0.8:
                    logger.info('picking similar: album %s, mb_album %s, similarity %s', album, mb_album, similarity)
                    album.mb_id = mb_album.mb_id
                    album.save()
                else:
                    logger.info('not close enough: album %s, mb_album %s, similarity %s', album, mb_album, similarity)
예제 #3
0
 def test_match(self):
     self.assertTrue(matching.match('ABC', 'abcd'))
     self.assertFalse(matching.match('abcd', 'ABC'))