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 网页编程
每月下载量251
在 listenbrainz-playlist-upl… 中使用
185KB
3K SLoC
Rust
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());
}
封面艺术查询
Release
和 ReleaseGroup
实体在 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