Пример #1
0
def getRelease(releaseid, include_artist_info=True):
    """
    Deep release search to get track info
    """
    with mb_lock:

        release = {}
        results = None

        try:
            if include_artist_info:
                results = musicbrainzngs.get_release_by_id(
                    releaseid, ["artists", "release-groups", "media", "recordings"]
                ).get("release")
            else:
                results = musicbrainzngs.get_release_by_id(releaseid, ["media", "recordings"]).get("release")
        except WebServiceError, e:
            logger.warn(
                'Attempt to retrieve information from MusicBrainz for release "%s" failed (%s)' % (releaseid, str(e))
            )
            time.sleep(5)

        if not results:
            return False

        release["title"] = unicode(results["title"])
        release["id"] = unicode(results["id"])
        release["asin"] = unicode(results["asin"]) if "asin" in results else None
        release["date"] = unicode(results["date"]) if "date" in results else None
        try:
            release["format"] = unicode(results["medium-list"][0]["format"])
        except:
            release["format"] = u"Unknown"

        try:
            release["country"] = unicode(results["country"])
        except:
            release["country"] = u"Unknown"

        if include_artist_info:

            if "release-group" in results:
                release["rgid"] = unicode(results["release-group"]["id"])
                release["rg_title"] = unicode(results["release-group"]["title"])
                try:
                    release["rg_type"] = unicode(results["release-group"]["type"])
                except KeyError:
                    release["rg_type"] = u"Unknown"
            else:
                logger.warn("Release " + releaseid + "had no ReleaseGroup associated")

            release["artist_name"] = unicode(results["artist-credit"][0]["artist"]["name"])
            release["artist_id"] = unicode(results["artist-credit"][0]["artist"]["id"])

        release["tracks"] = getTracksFromRelease(results)

        return release
Пример #2
0
def getRelease(releaseid, include_artist_info=True):
    """
    Deep release search to get track info
    """
    with mb_lock:
    
        release = {}
        results = None
        
        try:
            if include_artist_info:
                results = musicbrainzngs.get_release_by_id(releaseid,["artists","release-groups","media","recordings"]).get('release')
            else:
                results = musicbrainzngs.get_release_by_id(releaseid,["media","recordings"]).get('release')
        except WebServiceError, e:
            logger.warn('Attempt to retrieve information from MusicBrainz for release "%s" failed (%s)' % (releaseid, str(e)))
            time.sleep(5)    
        
        if not results:
            return False

        release['title'] = unicode(results['title'])
        release['id'] = unicode(results['id']) 
        release['asin'] = unicode(results['asin']) if 'asin' in results else None
        release['date'] = unicode(results['date']) if 'date' in results else None
        try:
            release['format'] = unicode(results['medium-list'][0]['format'])
        except:
            release['format'] = u'Unknown'
        
        try:
            release['country'] = unicode(results['country'])
        except:
            release['country'] = u'Unknown'
        

        if include_artist_info:
        
            if 'release-group' in results:
                release['rgid'] = unicode(results['release-group']['id'])
                release['rg_title'] = unicode(results['release-group']['title'])
                try:
                    release['rg_type'] = unicode(results['release-group']['type'])
                except KeyError:
                    release['rg_type'] = u'Unknown'
            else:
                logger.warn("Release " + releaseid + "had no ReleaseGroup associated")

            release['artist_name'] = unicode(results['artist-credit'][0]['artist']['name'])
            release['artist_id'] = unicode(results['artist-credit'][0]['artist']['id'])

        release['tracks'] = getTracksFromRelease(results)
        
        return release
