12 个版本 (有破坏性)
0.10.0 | 2024年5月5日 |
---|---|
0.8.1 | 2024年1月26日 |
0.7.0 | 2023年12月28日 |
0.6.1 | 2023年9月12日 |
0.5.0 | 2023年6月4日 |
#1113 在 Web编程
78KB
655 行
lastfm
lastfm
是一个异步Rust客户端,用于获取您的 Last.fm 收听历史或您正在播放的曲目
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
lastfm = "*"
将 *
替换为您希望使用的实际版本。
或者,您可以运行
cargo add lastfm
用法
要使用此库,您需要一个 Last.fm 账户和一个API密钥。您可以通过 注册应用程序 来获取一个。如果您已经注册了应用程序,您可以在 API设置 中找到您的API密钥。
创建新的客户端
如果您已通过 LASTFM_API_KEY
环境变量公开了您的API密钥,则可以使用 from_env
方法
let client = Client::<String, &str>::from_env("YOUR_USERNAME");
注意:如果没有设置 LASTFM_API_KEY
,则此方法将引发panic。
或者,您可以使用 try_from_env
,它将返回一个 Result
。
let maybe_client = Client::<String, &str>::try_from_env("YOUR_USERNAME");
match maybe_client {
Ok(client) => {
// do something with the client
}
Err(e) => {
// handle error
}
}
最后,对于更高级的配置,您可以使用 Client::builder()
let client = Client::builder().api_key("YOUR_API_KEY").username("YOUR_USERNAME").build();
获取您正在播放的曲目
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::builder().api_key("YOUR_API_KEY").username("YOUR_USERNAME").build();
let now_playing = client.now_playing().await?;
if let Some(track) = now_playing {
println!("Now playing: {} - {}", track.artist.name, track.name);
}
Ok(())
}
获取您的收听历史
注意:您需要 futures-util
crate 来使用 all_tracks
返回的 Stream
。
use futures_util::pin_mut;
use futures_util::stream::StreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::builder().api_key("YOUR_API_KEY").username("YOUR_USERNAME").build();
let tracks = client.all_tracks().await?;
println!("Total tracks: {}", tracks.total_tracks);
let recent_tracks = tracks.into_stream();
pin_mut!(recent_tracks); // needed for iteration
while let Some(track) = recent_tracks.next().await {
match track {
Ok(track) => {
println!(
"{}: {} - {}",
track.date.to_rfc2822(),
track.artist.name,
track.name
);
}
Err(e) => {
println!("Error fetching data: {:?}", e);
}
}
}
Ok(())
}
示例
此软件包在 examples
文件夹中提供了一些使用示例。
要运行示例,您需要一个API密钥,因此您需要
- 将
.env~sample
复制到.env
- 并添加您的last.fm API密钥
- 运行一个示例。例如:
cargo run --example fetch_all
其他实现
该项目是将我在JavaScript(Node.js)中已经实现的一些内容移植过来。如果您想了解更多,可以查看lmammino/scrobbles
。
贡献
每个人都很欢迎为这个项目做出贡献。您可以通过在GitHub上提交问题或建议改进来做出贡献。
许可证
根据MIT许可证许可。© Luciano Mammino。
依赖项
~8–20MB
~302K SLoC