9 个不稳定版本

0.5.0 2023年1月22日
0.4.0 2021年5月28日
0.3.0 2021年3月23日
0.2.0 2019年10月5日
0.1.4 2019年7月23日

#507 in 网页编程

Download history 76/week @ 2024-03-11 136/week @ 2024-03-18 122/week @ 2024-03-25 97/week @ 2024-04-01 83/week @ 2024-04-08 120/week @ 2024-04-15 76/week @ 2024-04-22 158/week @ 2024-04-29 211/week @ 2024-05-06 223/week @ 2024-05-13 47/week @ 2024-05-20 75/week @ 2024-05-27 77/week @ 2024-06-03 69/week @ 2024-06-10 63/week @ 2024-06-17 31/week @ 2024-06-24

每月下载量251
listenbrainz-playlist-upl… 中使用

MIT 许可证

185KB
3K SLoC

MusicBrainz Rust  

Latest Version Build Status codecov GitHub tag (latest by date) Conventional Commits License

MusicBrainz rust 是 MusicBrainz API 的工具库。


你可能想找

用法

您可以选择使用默认的异步客户端或阻塞客户端。

异步客户端

musicbrainz_rs = "0.5.0"

阻塞客户端

musicbrainz_rs = { version = "0.5.0", features = ["blocking] }

功能

注意:以下所有示例都使用了 blocking 功能以简化代码。

获取查询

要通过获取查询执行查找,您需要导入 Fetch 特性。这可以通过使用 musicbrainz_rs::prelude

use musicbrainz_rs::entity::artist;
use musicbrainz_rs::entity::artist::*;
use musicbrainz_rs::prelude::*;

fn main() {
    let nirvana = Artist::fetch()
        .id("5b11f4ce-a62d-471e-81fc-a69a8278c7da")
        .execute();

    assert_eq!(nirvana.unwrap().name, "Nirvana".to_string());
}

包含参数

您还可以使用包含参数来获取有关资源的更多详细信息。

每个 Musicbrainz 资源都有 允许的包含参数

use musicbrainz_rs::entity::label::*;
use musicbrainz_rs::prelude::*;

fn main() {
    let ninja_tune = Label::fetch()
        .id("dc940013-b8a8-4362-a465-291026c04b42")
        .with_tags()
        .with_ratings()
        .execute()
        .unwrap();

    assert!(ninja_tune
        .tags
        .unwrap()
        .iter()
        .any(|tag| tag.name == "independent"));

    assert!(ninja_tune.rating.is_some());
}

封面艺术查询

ReleaseReleaseGroup 实体在 MusicBrainz 中也允许您对它们进行封面艺术查询

use musicbrainz_rs::entity::release::*;
use musicbrainz_rs::entity::CoverartResponse;
use musicbrainz_rs::prelude::*;
use musicbrainz_rs::FetchCoverart;

fn main() {
    // CoverArt Query for a Release.
    let in_utero_coverart = Release::fetch_coverart()
        .id("76df3287-6cda-33eb-8e9a-044b5e15ffdd")
        .execute()
        .expect("Unable to get cover art");

    if let CoverartResponse::Json(coverart) = in_utero_coverart {
        assert!(!coverart.images[0].back);
        assert_eq!(
            coverart.images[0].image,
            "http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/829521842.jpg"
        );
    } else {
        assert!(false);
    }

    let in_utero = Release::fetch()
        .id("76df3287-6cda-33eb-8e9a-044b5e15ffdd")
        .execute()
        .expect("Unable to get release");

    // Calling `get_coverart()` method on an already fetched Release entity.
    let in_utero_coverart = in_utero
        .get_coverart()
        .execute()
        .expect("Unable to get coverart");

    if let CoverartResponse::Json(coverart) = in_utero_coverart {
        assert!(!coverart.images[0].back);
        assert_eq!(
            coverart.images[0].image,
            "http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/829521842.jpg"
        );
    } else {
        assert!(false);
    }

    // CoverArt Query Builder to fetch a specific resource.
    let in_utero_500px_front_coverart = Release::fetch_coverart()
        .id("76df3287-6cda-33eb-8e9a-044b5e15ffdd")
        .res_500()
        .back()
        .execute()
        .expect("Unable to get cover art");

    if let CoverartResponse::Url(coverart_url) = in_utero_500px_front_coverart {
        println!("{}", coverart_url);
    } else {
        assert!(false);
    }
}

浏览查询

使用 musicbrainz_rs::Browse 或通过 musicbrainz_rs::prelude 将其引入作用域以执行 浏览查询。就像 Include 一样,每个 muscibrainz 资源都有允许链接的实体进行此类查询。

use musicbrainz_rs::entity::artist;
use musicbrainz_rs::entity::artist::Artist;
use musicbrainz_rs::prelude::*;

fn main() {
    let artists_on_in_utero_release = Artist::browse()
        .by_release("18d4e9b4-9247-4b44-914a-8ddec3502103")
        .execute();

    let artists_on_in_utero_release = artists_on_in_utero_release.unwrap();

    artists_on_in_utero_release
        .entities
        .iter()
        .for_each(|artist| println!("{:?}", artist.name));
}

搜索查询

使用 musicbrainz_rs::Search 进行搜索查询。

use musicbrainz_rs::entity::artist::Artist;
use musicbrainz_rs::prelude::*;

fn main() {
    musicbrainz_rs::config::set_user_agent("my_awesome_app/1.0");

    let query = Artist::query_builder()
        .artist("Miles Davis")
        .and()
        .country("US")
        .build();

    let query_result = Artist::search(query).execute().unwrap();
    let query_result: Vec<String> = query_result.entities
        .iter()
        .map(|artist| artist.name.clone()).collect();

    assert!(query_result.contains(&"Miles Davis".to_string()));
    assert!(query_result.contains(&"Miles Davis Quintet".to_string()));
}

自定义用户代理

您可以根据音乐脑图文档中的建议设置您的应用程序用户代理 (音乐脑图文档)

use musicbrainz_rs::entity::artist::Artist;
use musicbrainz_rs::prelude::*;

fn main() {
    musicbrainz_rs::config::set_user_agent("my_awesome_app/1.0");

    let nirvana = Artist::fetch()
        .id("5b11f4ce-a62d-471e-81fc-a69a8278c7da")
        .execute();

    assert_eq!(nirvana.unwrap().name, "Nirvana".to_string());
}

示例

要查看当前在crate中实现了什么,可以查看 tests 目录。

您可以使用 cargo run --example example_name

贡献

欢迎所有贡献,如果您发现错误或有功能请求,请毫不犹豫地提交问题!

致谢

本crate的大部分文档摘自官方 音乐脑图文档,感谢 MetaBrainz 基金会及其赞助商和支持者。封面艺术由 封面艺术存档 提供。

依赖

约5-21MB
约348K SLoC