Application to Sync Playlists to Deezer
- SoundCloud
- Spotify
- Windows
- Linux (x86 & arm)
- macOS
To run this Program a config.json
config file is needed in the working directory.
The config.json
requires the following entries:
{
"SoundCloud_Username": "", // SoundCloud User Name (These are the playlists to sync)
"SoundCloud_ClientID": "", // SoundCloud ClientID (leave empty for automatic setup)
"Deezer_Secret": "", // Login to Deezer and search in the dev console for an arl Cookie
"Spotify_Username" : "", // Spotify User Name (These are the playlists to sync)
"Spotify_Secret" : "" // Spotify Bearer API Key
}
The Search Engine is splited in two parts:
-
The Deezer Search:
It´s to get a list of songs out of Deezer that might contains the right song.
-
The Result Search:
It´s to find the right song in the Deezer search results.
The perfect Search flow should look like this:
- Execute Deezer Search Stage 1
- Gets a valid result with multiple tracks
- Execute Result Search Stage 1 to find the right song
- Return song ID
Note: A Deezer Search Stage triggers all Result Search Stages
The Deezer Search is build up in three stages. Every stage is a indipendent search query you have to get an empty result in order to jump through the stages.
-
Prepare search query remove unsearchable chars such as (
&
<
>
(
)
[
]
) and detect if the song is a remix and save the remix artist as an extra artist -
Artist changes, split song title at first
-
char and replace it with the possible remix artist or with the SoundCloud user name. -
Search only with song name (without the artist name) and duration
Stage 1 | Stage 2 |
---|---|
Stage 1 | Stage 2 |
---|---|
Is the entrypoint CLI Application
API Client for Public and Private Deezer API
Contains all Data Models for Objects, Data manipulation and compare logic
Contains all Integraion Tests to validate changes on success rate
Contains logic for all Music Providers (SoundCloud, Spotify, ...) and an interface to cast all data to a standard object.
Contains all xUnit Test for the whole Project.