Usage_SubmittingData - schnatterer/musicbrainzws2-java GitHub Wiki

Some more explanation and examples on how to submit data

Submitting data

MusicBrainz XML Web Service/Version 2 definition state you could submit some data.

First you need to open a valid User Account, then you need to provvide a valid client identification.

Collections could not be created via web service, so you need to visit the http://musicbrainz.org/user/yourUsername/collections page (please, replace yourUsername with your actual MusicBrainz username) to insert at lest one.

To add or remove Releases from an existing collection:

        Collection controller = new Collection();

        controller.getQueryWs().setUsername("username");
        controller.getQueryWs().setPassword("password");
        controller.getQueryWs().setClient("client");

        List <CollectionResultWs2> list = controller.search();
        
        CollectionWs2 collection = list.get(0).getCollection();
        
        collection = controller.lookUp(collection);
        for (ReleaseWs2 rel : collection.getReleases())
        {
             System.out.println(rel.toString());
        }
        List<String> releases= new ArrayList<String>();
        
        releases.add("b54e4ad1-188a-352f-85d8-ca40d4ec4748");
        releases.add("c501d29f-6b2e-3cbb-a298-ac53b5c00cb4");

        controller.addReleasesById(releases); 
        collection = controller.lookUp(collection);
        for (ReleaseWs2 rel : collection.getReleases())
        {
             System.out.println(rel.toString());
        }
        controller.removeReleasesById(releases); 
        collection = controller.lookUp(collection);
        for (ReleaseWs2 rel : collection.getReleases())
        {
             System.out.println(rel.toString());
        }

You could add and remove releases from collections using valid release istances instead of id string:

        Release relc = new Release();
        relc.search("ummagumma");
        List <ReleaseResultWs2>  rr = relc.getFullSearchResultList();
        List<ReleaseWs2> releases = new ArrayList<ReleaseWs2>();
        
        for (ReleaseResultWs2 r : rr)
        {
            releases.add(r.getRelease());
        }
       
        Collection controller = new Collection();

        controller.getQueryWs().setUsername(username);
        controller.getQueryWs().setPassword(password);
        controller.getQueryWs().setClient(client);
        
        List <CollectionResultWs2> list = controller.search();
        
        CollectionWs2 collection = list.get(0).getCollection();
        
        collection = controller.lookUp(collection);
        for (ReleaseWs2 rel : collection.getReleases())
        {
             System.out.println(rel.toString());
        }

        controller.addReleases(releases); 
        collection = controller.lookUp(collection);
        for (ReleaseWs2 rel : collection.getReleases())
        {
             System.out.println(rel.toString());
        }
        controller.removeReleases(releases); 
        collection = controller.lookUp(collection);
        for (ReleaseWs2 rel : collection.getReleases())
        {
             System.out.println(rel.toString());
        }

To submit UserTags and UserRatings you have different ways:

adding to a single entity via controller:

        Artist controller = new Artist();

        controller.getQueryWs().setUsername(username);
        controller.getQueryWs().setPassword(password);
        controller.getQueryWs().setClient(client);
        
        controller.getIncludes().setUserRatings(true);
        controller.getIncludes().setUserTags(true);
        
        ArtistWs2 artist= controller.lookUp("83d91898-7763-47d7-b03b-b92132375c47");
        for (TagWs2 tag : artist.getUserTags())
         {
             System.out.println(tag.getName());
         }
        System.out.println(artist.getUserRating().getAverageRating());
        
        String[] tags ={"rock", "progressive", "electronic","english"};
        
        controller.AddTags(tags);
        controller.rate(5F);
        controller.lookUp(artist);
        for (TagWs2 tag : artist.getUserTags())
         {
             System.out.println(tag.getName());
         }
        System.out.println(artist.getUserRating().getAverageRating());

working with the entity and then submit changes:

        Artist controller = new Artist();

        controller.getQueryWs().setUsername(username);
        controller.getQueryWs().setPassword(password);
        controller.getQueryWs().setClient(client);
        
        controller.getIncludes().setUserRatings(true);
        controller.getIncludes().setUserTags(true);
        
        ArtistWs2 artist= controller.lookUp("83d91898-7763-47d7-b03b-b92132375c47");
        for (TagWs2 tag : artist.getUserTags())
         {
             System.out.println(tag.getName());
         }
        System.out.println(artist.getUserRating().getAverageRating());
        
        artist.getUserRating().setAverageRating(1F);
        artist.getUserTags().clear();
        artist.getUserTags().add(new TagWs2("rock"));
        artist.getUserTags().add(new TagWs2("progressive"));
       
        controller.postUserRatings();
        controller.postUserTags();
        
        controller.lookUp(artist);
        for (TagWs2 tag : artist.getUserTags())
         {
             System.out.println(tag.getName());
         }
        System.out.println(artist.getUserRating().getAverageRating());

note that in this way you could also clear the user tags and the rating.

You could also build a Submissioon query containing a batch of entities to be submitted for rating or tag purpose:

UserTagSubmissionWs2 query = new UserTagSubmissionWs2(getQueryWs());

query.addEntity(entity);
query.addEntity(entity2);
...
query.addEntity(entityn);

Metadata md = query.submit();

That’s all!

The Test package contains some more other cases that you might find interesting.

⚠️ **GitHub.com Fallback** ⚠️