How to Search Spotify Using PowerShell & Spotify’s Metadata API
December 8th, 2011
No comments
Windows PowerShell V3 includes a command, Invoke-WebRequest, which we can use to grab information using Spotify’s Metadata API.
PS > Invoke-WebRequest http://ws.spotify.com/search/1/track.json?q=Black+Label+Society
StatusCode : 200
StatusDescription : OK
Content : {"info": {"num_results": 417, "limit": 100, ..
"spotify:album:396vQgjfPsC0lisMX...
RawContent : HTTP/1.1 200 OK
Vary: Accept-Charset
X-Varnish: 1580131781 1580105616
Age: 1908
Access-Control-Allow-Origin: *
Content-Length: 51642
Content-Type: application/json; charset=utf-8
Date: Thu, 01 ...
Forms : {}
Headers : {[Vary, Accept-Charset], [X-Varnish, 1580131..
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 51642
Let's check out the information in the Content property.
PS > Invoke-WebRequest http://ws.spotify.com/search/1/track.json?q=Black+Label+Society |
Select-Object -ExpandProperty Content
{"info": {"num_results": 417, "limit": 100, "offset": 0,
"query": "Black Label Society", "type": "track", "page": 1},
"tracks": [{"album": {"released": "2009", "href":
"spotify:album:396vQgjfP
sC0lisMXkrQ2A", "name": "Skullage", "availability":
{"territories": "AT CH DE DK FI IS IT NO PT SE"}}, "name":
"In This River", "popularity": "0.56160", "external-ids":
[{"type": "isrc", "id": "USAR50451581"}], "length":
235.466, "href": "spotify:track:1LgNG6JFuM3E4......
The output from isn’t as nicely formatted as you might have hoped, however, using the cmdlet ConvertFrom-Json converts the json document to usable object.
PS > $bls = Invoke-WebRequest http://ws.spotify.com/search/1/track.json?q=Black+Label+Society | Select-Object -ExpandProperty Content | ConvertFrom-JsonNow we can simply call on a property and the information is displayed nicely formatted.
PS > $bls.info num_results : 417 limit : 100 offset : 0 query : Black Label Society type : track page : 1
Here’s an example on how you can display information about each track
PS > $bls.tracks
album : @{released=2009; href=spotify:album:396vQgjfPsC0lisMXkrQ2A; name=Skullage; availability=}
name : In This River
popularity : 0.56160
external-ids : {@{type=isrc; id=USAR50451581}}
length : 235.466
href : spotify:track:1LgNG6JFuM3E4R7YsJgdf5
artists : {@{href=spotify:artist:0zfT626RwO6zN3RDYeRit5; name=Black Label Society}, @{href=spotify:artist:1AeC9AuzqGc3IXMC2T5xny; name=Zakk Wylde}}
track-number : 10
album : @{released=2010; href=spotify:album:7yji7GJSmvIpjMoEykLQq7; name=Order Of The Black; availability=}
name : Crazy Horse
popularity : 0.48597
external-ids : {@{type=isrc; id=USKO11000885}}
length : 246.2
href : spotify:track:2quyhkBRqiv56dQcfuLops
artists : {@{href=spotify:artist:0zfT626RwO6zN3RDYeRit5; name=Black Label Society}}
track-number : 1
[?]




Let’s start with One file. First we need to Get information about the Item. We can do this through the Get-Item CmdLet. Get-Item Displays some, but not all information we wnat to access. To solve this, we will use the Object with the WMPlayer ComObject.
Doing this on every single file can be a rather time consuming job. so here’s a function that does it for us. Note that in this example I use the replace operator based on the naming of my files. If you have a different way of naming your music files you might want to modify the function. I added the Start-Sleep CmdLet because i had some issues with the update, if you experience issues you can increase the Start-Sleep Seconds.
Below is the Code USed in this Example