有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

musicbrainz使用musicbrainzws2java定位各种曲目的mbid

我已经将musicbrainzws2 java库导入到我的项目中,并且我一直在阅读MusicBrainz在其web服务上的文档。但这很令人困惑。我想知道是否有人能帮助我了解如何浏览MusicBrainz数据库。我不懂术语,我使用数据库的主要目的是收集各种歌曲的mbid

现在这就是我所拥有的

    public static void main(String[] args) {

    ArtistSearchFilterWs2 filter = new ArtistSearchFilterWs2();

    filter.setArtistName("Lindsey Stirling");
    filter.setLimit((long) 100);
    filter.setMinScore((long) 0);
    filter.setOffset((long) 0);

    ArtistSearchWs2 search = new ArtistSearchWs2(filter);

    List<ArtistResultWs2> result = search.getFullList();

    /*
    for(ArtistResultWs2 artist : result) {
        System.out.println(artist.getArtist().getName() + " " + i);
        i++;

        if(artist.getArtist().getName() == "Lindsey Stirling") {

            System.out.println(artist.getArtist().getName() + " " + i);
            break;
        }

    }
    */

    String artistName = result.get(0).getArtist().getName();
    System.out.println(artistName);

    List<ReleaseWs2> releases = result.get(0).getArtist().getReleaseList().getReleases();

    System.out.println(releases.size());

    for(ReleaseWs2 release : releases) {
        System.out.println(release.getTitle());

    }

出于某种原因,它说艺术家林赛·斯特林(Lindsey Stirling)有0个版本,除此之外,我不知道如何根据艺术家和专辑搜索特定歌曲


共 (1) 个答案

  1. # 1 楼答案

    releases不包含任何元素,因为搜索服务器不会为艺术家搜索返回此信息。为了澄清这一点:MusicBrainz的“normal”web servicesearch web service在其输出中使用相同的XML模型,这意味着ArtistWs2类可以表示它们中任何一个的结果

    除了搜索web服务之外,正常的web服务允许您request more information关于正在检索信息的实体(在本例中,您需要artist的发布信息,因此必须在inc参数中包含releases

    您可以查看搜索服务器为您的搜索返回的XMLhere,对包含发布信息的普通web服务的请求是here

    以下代码(减去导入)将执行您想要的操作:

    ArtistSearchFilterWs2 filter = new ArtistSearchFilterWs2();
    
    filter.setArtistName("Lindsey Stirling");
    filter.setLimit((long) 100);
    filter.setMinScore((long) 0);
    filter.setOffset((long) 0);
    
    ArtistSearchWs2 search = new ArtistSearchWs2(filter);
    List<ArtistResultWs2> result = search.getFullList();
    
    String artistName = result.get(0).getArtist().getName();
    System.out.println(artistName);
    
    // This is the artist as returned by the search server.
    ArtistWs2 artist = result.get(0).getArtist();
    
    Artist controller = new Artist();
    // This is where you tell the library that you want to have the artists
    // releases included in the result.
    controller.getIncludes().setReleases(true);
    
    // This is the artist as returned by the MusicBrainz server, including the
    // release information.
    ArtistWs2 lindsey = controller.lookUp(artist);
    
    List<ReleaseWs2> releases = lindsey.getReleaseList().getReleases();
    System.out.println(releases.size());
    
    for (ReleaseWs2 release : releases) {
        System.out.println(release.getTitle());
    }
    

    要了解搜索是如何工作的,您应该首先阅读the general documentation,然后在recording search documentation中找到所需的搜索字段。如果要在特定专辑中搜索特定艺术家的歌曲(recording,请使用artistreleases字段。例如,要通过“ShatterMe”上的“Lindsey Stirling”搜索“Mirror Haus”,您需要执行以下查询:"Mirror Haus" AND artist:"Lindsey Stirling" AND release:"Shatter Me"

    以下代码将执行此操作:

        RecordingSearchFilterWs2 recfilter = new RecordingSearchFilterWs2();
        recfilter.setLimit((long) 100);
        recfilter.setMinScore((long) 0);
        recfilter.setOffset((long) 0);
        recfilter.setQuery("\"Mirror Haus\" AND release:\"Shatter Me\" AND artist:\"Lindsey Stirling\"");
        RecordingSearchWs2 recsearch = new RecordingSearchWs2(recfilter);
        List<RecordingResultWs2> recresult = recsearch.getFullList();
        System.out.println(recresult.size());
        System.out.println(recresult.get(0).getRecording().toString());