SoundCloud Rust Client
A Rust client for interacting with the SoundCloud API. This library provides an async interface for searching, retrieving, and downloading content from SoundCloud. It automatically discovers a valid client_id from SoundCloud, so you don't need to provide one.
Add the crate to your project:
Quickstart
use ;
async
More Examples
Search, get, and download a track
use ;
async
Search, fetch, and download a playlist
use ;
async
Get user information, followers, tracks, and playlists
use ;
async
API Overview
Core
Client::new() -> Result<Self, Box<dyn Error>>: Initialize the client by discovering aclient_id.get<Q: Serialize, R: DeserializeOwned>(&self, path: &str, query: Option<&Q>) -> Result<R, Box<dyn Error>>: Perform a GET against the SoundCloud API.get_json<R: DeserializeOwned, Q: Serialize>(base_url: &str, path: Option<&str>, query: Option<&Q>, client_id: &str) -> Result<R, Box<dyn Error>>: Static helper to GET JSON from any base URL.
Search
get_search_results(query: Option<&SearchResultsQuery>) -> Result<SearchResultsResponse, Box<dyn Error>>search_all(query: Option<&SearchAllQuery>) -> Result<SearchAllResponse, Box<dyn Error>>
Tracks
search_tracks(query: Option<&TracksQuery>) -> Result<Tracks, Box<dyn Error>>get_track_by_id(id: &str) -> Result<Track, Box<dyn Error>>get_track_by_urn(urn: &str) -> Result<Track, Box<dyn Error>>get_track_related_by_id(id: &str, pagination: Option<&Paging>) -> Result<Tracks, Box<dyn Error>>get_track_related_by_urn(urn: &str, pagination: Option<&Paging>) -> Result<Tracks, Box<dyn Error>>download_track(track: &Track, stream_type: Option<&StreamType>, destination: Option<&str>, filename: Option<&str>) -> Result<(), Box<dyn Error>>get_stream_url(track: &Track, stream_type: Option<&StreamType>) -> Result<String, Box<dyn Error>>get_track_waveform(track: &Track) -> Result<Waveform, Box<dyn Error>>
Playlists
search_playlists(query: Option<&PlaylistsQuery>) -> Result<Playlists, Box<dyn Error>>get_playlist_by_id(id: &str) -> Result<Playlist, Box<dyn Error>>get_playlist_by_urn(urn: &str) -> Result<Playlist, Box<dyn Error>>get_playlist_reposters_by_id(id: &str, pagination: Option<&Paging>) -> Result<Users, Box<dyn Error>>get_playlist_reposters_by_urn(urn: &str, pagination: Option<&Paging>) -> Result<Users, Box<dyn Error>>download_playlist(playlist: &Playlist, destination: Option<&str>, playlist_name: Option<&str>) -> Result<(), Box<dyn Error>>
Albums
search_albums(query: Option<&AlbumQuery>) -> Result<Playlists, Box<dyn Error>>
Users
search_users(query: Option<&UsersQuery>) -> Result<Users, Box<dyn Error>>get_user_by_id(id: &str) -> Result<User, Box<dyn Error>>get_user_by_urn(urn: &str) -> Result<User, Box<dyn Error>>get_user_followers_by_id(id: &str, pagination: Option<&Paging>) -> Result<Users, Box<dyn Error>>get_user_followers_by_urn(urn: &str, pagination: Option<&Paging>) -> Result<Users, Box<dyn Error>>get_user_followings_by_id(id: &str, pagination: Option<&Paging>) -> Result<Users, Box<dyn Error>>get_user_followings_by_urn(urn: &str, pagination: Option<&Paging>) -> Result<Users, Box<dyn Error>>get_user_playlists_by_id(id: &str, pagination: Option<&Paging>) -> Result<Playlists, Box<dyn Error>>get_user_playlists_by_urn(urn: &str, pagination: Option<&Paging>) -> Result<Playlists, Box<dyn Error>>get_user_tracks_by_id(id: &str, pagination: Option<&Paging>) -> Result<Tracks, Box<dyn Error>>get_user_tracks_by_urn(urn: &str, pagination: Option<&Paging>) -> Result<Tracks, Box<dyn Error>>
Notes on Downloads and FFmpeg
- HLS downloads use
ffmpeg-sidecar. On first HLS download, the crate will automatically download an FFmpeg binary for your platform. No manual installation is required. - Progressive downloads are saved directly without FFmpeg.
- If your environment blocks downloads or requires proxies, the automatic FFmpeg download may fail; in that case, configure your network accordingly before using HLS.
License
MIT