Пример #3
0
def getRelease(releaseid, include_artist_info=True):
    """
    Deep release search to get track info
    """
    with mb_lock:
    
        release = {}
        results = None
        
        try:
            if include_artist_info:
                results = musicbrainzngs.get_release_by_id(releaseid,["artists","release-groups","media","recordings"]).get('release')
            else:
                results = musicbrainzngs.get_release_by_id(releaseid,["media","recordings"]).get('release')
        except WebServiceError, e:
            logger.warn('Attempt to retrieve information from MusicBrainz for release "%s" failed (%s)' % (releaseid, str(e)))
            time.sleep(5)    
        
        if not results:
            return False

        release['title'] = unicode(results['title'])
        release['id'] = unicode(results['id']) 
        release['asin'] = unicode(results['asin']) if 'asin' in results else None
        release['date'] = unicode(results['date']) if 'date' in results else None
        try:
            release['format'] = unicode(results['medium-list'][0]['format'])
        except:
            release['format'] = u'Unknown'
        
        try:
            release['country'] = unicode(results['country'])
        except:
            release['country'] = u'Unknown'
        

        if include_artist_info:
        
            if 'release-group' in results:
                release['rgid'] = unicode(results['release-group']['id'])
                release['rg_title'] = unicode(results['release-group']['title'])
                try:
                    release['rg_type'] = unicode(results['release-group']['type'])
                except KeyError:
                    release['rg_type'] = u'Unknown'
            else:
                logger.warn("Release " + releaseid + "had no ReleaseGroup associated")

            release['artist_name'] = unicode(results['artist-credit'][0]['artist']['name'])
            release['artist_id'] = unicode(results['artist-credit'][0]['artist']['id'])

        release['tracks'] = getTracksFromRelease(results)
        
        return release
Пример #4
0
def album_for_id(albumid):
    """Fetches an album by its MusicBrainz ID and returns an AlbumInfo
    object or None if the album is not found.
    """
    try:
        res = musicbrainzngs.get_release_by_id(albumid, RELEASE_INCLUDES)
    except musicbrainzngs.ResponseError:
        log.debug('Album ID match failed.')
        return None
    return album_info(res['release'])
Пример #5
0
def album_for_id(albumid):
    """Fetches an album by its MusicBrainz ID and returns an AlbumInfo
    object or None if the album is not found.
    """
    try:
        res = musicbrainzngs.get_release_by_id(albumid, RELEASE_INCLUDES)
    except musicbrainzngs.ResponseError:
        log.debug('Album ID match failed.')
        return None
    return album_info(res['release'])
Пример #6
0
def getRelease(releaseid):
    """
    Deep release search to get track info
    """
    with mb_lock:
    
        release = {}
        results = None
        
        q, sleepytime = startmb()
        
        try:
            results = musicbrainzngs.get_release_by_id(releaseid,["artists","release-groups","media","recordings"]).get('release')
        except WebServiceError, e:
            logger.warn('Attempt to retrieve information from MusicBrainz for release "%s" failed (%s)' % (releaseid, str(e)))
            time.sleep(5)    
        
        if not results:
            return False
        
        time.sleep(sleepytime)

        release['title'] = unicode(results['title'])
        release['id'] = unicode(results['id']) 
        release['asin'] = unicode(results['asin']) if 'asin' in results else None 
        release['date'] = unicode(results['date'])

        if 'release-group' in results:
            release['rgid'] = unicode(results['release-group']['id'])
            release['rg_title'] = unicode(results['release-group']['title'])
            release['rg_type'] = unicode(results['release-group']['type'])
        else:
            logger.warn("Release " + releaseid + "had no ReleaseGroup associated")

        release['artist_name'] = unicode(results['artist-credit'][0]['artist']['name'])
        release['artist_id'] = unicode(results['artist-credit'][0]['artist']['id'])
                

        totalTracks = 0
        tracks = []
        for medium in results['medium-list']:                
            for track in medium['track-list']:
                tracks.append({
                        'number':        totalTracks + 1,
                        'title':        unicode(track['recording']['title']),
                        'id':            unicode(track['recording']['id']),
                        'url':            u"http://musicbrainz.org/track/" + track['recording']['id'],
                        'duration':        int(track['length']) if 'length' in track else 0
                        })
                totalTracks += 1       

        release['tracks'] = tracks
        
        return release
Пример #7
0
def album_for_id(albumid):
    """Fetches an album by its MusicBrainz ID and returns an AlbumInfo
    object or None if the album is not found. May raise a
    MusicBrainzAPIError.
    """
    try:
        res = musicbrainzngs.get_release_by_id(albumid, RELEASE_INCLUDES)
    except musicbrainzngs.ResponseError:
        log.debug('Album ID match failed.')
        return None
    except musicbrainzngs.MusicBrainzError as exc:
        raise MusicBrainzAPIError(exc, 'get release by ID', albumid,
                                  traceback.format_exc())
    return album_info(res['release'])
