Powershell – Deezer API

Published by mail@bewi.at on

To get a Deezer API Token you must first create an application. You can do this under following link.

Deezer for developers

I don’t know how to get a refresh token, so in this example you must enter your code every 1 hour. If you are in the 1 hour the script will check if there is a valid token ($DeezerAccessToken) and will not ask for a code.

function Get-DeezerToken {

    $AppId = "Your App Id"
    $SecretKey = "Your App Secret"
    $RedirectURI = "http://localhost"
    $Permissions = "manage_library"

    # If the Token expired or no token present request a token
    If (((Get-Date) -gt $DeezerAccessTokenDateExpires) -or (-not $DeezerAccessToken))
    {
        # URL for the Browser
        $URL = "https://connect.deezer.com/oauth/auth.php?app_id="+$AppId+"&redirect_uri="+$RedirectURI+"&perms="+$Permissions
      
        Write-Host "Please open the following URL in the browser and copy your code from the URL Bar (URL copyied to clipboard):" -ForegroundColor Yellow
        Set-Clipboard -Value $URL
        Write-Host $URL
        Write-Host ""
        $Code = Read-Host "Please enter the code: "

        $URI = "https://connect.deezer.com/oauth/access_token.php?app_id="+$AppId+"&secret="+$SecretKey+"&code="+$Code
        $Result = Invoke-WebRequest -Uri $URI

        $AccessToken = $Result.Content.Replace("access_token=","")
        # ATTENTION: The lenght may be false (-12 or -13)
        $DeezerTokenTemp = $AccessToken.Substring(0,$AccessToken.Length-12)

        Clear-Variable -Name DeezerAccessTokenHeader -ErrorAction SilentlyContinue
        Clear-Variable -Name DeezerAccessToken -ErrorAction SilentlyContinue
        Set-Variable -Name DeezerAccessTokenHeader -Value $Result.Content -Scope Global
        Set-Variable -Name DeezerAccessToken -Value $DeezerTokenTemp -Scope Global
        Set-Variable -Name DeezerAccessTokenDateExpires -Value (Get-Date).AddSeconds(3540) -Scope Global
    }
    return $DeezerAccessToken
}

Now it’s time for an example what you can do. First of all save the above script to some locatain. E.g. C:\DeezerAPI\Get-DeezerToken.ps1

As you can see we import the Get-DeezerToken.ps1 so we can call the function Get-DeezerToken.

At the bottom you see the Function Script. Lets call it Get-Deezer-Functions.ps1 This is also an Module that you can import in the final script.

. C:\DeezerAPI\Get-DeezerToken.ps1

Get-DeezerToken
$Header =  @{'Authorization' = 'Bearer ' + $DeezerAccessTokenHeader}

function Search-Deezer-Library() {
    Param(
        [string]$Artist,
        [string]$Title
        )

    # Create Search Filter
    [uri]$URI = "https://api.deezer.com/search?q=artist:`""+$Artist+"`"track:`""+$Title+"`""

    # Get First Track
    try {
        $Tracks = Invoke-RestMethod -Uri $URI -Method Get -Headers $Header
    }
    catch {
        $_.Exception.Message
    }
    [array]$TrackID = $Tracks.data.Id
    return $TrackID
}

function Add-Deezer-Track {
    param (
        [array]$TrackID,
        [string]$PlaylistID
    )
    [uri]$URIPlaylist = "http://api.deezer.com/playlist/"+$PlaylistID+"/tracks?access_token="+$DeezerAccessToken+"&request_method=post&songs="+$TrackID
    try {
        Invoke-RestMethod -UseBasicParsing $URIPlaylist -Method Post
    }
    catch {
        $_.Exception.Message
    }
}

function New-Deezer-Playlist {
    param (
        [string]$PlaylistName
    )
    # You can find your User Id if you open a playlist in your Deezer Acount in the browser
    [uri]$URIPlaylist = "https://api.deezer.com/user/your_user_id/playlists?access_token="+$DeezerAccessToken+"&request_method=post&title="+$PlaylistName

    try {
        $PlaylistId = Invoke-RestMethod -UseBasicParsing $URIPlaylist -Method Post
    }
    catch {
        $_.Exception.Message
    }
    return $PlaylistId.id
}

And now the final script.

# Load Functions
. C:\DeezerAPI\Get-Deezer-Functions.ps1

# Create new Playlist
$PlaylistName = "Some cool Playlist"
$PlaylistID = New-Deezer-Playlist -PlaylistName $PlaylistName

# Search for a Track
$Artist = "Fear Factory"
$Title = "Linchpin"
[array]$TrackID = Search-Deezer-Library -Artist $Artist -Title $Title

# Add track to your Playlist (Match 0 in the array)
Add-Deezer-Track -TrackID $TrackID[0] -PlaylistID $PlaylistID
Categories: APIDeezer

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

This site uses Akismet to reduce spam. Learn how your comment data is processed.