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 ''
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)
def test_match(self): self.assertTrue(matching.match('ABC', 'abcd')) self.assertFalse(matching.match('abcd', 'ABC'))