spotapi 0.2.1

Fetch Spotify metadata via guest auth - search playlists, tracks, artists without API keys
Documentation
# 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

| Method | Description |
|--------|-------------|
| `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

| Method | Description |
|--------|-------------|
| `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.