Usage_NonMBIDLookup - schnatterer/musicbrainzws2-java GitHub Wiki

Some more explanation and examples on how to perform Lookups

Non MBID Lookups

MusicBrainz XML Web Service/Version 2 definition recognize four specal cases:

  • ISWC returns a list of works.

  • ISRC return a list of recordings

  • PUID return a list of recordings

  • DISCID returns a list of associated releases

You could perform ISWC or ISRC lookups using Work or Recording searches:

String iswc= "T-010.475.727-8";
  
Work work = new Work();
work.search("iswc:"+iswc);

List<WorkResultWs2> results  =  work.getFullSearchResultList();
for (WorkResultWs2 rec : results){
  System.out.println(rec.getWork().toString());
}

String isrc= "GBAYE6900522";

Recording recording = new Recording();
recording.search("isrc:"+isrc);

List<RecordingResultWs2> results  = recording.getFullSearchResultList();

for (RecordingResultWs2 rec : results) {
   System.out.println(rec.getRecording().toString());
}

I think we don't need more.

As a counterpoint, is not actualy possible to search for PUIDS or DISCIDS, so we had to provvide dedicated controllers:

To lookup for a PUID:

String id="96dfb3ee-2f68-b0f9-6fbb-6730b6a5124f";
Puid controller = new Puid();
         
PuidWs2 puidWs2 = controller.lookUp(id);
for (RecordingWs2 rec : puidWs2.getRecordings()){
   System.out.println(rec.toString());
}

or:
         
puidWs2 = new PuidWs2();
puidWs2.setId(id);
controller = new Puid();
         
puidWs2 = controller.lookUp(puidWs2);
         
for (RecordingWs2 rec : puidWs2.getRecordings()){
   System.out.println(rec.toString());
}

To Lookup a DISCID:


String id = "9BHdYEmI5lNjGKqd5hUIc6W3oRc-";
DiscWs2 disc = new DiscWs2();
disc.setDiscId(id);
        
Disc controller = new Disc();  
DiscWs2 disc =controller.lookUp(disc);

for (ReleaseWs2 rel : disc.getReleases()){
  System.out.println(rel.toString());

or

String id = "9BHdYEmI5lNjGKqd5hUIc6W3oRc-";
        
Disc controller = new Disc();  
DiscWs2 disc =controller.lookUp(id, null);

for (ReleaseWs2 rel : disc.getReleases()){
  System.out.println(rel.toString());
}

DiscID Lookups not only could look at the releases related to an existing discId, but could also perform a "fuzzy lookup", providing a valid discId and a toc description.

Please refer to

http://musicbrainz.org/doc/Disc_ID

and

http://musicbrainz.org/doc/Disc_ID_Calculation

for details.

Thanks to the creators of libdiscId and libdiscid-java, musicbrainzws2-java could calculate new discids and perform "fuzzy lookup" starting form a tracklist descriptions (see example), in form of an existing track list, a self builded one or a toc string. Is also possible read the toc form a CD in your drive and perform the lookup:


String drive = "D:"; // BE SURE TO USE AN EXISTING DRIVE!!!
Disc controller = new Disc();
try {
        DiscWs2 disc =controller.lookUp(drive);
     
        for (ReleaseWs2 rel : disc.getReleases())
        {
           System.out.println(rel.toString());
        }
     } catch (MBWS2Exception ex) {...}

String toc = "1 5 198910 150 61125 94600 117697 143212";
Disc controller = new Disc();

try {
        DiscWs2 disc =controller.lookUp(null, toc);
        for (ReleaseWs2 rel : disc.getReleases())
        {
            System.out.println(rel.toString());
        }
    } catch (MBWS2Exception ex) {...}

DiscWs2 disc = new DiscWs2();
        
        DiscTrackWs2 track = new DiscTrackWs2();
        track.setTracknum(1);
        track.setOffsetInMillis(0);
        track.setLengthInMillis(813000);
        disc.addTrack(track);
        
        track = new DiscTrackWs2();
        track.setTracknum(2);
       
        track.setLengthInMillis(452000);
        disc.addTrack(track);
        
        track = new DiscTrackWs2();
        track.setTracknum(3);
        
        track.setLengthInMillis(308000);
        disc.addTrack(track);
        
        track = new DiscTrackWs2();
        track.setTracknum(4);
        
        track.setLengthInMillis(335000);
        disc.addTrack(track);
        
        track = new DiscTrackWs2();
        track.setTracknum(5);
        
        track.setLengthInMillis(750000);
        disc.addTrack(track);
        
        Disc controller = new Disc();
        
        try {
               controller.lookUp(disc);
               for (ReleaseWs2 rel : disc.getReleases())
               {
                  System.out.println(rel.toString());
               }
             } catch (MBWS2Exception ex) {...}


The result is a disc object containing a list of releases "that are within a similar distance to the tracklist provided", but never ask to me what this is actualy meaning...