Пример #8
0
def album_for_id(albumid):
    """Fetches an album by its MusicBrainz ID and returns an AlbumInfo
    object or None if the album is not found. May raise a
    MusicBrainzAPIError.
    """
    try:
        res = musicbrainzngs.get_release_by_id(albumid, RELEASE_INCLUDES)
    except musicbrainzngs.ResponseError:
        log.debug('Album ID match failed.')
        return None
    except musicbrainzngs.MusicBrainzError as exc:
        raise MusicBrainzAPIError(exc, 'get release by ID', albumid,
                                  traceback.format_exc())
    return album_info(res['release'])
Пример #9
0
def getReleaseGroup(rgid):
    """
    Returns a dictionary of the best stuff from a release group
    """
    with mb_lock:
    
        releaselist = []
        
        releaseGroup = None
        
        q, sleepytime = startmb()
        
        try:
            releaseGroup = musicbrainzngs.get_release_group_by_id(rgid,["artists","releases","media","discids",])['release-group']
        except WebServiceError, e:
            logger.warn('Attempt to retrieve information from MusicBrainz for release group "%s" failed (%s)' % (rgid, str(e)))
            time.sleep(5)
        
        if not releaseGroup:
            return False
        
            
        time.sleep(sleepytime)
        
        # I think for now we have to make separate queries for each release, in order
        # to get more detailed release info (ASIN, track count, etc.)
        for release in releaseGroup['release-list']:
            releaseResult = None
            
            try:
                releaseResult = musicbrainzngs.get_release_by_id(release['id'],["recordings","media"])['release']
            except WebServiceError, e:
                logger.warn('Attempt to retrieve release information for %s from MusicBrainz failed (%s)' % (releaseResult.title, str(e)))
                time.sleep(5) 

            if not releaseResult:
                continue               

            if releaseGroup['type'] == 'live' and releaseResult['status'] != 'Official':
                    logger.debug('%s is not an official live album. Skipping' % releaseResult.name)
                    continue

            time.sleep(sleepytime)

            formats = {
                '2xVinyl':            '2',
                'Vinyl':            '2',
                'CD':                '0',
                'Cassette':            '3',            
                '2xCD':                '1',
                'Digital Media':    '0'
                }
                
            countries = {
                'US':    '0',

               'GB':    '1',
                'JP':    '2',
                }
            try:
                format = int(formats[releaseResult['medium-list'][0]['format']])
            except:
                format = 3
                
            try:
                country = int(countries[releaseResult['country']])                
            except:
                country = 3
            totalTracks = 0
            tracks = []
            for medium in releaseResult['medium-list']:                
                for track in medium['track-list']:
                    tracks.append({
                        'number':        totalTracks + 1,
                        'title':        unicode(track['recording']['title']),
                        'id':            unicode(track['recording']['id']),
                        'url':            u"http://musicbrainz.org/track/" + track['recording']['id'],
                        'duration':        int(track['recording']['length'] if 'length' in track['recording'] else track['length'] if 'length' in track else 0)
                        })
                    totalTracks += 1
                
            release_dict = {
                'hasasin':        bool(releaseResult.get('asin')),
                'asin':            unicode(releaseResult.get('asin')) if 'asin' in releaseResult else None,
                'trackscount':    totalTracks,
                'releaseid':      unicode(releaseResult.get('id')),
                'releasedate':    unicode(releaseResult.get('date')) if 'date' in releaseResult else None,
                'format':        format,
                'country':        country
                }
            release_dict['tracks'] = tracks
            releaselist.append(release_dict)
Пример #10
0
def getRelease(releaseid, include_artist_info=True):
    """
    Deep release search to get track info
    """
    with mb_lock:

        release = {}
        results = None

        q, sleepytime = startmb()

        try:
            if include_artist_info:
                results = musicbrainzngs.get_release_by_id(
                    releaseid,
                    ["artists", "release-groups", "media", "recordings"
                     ]).get('release')
            else:
                results = musicbrainzngs.get_release_by_id(
                    releaseid, ["media", "recordings"]).get('release')
        except WebServiceError, e:
            logger.warn(
                'Attempt to retrieve information from MusicBrainz for release "%s" failed (%s)'
                % (releaseid, str(e)))
            time.sleep(5)

        if not results:
            return False

        time.sleep(sleepytime)

        release['title'] = unicode(results['title'])
        release['id'] = unicode(results['id'])
        release['asin'] = unicode(
            results['asin']) if 'asin' in results else None
        release['date'] = unicode(
            results['date']) if 'date' in results else None
        try:
            release['format'] = unicode(results['medium-list'][0]['format'])
        except:
            release['format'] = u'Unknown'

        try:
            release['country'] = unicode(results['country'])
        except:
            release['country'] = u'Unknown'

        if include_artist_info:

            if 'release-group' in results:
                release['rgid'] = unicode(results['release-group']['id'])
                release['rg_title'] = unicode(
                    results['release-group']['title'])
                release['rg_type'] = unicode(results['release-group']['type'])
            else:
                logger.warn("Release " + releaseid +
                            "had no ReleaseGroup associated")

            release['artist_name'] = unicode(
                results['artist-credit'][0]['artist']['name'])
            release['artist_id'] = unicode(
                results['artist-credit'][0]['artist']['id'])

        totalTracks = 1
        tracks = []
        for medium in results['medium-list']:
            for track in medium['track-list']:
                tracks.append({
                    'number':
                    totalTracks,
                    'title':
                    unicode(track['recording']['title']),
                    'id':
                    unicode(track['recording']['id']),
                    'url':
                    u"http://musicbrainz.org/track/" +
                    track['recording']['id'],
                    'duration':
                    int(track['length']) if 'length' in track else 0
                })
                totalTracks += 1

        release['tracks'] = tracks

        return release
