# SpotAPI - Rust
A professional Rust crate for fetching Spotify metadata via guest authentication. Search for playlists, tracks, and artists without API keys.
## Features
- **Guest Authentication**: Automatic token generation and session management
- **Search**: Find playlists, tracks, and artists with `SpotifySearch`
- **Playlist Fetching**: Get detailed playlist metadata and tracks
- **Artist Radio**: Find official "Artist Radio" playlists
- **Pagination**: Automatically handles large result sets
- **Retry Logic**: Exponential backoff for rate limiting
## Installation
```toml
[dependencies]
spotapi = "0.2.1"
```
## Usage
### Search for Music
```rust
use spotapi::SpotifySearch;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut search = SpotifySearch::new();
// Search playlists
let playlists = search.playlists("Daft Punk Radio", 10).await?;
for p in playlists {
println!("{} by {} - {}", p.name, p.owner_name, p.uri);
}
// Search tracks
let tracks = search.tracks("Get Lucky", 5).await?;
for t in tracks {
println!("{} by {}", t.name, t.artists.join(", "));
}
// Search artists
let artists = search.artists("Daft Punk", 3).await?;
// Find artist's radio playlist
if let Some(uri) = search.artist_radio("Daft Punk").await? {
println!("Radio: {}", uri);
}
Ok(())
}
```
### Fetch Playlist Tracks
```rust
use spotapi::PublicPlaylist;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut playlist = PublicPlaylist::new("https://open.spotify.com/playlist/37i9dQZF1DX6ujZpAN0v9r");
let tracks = playlist.get_tracks().await?;
println!("Fetched {} tracks", tracks.len());
Ok(())
}
```
## API Reference
### SpotifySearch
| `playlists(query, limit)` | Search for playlists |
| `tracks(query, limit)` | Search for tracks |
| `artists(query, limit)` | Search for artists |
| `artist_radio(artist_name)` | Find official radio playlist |
### PublicPlaylist
| `new(uri)` | Create from URL or URI |
| `get_tracks()` | Fetch all tracks (paginated) |
| `get_playlist_info(limit, offset)` | Get playlist metadata |
## Disclaimer
This library interacts with Spotify's internal API. Use responsibly and in accordance with Spotify's terms of service.