def main(): mb = musicbrainz.mb() mb.SetDepth(2) mb.SetDebug(1) args = [ '', # trmId '', # artistName '', # albumName '', # trackName '', # trackNum '', # duration '', # fileName '', # artistId '', # albumId '5e7d0d05-8601-43f7-a48e-9eb05a6ab445', # trackId ] print "%r" % args try: mb.QueryWithArgs(q.MBQ_FileInfoLookup, args) except musicbrainz.MusicBrainzError: return if mb.Select1(q.MBS_SelectLookupResult, 1): print "select worked"
def main(): mb = musicbrainz.mb() mb.SetDepth(6) mb.QueryWithArgs(q.MBQ_GetTrackByTRMId, [sys.argv[1]]) if DEBUG: print mb.GetResultRDF().encode('latin-1') # Check to see how many items were returned from the server numTracks = mb.GetResultInt(q.MBE_GetNumTracks) if numTracks < 1: print "No tracks found." print "Found %d track(s)." % numTracks for ii in range(1, numTracks+1): # Start at the top of the query and work our way down mb.Select(q.MBS_Rewind) # Select the ith artist mb.Select1(q.MBS_SelectTrack, ii) # Extract the artist name from the ith track print " Artist: %r" % mb.GetResultData(q.MBE_TrackGetArtistName) # Extract the track name from the ith track print " Title: %r" % mb.GetResultData(q.MBE_TrackGetTrackName) # Extract the track name from the ith track print " Duration: %r" % mb.GetResultInt(q.MBE_TrackGetTrackDuration) # Extract the artist id from the ith track temp = mb.GetResultData(q.MBE_TrackGetArtistId) print " ArtistId: %r" % mb.GetIDFromURL(temp) # Extract the number of albums numAlbums = mb.GetResultInt(q.MBE_GetNumAlbums) print "Num Albums: %r" % numAlbums for jj in range(1, numAlbums+1): # Select the jth album in the album list mb.Select1(q.MBS_SelectAlbum, jj) # Extract the album name print " Album: %r" % mb.GetResultData(q.MBE_AlbumGetAlbumName), temp = mb.GetResultData(q.MBE_AlbumGetAlbumId) print " (%s)" % mb.GetIDFromURL(temp), # How many tracks on this cd print "has %s tracks" % mb.GetResultInt(q.MBE_AlbumGetNumTracks) # Back up one level and go back to the artist level mb.Select(q.MBS_Back) print ""
def testException1(self): mb = musicbrainz.mb() try: mb.Query('monkey') except musicbrainz.MusicBrainzError: pass else: fail("expected a musicbrainz.MusicBrainzError")
def main(): mb = musicbrainz.mb() mb.SetDepth(6) mb.QueryWithArgs(q.MBQ_GetTrackByTRMId, [sys.argv[1]]) print mb.GetResultRDF().encode('latin-1') # Check to see how many items were returned from the server numTracks = mb.GetResultInt(q.MBE_GetNumTracks) if numTracks < 1: print "No tracks found." print "Found %d track(s)." % numTracks for ii in range(1, numTracks + 1): # Start at the top of the query and work our way down mb.Select(q.MBS_Rewind) # Select the ith artist mb.Select1(q.MBS_SelectTrack, ii) # Extract the artist name from the ith track print " Artist: %r" % mb.GetResultData(q.MBE_TrackGetArtistName) # Extract the track name from the ith track print " Title: %r" % mb.GetResultData(q.MBE_TrackGetTrackName) # Extract the track name from the ith track print " Duration: %r" % mb.GetResultInt(q.MBE_TrackGetTrackDuration) # Extract the artist id from the ith track temp = mb.GetResultData(q.MBE_TrackGetArtistId) print " ArtistId: %r" % mb.GetIDFromURL(temp) # Extract the number of albums numAlbums = mb.GetResultInt(q.MBE_GetNumAlbums) print "Num Albums: %r" % numAlbums for jj in range(1, numAlbums + 1): # Select the jth album in the album list mb.Select1(q.MBS_SelectAlbum, jj) # Extract the album name print " Album: %r" % mb.GetResultData(q.MBE_AlbumGetAlbumName), temp = mb.GetResultData(q.MBE_AlbumGetAlbumId) print " (%s)" % mb.GetIDFromURL(temp), # How many tracks on this cd print "has %s tracks" % mb.GetResultInt(q.MBE_AlbumGetNumTracks) # Back up one level and go back to the artist level mb.Select(q.MBS_Back) print ""
def main(artistName): mb = musicbrainz.mb() mb.SetServer('musicbrainz.org', 80) mb.SetDepth(4) ret = mb.QueryWithArgs(q.MBQ_FindArtistByName, artistName) if not ret: error = mb.GetQueryError() print "Query failed: %s" % error # Check to see how many items were returned from the server numArtists = mb.GetResultInt(q.MBE_GetNumArtists) if numArtists < 1: print "No artists found." print "Found %d artists." % numArtists for ii in range(1, numArtists+1): # Start at the top of the query and work our way down mb.Select(q.MBS_Rewind) # Select the ith artist mb.Select1(q.MBS_SelectArtist, ii) # Extract the artist name from the ith track data = mb.GetResultData(q.MBE_ArtistGetArtistName) print " Artist: %r" % data # Extract the artist id from the ith track data = mb.GetResultData(q.MBE_ArtistGetArtistId) temp = mb.GetIDFromURL(data) print " ArtistId: '%s'" % temp # Extract the number of albums numAlbums = mb.GetResultInt(q.MBE_GetNumAlbums) print "Num Albums: %d" % numAlbums for jj in range(1, numAlbums+1): # Select the jth album in the album list mb.Select1(q.MBS_SelectAlbum, jj) # Extract the album name data = mb.GetResultData(q.MBE_AlbumGetAlbumName) print " Album: %r" % data, data = mb.GetResultData(q.MBE_AlbumGetAlbumId) temp = mb.GetIDFromURL(data) print " (%s)" % temp # Back up one level and go back to the artist level mb.Select(q.MBS_Back) print ""
def get_info(trm, info): """Get metainfo from musicbrainz. Gets metainformation from musicbrainz about a song with the given acoustic fingerprint. Parameters: trm - A musicbrainz acoustic id info - Dictionary with values from tag Returns: (matches, model) where 'matches' is the number of matches musicbrainz returned, and 'model' is a Redland RDF model of the returned data. """ print "TRM is", str(trm) # Build query m = musicbrainz.mb() # TODO: Fill me in #m.SetServer("www.musicbrainz.org") m.SetDepth(2) m.SetDebug(10) artistname = info.get('artist', '__NULL__') albumname = info.get('album', '__NULL__') trackname = info.get('title', '__NULL__') tracknr = info.get('tracknr', '__NULL__') duration = "__NULL__" m.QueryWithArgs(musicbrainz.MBQ_TrackInfoFromTRMId, [trm, artistname, albumname, trackname, tracknr, duration]) # Check to see how many items were returned from the server numTracks = m.GetResultInt(musicbrainz.MBE_GetNumTracks) matched_tracks = m.GetResultInt(musicbrainz.MBE_GetNumTracks) # Only update if we get a single match if matched_tracks == 1: querymodel = RDF.Model() rdf = m.GetResultRDF() parser = RDF.Parser(mime_type="application/rdf+xml") enc = codecs.getencoder("latin_1") parser.parse_string_into_model( querymodel, rdf, "http://example.com/" + enc(trm)[0]) else: querymodel = None return matched_tracks, querymodel
def main(): mb = musicbrainz.mb() mb.Query(q.MBQ_GetCDTOC) first = mb.GetResultInt(q.MBE_TOCGetFirstTrack) last = mb.GetResultInt(q.MBE_TOCGetLastTrack) for ii in xrange(first, last + 2): sectors = mb.GetResultInt1(q.MBE_TOCGetTrackNumSectors, ii) offset = mb.GetResultInt1(q.MBE_TOCGetTrackSectorOffset, ii) sec = sectors / 75 dura = "%d:%02d" % divmod(sec, 60) print dura
def main(): mb = musicbrainz.mb() mb.SetDepth(2) mb.SetDebug(1) mb.QueryWithArgs(q.MBQ_FindAlbumByName, [u'1']) print mb.GetResultRDF() print "no. of albums:", mb.GetResultInt(q.MBE_GetNumAlbums) mb.Select1(q.MBS_SelectAlbum, 1) for ii in range(1, mb.GetResultInt(q.MBE_AlbumGetNumTracks) + 1): name = mb.GetResultData1(q.MBE_AlbumGetTrackName, ii) dura = mb.GetResultData1(q.MBE_AlbumGetTrackDuration, ii) track = mb.GetResultData1(q.MBE_AlbumGetTrackNum, ii) print "track: %s %s %r" % (dura, track, name)
def main(): artist = "Violent Femmes track = "Country Death Song" mb = musicbrainz.mb() mb.SetDepth(2) mb.SetDebug(1) artistlist = [] albumlist = [] mb.QueryWithArgs(q.MBQ_FindArtistByName, [artist]) print mb.GetResultRDF() numArtists = mb.GetResultInt(q.MBE_GetNumArtists) if numArtists < 1: print "No artists found." for ii in range(1, numArtists+1): mb.Select(q.MBS_Rewind) mb.Select1(q.MBS_SelectArtist, ii) artistlist.append(mb.GetResultData(q.MBE_ArtistGetArtistName)) print artistlist artist = difflib.get_close_matches(artist, artistlist, 1)[0] print artist """ mb.QueryWithArgs(q.MBQ_FindAlbumByName, [artist, album]) print mb.GetResultRDF() numAlbums = mb.GetResultInt(q.MBE_GetNumAlbums) if numAlbums < 1: print "No albums found." for ii in range(1, numAlbums+1): mb.Select(q.MBS_Rewind) mb.Select1(q.MBS_SelectAlbum, ii) albumlist.append(mb.GetResultData(q.MBE_AlbumGetAlbumName)) album = difflib.get_close_matches(album, albumlist, 1)[0] """ mb.QueryWithArgs(q.MBQ_FindTrackByName, [artist, '', track]) print mb.GetResultRDF()
def main(): mb = musicbrainz.mb() mb.SetDepth(2) while 1: print "Insert CD and hit enter..." choice = sys.stdin.readline().strip() mb.Query(q.MBQ_GetCDTOC) cdid = mb.GetResultData(q.MBE_TOCGetCDIndexId) print "querying musicbrainz.org to see if this cd is on there..." mb.QueryWithArgs(q.MBQ_GetCDInfoFromCDIndexId, [cdid]) if mb.GetResultInt(q.MBE_GetNumAlbums) == 1: print "Yes and here's the info:" mb.Select1(q.MBS_SelectAlbum, 1) album = mb.GetResultData(q.MBE_AlbumGetAlbumName) artist = mb.GetResultData1(q.MBE_AlbumGetArtistName, 1) print "\t%s / %s" % (artist, album) for ii in range(1, mb.GetResultInt(q.MBE_AlbumGetNumTracks) + 1): name = mb.GetResultData1(q.MBE_AlbumGetTrackName, ii) dura = mb.GetResultInt1(q.MBE_AlbumGetTrackDuration, ii) track = mb.GetResultInt1(q.MBE_AlbumGetTrackNum, ii) dura = "%d:%02d" % divmod(int(dura / 1000), 60) print "\t%02d - %s (%s)" % (track, name, dura) os.system('eject') print "Ejecting cd..." continue url = mb.GetWebSubmitURL() if url: print "opening web browser to '%s'..." % url webbrowser.open_new(url) else: print "Couldn't get cdid... maybe there's no cd in drive?"
def main(): mb = musicbrainz.mb() print mb.GetWebSubmitURL()
def main(): device = '/dev/cdrom' optlist, args = getopt.getopt(sys.argv[1:], 'd:', ['device=']) for o, a in optlist: if o in ("-d", "--device"): device = a if not os.path.isfile('cd2trm.ini'): writeDefaultConfig() raise SystemExit, "Fill out your username/password in 'cd2trm.ini'" cp = ConfigParser.ConfigParser() cp.read('cd2trm.ini') mb = musicbrainz.mb() mb.SetServer(cp.get('cd2trm', 'server'), 80) mb.SetDepth(2) mb.SetDevice(device) # mb.SetDebug(1) auth(mb, cp) while 1: trackIds = None while not trackIds: trackIds = getCDInfo(mb) queryItems = [] for ii in xrange(len(trackIds)): ii = ii + 1 print "Ripping track %d of %d..." % (ii, len(trackIds)) tempfilename = 'temp%s-%d.wav' % (device.replace('/', '-'), ii) #retval = os.system('cdparanoia --abort-on-skip --output-wav %d temp%d.wav' % (ii, ii)) retval = os.system( 'cdparanoia --force-cdrom-device=%s --abort-on-skip --output-wav %d-%d[0:40] %s' % (device, ii, ii, tempfilename)) if os.WTERMSIG(retval) == 2: raise SystemExit if not os.path.isfile(tempfilename): print "skipping because cdparanoia couldn't read the disk perfectly" continue print "Getting TRM for track %d..." % ii sig = getSignature(tempfilename, songLength=trackIds[ii - 1][1]) os.unlink(tempfilename) queryItems.append(queryItem % (trackIds[ii - 1][0], sig)) print "Submiting all track TRM sigs..." try: myquery = query % ''.join(queryItems) mb.Query(myquery) except musicbrainz.MusicBrainzError, err: if str( err ) == "Query failed: Session key expired. Please Authenticate again.": auth(mb, cp) mb.Query(myquery) else: raise print "Ejecting cd..." os.system('eject %s' % device)
def get_trm(self): self.init_from_db() trm = mime_map[self.au_content_type].get_trm(self.au_audio_clip) mb = musicbrainz.mb() mb.SetDepth(6) mb.QueryWithArgs(MBQ_GetTrackByTRMId, [trm]) # Check to see how many items were returned from the server numTracks = mb.GetResultInt(MBE_GetNumTracks) tracks = [] for ii in range(1, numTracks+1): track = self.Track() # Start at the top of the query and work our way down mb.Select(MBS_Rewind) # Select the ith artist mb.Select1(MBS_SelectTrack, ii) # Extract the artist name from the ith track track.artist = mb.GetResultData(MBE_TrackGetArtistName) # Extract the track name from the ith track track.title = mb.GetResultData(MBE_TrackGetTrackName) # Extract the track name from the ith track track.duration = mb.GetResultInt(MBE_TrackGetTrackDuration) # Extract the artist id from the ith track temp = mb.GetResultData(MBE_TrackGetArtistId) track.artist_id = mb.GetIDFromURL(temp) tracks.append(track) track.albums = [] # Extract the number of albums numAlbums = mb.GetResultInt(MBE_GetNumAlbums) for jj in range(1, numAlbums+1): album = self.Album() # Select the jth album in the album list mb.Select1(MBS_SelectAlbum, jj) # Extract the album name album.name = mb.GetResultData(MBE_AlbumGetAlbumName), temp = mb.GetResultData(MBE_AlbumGetAlbumId) album.id = mb.GetIDFromURL(temp), # How many tracks on this cd album.nr_of_tracks = mb.GetResultInt(MBE_AlbumGetNumTracks) # Back up one level and go back to the artist level mb.Select(MBS_Back) track.albums.append(album) return tracks
config = ConfigParser.SafeConfigParser() config.read(os.path.expanduser('~/.cdscrobbler')) if not config.has_option("CDScrobbler", "username") or not config.has_option("CDScrobbler", "password"): print "No complete configuration file found, see the README." sys.exit(1) current = datetime.datetime.utcnow() scrob = scrobbler.Scrobbler(config.get("CDScrobbler", "username"), config.get("CDScrobbler", "password"), client="cds", version="0.1") scrob.handshake() mb = musicbrainz.mb() def upload_album(): global current count = mb.GetResultInt(MBE_GetNumAlbums) if count == 0: print "Found no albums" return if count > 1: print "TODO: found %d albums (skipping)" % count return tracks = [] mb.Select1(MBS_SelectAlbum, 1) album = mb.GetResultData(MBE_AlbumGetAlbumName)
def main(): device = '/dev/cdrom' optlist, args = getopt.getopt(sys.argv[1:], 'd:', ['device=']) for o, a in optlist: if o in ("-d", "--device"): device = a if not os.path.isfile('cd2trm.ini'): writeDefaultConfig() raise SystemExit, "Fill out your username/password in 'cd2trm.ini'" cp = ConfigParser.ConfigParser() cp.read('cd2trm.ini') mb = musicbrainz.mb() mb.SetServer(cp.get('cd2trm', 'server'), 80) mb.SetDepth(2) mb.SetDevice(device) # mb.SetDebug(1) auth(mb, cp) while 1: trackIds = None while not trackIds: trackIds = getCDInfo(mb) queryItems = [] for ii in xrange(len(trackIds)): ii = ii + 1 print "Ripping track %d of %d..." % (ii, len(trackIds)) tempfilename = 'temp%s-%d.wav' % (device.replace('/', '-'), ii) #retval = os.system('cdparanoia --abort-on-skip --output-wav %d temp%d.wav' % (ii, ii)) retval = os.system('cdparanoia --force-cdrom-device=%s --abort-on-skip --output-wav %d-%d[0:40] %s' % (device, ii, ii, tempfilename)) if os.WTERMSIG(retval) == 2: raise SystemExit if not os.path.isfile(tempfilename): print "skipping because cdparanoia couldn't read the disk perfectly" continue print "Getting TRM for track %d..." % ii sig = getSignature(tempfilename, songLength=trackIds[ii - 1][1]) os.unlink(tempfilename) queryItems.append(queryItem % (trackIds[ii - 1][0], sig)) print "Submiting all track TRM sigs..." try: myquery = query % ''.join(queryItems) mb.Query(myquery) except musicbrainz.MusicBrainzError, err: if str(err) == "Query failed: Session key expired. Please Authenticate again.": auth(mb, cp) mb.Query(myquery) else: raise print "Ejecting cd..." os.system('eject %s' % device)