Пример #11
0
def getReleaseGroup(rgid):
    """
    Returns a dictionary of the best stuff from a release group
    """
    with mb_lock:

        releaselist = []

        releaseGroup = None

        q, sleepytime = startmb()

        try:
            releaseGroup = musicbrainzngs.get_release_group_by_id(
                rgid, [
                    "artists",
                    "releases",
                    "media",
                    "discids",
                ])['release-group']
        except WebServiceError, e:
            logger.warn(
                'Attempt to retrieve information from MusicBrainz for release group "%s" failed (%s)'
                % (rgid, str(e)))
            time.sleep(5)

        if not releaseGroup:
            return False

        time.sleep(sleepytime)

        # I think for now we have to make separate queries for each release, in order
        # to get more detailed release info (ASIN, track count, etc.)
        for release in releaseGroup['release-list']:
            releaseResult = None

            try:
                releaseResult = musicbrainzngs.get_release_by_id(
                    release['id'], ["recordings", "media"])['release']
            except WebServiceError, e:
                logger.warn(
                    'Attempt to retrieve release information for %s from MusicBrainz failed (%s)'
                    % (releaseResult.title, str(e)))
                time.sleep(5)

            if not releaseResult:
                continue

            #skip releases that do not have any release date associated with them
            #if we don't do this the albums will get the release date "None" and will
            #automatically be set to wanted if "Automatically Mark Upcoming Albums as Wanted" is set
            #because None is not a valid date and will never be in the past so it is always upcoming
            if 'date' not in releaseResult:
                continue

            if releaseGroup['type'] == 'live' and releaseResult[
                    'status'] != 'Official':
                logger.debug('%s is not an official live album. Skipping' %
                             releaseResult.name)
                continue

            time.sleep(sleepytime)

            formats = {
                '2xVinyl': '2',
                'Vinyl': '2',
                'CD': '0',
                'Cassette': '3',
                '2xCD': '1',
                'Digital Media': '0'
            }

            countries = {
                'US': '0',
                'GB': '1',
                'JP': '2',
            }
            try:
                format = int(
                    formats[releaseResult['medium-list'][0]['format']])
            except:
                format = 3

            try:
                country = int(countries[releaseResult['country']])
            except:
                country = 3
            totalTracks = 0
            tracks = []
            for medium in releaseResult['medium-list']:
                for track in medium['track-list']:
                    tracks.append({
                        'number':
                        totalTracks + 1,
                        'title':
                        unicode(track['recording']['title']),
                        'id':
                        unicode(track['recording']['id']),
                        'url':
                        u"http://musicbrainz.org/track/" +
                        track['recording']['id'],
                        'duration':
                        int(track['recording']['length'] if 'length' in
                            track['recording'] else
                            track['length'] if 'length' in track else 0)
                    })
                    totalTracks += 1

            release_dict = {
                'hasasin':
                bool(releaseResult.get('asin')),
                'asin':
                unicode(releaseResult.get('asin'))
                if 'asin' in releaseResult else None,
                'trackscount':
                totalTracks,
                'releaseid':
                unicode(releaseResult.get('id')),
                'releasedate':
                unicode(releaseResult.get('date')),
                'format':
                format,
                'country':
                country
            }
            release_dict['tracks'] = tracks
            releaselist.append(release_dict)