librespot 0.8.0

An open source client library for Spotify, with support for Spotify Connect
Documentation
use std::env;

use librespot::core::{authentication::Credentials, config::SessionConfig, session::Session};

const SCOPES: &str =
    "streaming,user-read-playback-state,user-modify-playback-state,user-read-currently-playing";

#[tokio::main]
async fn main() {
    let mut builder = env_logger::Builder::new();
    builder.parse_filters("librespot=trace");
    builder.init();

    let mut session_config = SessionConfig::default();

    let args: Vec<_> = env::args().collect();
    if args.len() == 3 {
        // Only special client IDs have sufficient privileges e.g. Spotify's.
        session_config.client_id = args[2].clone()
    } else if args.len() != 2 {
        eprintln!("Usage: {} ACCESS_TOKEN [CLIENT_ID]", args[0]);
        return;
    }
    let access_token = &args[1];

    // Now create a new session with that token.
    let session = Session::new(session_config.clone(), None);
    let credentials = Credentials::with_access_token(access_token);
    println!("Connecting with token..");
    match session.connect(credentials, false).await {
        Ok(()) => println!("Session username: {:#?}", session.username()),
        Err(e) => {
            println!("Error connecting: {e}");
            return;
        }
    };

    let token = session.token_provider().get_token(SCOPES).await.unwrap();
    println!("Got me a token: {token:#?}");
}