Current section

Files

Jump to
spotify_ex lib spotify playlist.ex
Raw

lib/spotify/playlist.ex

defmodule Spotify.Playlist do
import Helpers, only: [query_string: 1]
@moduledoc """
Playlist API endpoints
API calls in this module require valid Authorization headers. See the OAuth
section for more details.
https://developer.spotify.com/web-api/playlist-endpoints/
"""
@doc"""
Get a list of featured playlists.
[Spotify Documenation](https://developer.spotify.com/web-api/get-list-featured-playlists/)
**Valid params**: `locale`, `country`, `timestamp`, `limit`, `offset`
**Method**: `GET`
iex> Spotify.Playlist.featured
"https://api.spotify.com/v1/browse/featured-playlists"
iex> Spotify.Playlist.featured(country: "US")
"https://api.spotify.com/v1/browse/featured-playlists?country=US"
"""
def featured(params \\ []) do
"https://api.spotify.com/v1/browse/featured-playlists" <> query_string(params)
end
@doc"""
Get a category's playlists.
[Spotify Documentation](https://developer.spotify.com/web-api/get-categorys-playlists/)
**Valid params**: `country`, `limit`, `offset`
**Method**: `GET`
## Example:
iex> Spotify.Playlist.by_category("123")
"https://api.spotify.com/v1/browse/categories/123/playlists"
iex> Spotify.Playlist.by_category("123", [country: "US", limit: 5])
"https://api.spotify.com/v1/browse/categories/123/playlists?country=US&limit=5"
"""
def by_category(id, params \\ []) do
"https://api.spotify.com/v1/browse/categories/#{id}/playlists" <> query_string(params)
end
@doc """
Add the current user as a follower of a playlist.
[Spotify Documentation](https://developer.spotify.com/web-api/follow-playlist/)
**Optional Body Params**: `public`
**Method**: `PUT`
iex> Spotify.Playlist.follow_playlist("123", "456")
"https://api.spotify.com/v1/users/123/playlists/456/followers"
"""
def follow_playlist(owner_id, playlist_id) do
follow_playlist_url(owner_id, playlist_id)
end
@doc """
Remove the current user as a follower of a playlist.
[Spotify Documentation](https://developer.spotify.com/web-api/unfollow-playlist/)
**Method**: `DELETE`
iex> Spotify.Playlist.follow_playlist("123", "456")
"https://api.spotify.com/v1/users/123/playlists/456/followers"
"""
def unfollow_playlist(owner_id, playlist_id) do
follow_playlist_url(owner_id, playlist_id)
end
@doc false
defp follow_playlist_url(owner_id, playlist_id) do
get_playlist_url(owner_id, playlist_id) <>"/followers"
end
@doc """
Search for a playlist.
[Spotify Documentation](https://developer.spotify.com/web-api/search-item/)
**Method**: `GET`
**Required Params:** `q`
**Optional Params:** `limit`, `offset`, `market`
iex> Spotify.Playlist.search(q: "foo", limit: 5)
"https://api.spotify.com/v1/search?type=playlist&q=foo&limit=5"
"""
def search(params) do
"https://api.spotify.com/v1/search?type=playlist&" <> URI.encode_query(params)
end
@doc """
Get a list of the playlists owned or followed by a Spotify user.
[Spotify Documentation](https://developer.spotify.com/web-api/get-list-users-playlists/)
**Method**: `GET`
** Optional Params: `limit`, `offset`
iex> Spotify.Playlist.get_users_playlists("123")
"https://api.spotify.com/v1/users/123/playlists"
iex> Spotify.Playlist.get_users_playlists("123", limit: 5)
"https://api.spotify.com/v1/users/123/playlists?limit=5"
"""
def get_users_playlists(user_id, params \\ []) do
get_users_playlist_url(user_id) <> query_string(params)
end
defp get_users_playlist_url(user_id) do
"https://api.spotify.com/v1/users/#{user_id}/playlists"
end
@doc """
Get a playlist owned by a Spotify user.
[Spotify Documentation](https://developer.spotify.com/web-api/get-playlist/)
**Method**: `GET`
**Optional Params `fields, market`
iex> Spotify.Playlist.get_playlist("123", "456")
"https://api.spotify.com/v1/users/123/playlists/456"
iex> Spotify.Playlist.get_playlist("123", "456", market: "foo")
"https://api.spotify.com/v1/users/123/playlists/456?market=foo"
"""
def get_playlist(user_id, playlist_id, params \\ []) do
get_playlist_url(user_id, playlist_id) <> query_string(params)
end
defp get_playlist_url(user_id, playlist_id) do
"https://api.spotify.com/v1/users/#{user_id}/playlists/#{playlist_id}"
end
@doc """
Get full details of the tracks of a playlist owned by a Spotify user.
[Spotify Documentation](https://developer.spotify.com/web-api/get-playlists-tracks/)
**Method**: `GET`
**Optional Params `fields`, `market`, `limit`, `offset`
iex> Spotify.Playlist.get_playlist_tracks("123", "456")
"https://api.spotify.com/v1/users/123/playlists/456/tracks"
iex> Spotify.Playlist.get_playlist_tracks("123", "456", limit: 5, offset: 5)
"https://api.spotify.com/v1/users/123/playlists/456/tracks?limit=5&offset=5"
"""
def get_playlist_tracks(user_id, playlist_id, params \\ []) do
playlist_tracks_url(user_id, playlist_id) <> query_string(params)
end
defp playlist_tracks_url(user_id, playlist_id) do
get_playlist_url(user_id, playlist_id) <> "/tracks"
end
@doc """
Create a playlist for a Spotify user. (The playlist will be empty until you add tracks.)
[Spotify Documentation](https://developer.spotify.com/web-api/create-playlist/)
**Method**: `POST`
**Body Params**: `name`, `public`
iex> Spotify.Playlist.create_playlist("123")
"https://api.spotify.com/v1/users/123/playlists"
"""
def create_playlist(user_id) do
"https://api.spotify.com/v1/users/#{user_id}/playlists"
end
@doc """
Change a playlist’s name and public/private state. (The user must, of course, own the playlist.)
[Spotify Documentation](https://developer.spotify.com/web-api/change-playlist-details/)
**Method**: `PUT`
**Request Data)**: `name`, `public`
iex> Spotify.Playlist.change_playlist("123", "456")
"https://api.spotify.com/v1/users/123/playlists/456"
"""
def change_playlist(user_id, playlist_id) do
get_playlist_url(user_id, playlist_id)
end
@doc """
Add one or more tracks to a user’s playlist.
[Spotify Documentation](https://developer.spotify.com/web-api/add-tracks-to-playlist/)
**Method**: `POST`
**Optional Params**: `uris`, `position`
You can also pass the URI param in the request body. Use `add_tracks/2`. See Spotify docs.
iex> Spotify.Playlist.add_tracks("123", "456", uris: "spotify:track:4iV5W9uYEdYUVa79Axb7Rh")
"https://api.spotify.com/v1/users/123/playlists/456/tracks?uris=spotify%3Atrack%3A4iV5W9uYEdYUVa79Axb7Rh"
iex> Spotify.Playlist.add_tracks("123", "456") # Must send request data using this function
"https://api.spotify.com/v1/users/123/playlists/456/tracks"
"""
def add_tracks(user_id, playlist_id, params \\ []) do
playlist_tracks_url(user_id, playlist_id) <> query_string(params)
end
@doc """
Remove one or more tracks from a user’s playlist.
[Spotify Documentation](https://developer.spotify.com/web-api/remove-tracks-playlist/)
**Method**: `DELETE`
**Request Data**: `tracks`
iex> Spotify.Playlist.remove_tracks("123", "456")
"https://api.spotify.com/v1/users/123/playlists/456/tracks"
"""
def remove_tracks(user_id, playlist_id) do
playlist_tracks_url(user_id, playlist_id)
end
@doc """
Reorder a track or a group of tracks in a playlist.
[Spotify Documentation](https://developer.spotify.com/web-api/reorder-playlists-tracks/)
**Method**: `PUT`
**Required Request Body Data**: `range_start`, `insert_before`
**Optional Request Body Data**: `range_length`, `snapshot_id`
iex> Spotify.Playlist.reorder_tracks("123", "456")
"https://api.spotify.com/v1/users/123/playlists/456/tracks"
"""
def reorder_tracks(user_id, playlist_id) do
playlist_tracks_url(user_id, playlist_id)
end
@doc """
Replace all the tracks in a playlist, overwriting its existing tracks. This
powerful request can be useful for replacing tracks, re-ordering existing
tracks, or clearing the playlist.
[Spotify Documentation](https://developer.spotify.com/web-api/replace-playlists-tracks/)
**Method**: `PUT`
**Optional Query Params**: `uris`
You can also pass the URI param in the request body. Use `replace_tracks/2`. See Spotify docs.
iex> Spotify.Playlist.replace_tracks("123", "456")
"https://api.spotify.com/v1/users/123/playlists/456/tracks" # Must send request data
iex> Spotify.Playlist.replace_tracks("123", "456", uris: "spotify:track:4iV5W9uYEdYUVa79Axb7Rh,spotify:track:adkjaklsd94h")
"https://api.spotify.com/v1/users/123/playlists/456/tracks?uris=spotify%3Atrack%3A4iV5W9uYEdYUVa79Axb7Rh%2Cspotify%3Atrack%3Aadkjaklsd94h"
"""
def replace_tracks(user_id, playlist_id, params \\ []) do
playlist_tracks_url(user_id, playlist_id) <> query_string(params)
end
@doc """
Check to see if one or more Spotify users are following a specified playlist.
[Spotify Documentation](https://developer.spotify.com/web-api/check-user-following-playlist/)
**Method**: `GET`
**Query Params: `ids`
iex> Spotify.Playlist.check_followers("123", "456", ids: "foo,bar")
"https://api.spotify.com/v1/users/123/playlists/456/followers/contains?ids=foo%2Cbar"
"""
def check_followers(owner_id, playlist_id, params) do
"https://api.spotify.com/v1/users/#{owner_id}/playlists/#{playlist_id}/followers/contains"
<> query_string(params)
end
end