#async-client #api-key #api-client #api-bindings #web #web-api #api

lastfm

一个异步客户端,用于获取您的 Last.fm 收听历史或您正在播放的曲目

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日

#1113Web编程

MIT 许可证

78KB
655

lastfm

Build Status Crates.io docs.rs

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