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 --about
Before 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.json
pipx install poetry
make init
make lint
Create tests within the tap_spotify/tests
subfolder and
then run:
make test
You can also test the tap-spotify
CLI interface directly using poetry run
:
poetry run tap-spotify --help
Testing 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 install
Now 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-jsonl
See the dev guide for more instructions on how to use the SDK to develop your own taps and targets.