Caution
As of 2024-11-28, most streams are currently broken due to sudden breaking changes in the Spotify Web API - tracked in #116
tap-spotify is a Singer tap for Spotify.
Built with the Meltano Tap SDK for Singer Taps.
tap-spotify extracts raw data from the Spotify Web API for the following resources:
- User's top tracks
- User's top artists
- User's saved tracks
- Global top 50 tracks (daily)
- Global top 50 tracks (weekly)
- Viral top 50 tracks (daily)
# pip
pip install git+https://github.com/Matatika/tap-spotify
# pipx
pipx install git+https://github.com/Matatika/tap-spotify
# poetry
poetry add git+https://github.com/Matatika/tap-spotify| Name | Required | Default | Description |
|---|---|---|---|
client_id |
Yes | Your tap-spotify app client ID |
|
client_secret |
Yes | Your tap-spotify app client secret |
|
refresh_token |
Yes | Your tap-spotify app refresh token |
A full list of supported settings and capabilities for this tap is available by running:
tap-spotify --aboutBefore using tap-spotify, you will need to create an app from your Spotify developer dashboard. We recommend restricting your use of this app to tap-spotify only. Provide an name, description and a redirect URI of https://matatika.github.io/spotify-refresh-token (explained below).
Use this web app to get a refresh token with your Spotify app credentials:
- Provide your app client ID and secret in the appropriate fields
- Click 'Submit' and follow the Spotify login flow
- Copy the refresh token
Credit to Alec Chen for the original project
Each stream requires certain token scopes. By default (all streams selected), the following token scopes are required:
When specific streams are selected, the required token scopes may change.
| Stream | Required scope(s) |
|---|---|
user_top_tracks_st_stream |
user-top-read |
user_top_tracks_mt_stream |
user-top-read |
user_top_tracks_lt_stream |
user-top-read |
user_top_artists_st_stream |
user-top-read |
user_top_artists_mt_stream |
user-top-read |
user_top_artists_lt_stream |
user-top-read |
global_top_tracks_daily_stream |
|
global_top_tracks_weekly_stream |
|
global_viral_tracks_daily_stream |
|
user_saved_tracks_stream |
user-library-read |
If a required scope is not set, tap-spotify will encounter a 403 Forbidden response from the Spotify Web API and fail. You must set all required scopes for the selected streams.
Any other scopes not listed here are not required by tap-spotify. Setting these will allow applications using the same Spotify app credentials to read more specific and possibly sensitive resource data, so do this at your own risk.
You can easily run tap-spotify by itself or in a pipeline using Meltano.
tap-spotify --version
tap-spotify --help
tap-spotify --config CONFIG --discover > ./catalog.jsonpipx install poetry
make initmake lintCreate tests within the tap_spotify/tests subfolder and
then run:
make testYou can also test the tap-spotify CLI interface directly using poetry run:
poetry run tap-spotify --helpTesting with Meltano
Note: This tap will work in any Singer environment and does not require Meltano. Examples here are for convenience and to streamline end-to-end orchestration scenarios.
Your project comes with a custom meltano.yml project file already created. Open the meltano.yml and follow any "TODO" items listed in
the file.
Next, install Meltano (if you haven't already) and any needed plugins:
# Install meltano
pipx install meltano
# Initialize meltano within this directory
cd tap-spotify
meltano installNow you can test and orchestrate using Meltano:
# Test invocation:
meltano invoke tap-spotify --version
# OR run a test `elt` pipeline:
meltano elt tap-spotify target-jsonlSee the dev guide for more instructions on how to use the SDK to develop your own taps and targets.