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...