PowerShell Module for the Brickset API
Update 18/01/2021: See this post for details on an updated version of this module, parts of the below may now be out of date.
Brickset.com is one of my favourite sites for finding info about Lego sets and keeping up-to-date with Lego news. I noticed recently that they had an API so I thought I would check it out. I posted a while back on how to do some similar stuff with other websites, but some of the functionality on those websites is no longer available.
This module for Brickset data contains functions for finding information about Lego sets and also makes it possible to download instruction manuals which can be pretty helpful if you have lost one of them or buy a 2nd hand set without the manuals.
1) Installation
Download the module from Github, ensure the files are unblocked and copy it to one of your PowerShell module folder paths. For me that is C:\Users\jmedd\Documents\WindowsPowerShell\Modules .
If you’ve done it successfully then you should be able to see details of the module with Get-Module:
Get-Module Brickset -Listavailable
You can take a look at the commands available by importing the module and then using Get-Command:
Import-Module Brickset
Get-Command -Module Brickset
2) Get a Brickset API Key
To use the Brickset API you need to first of all register for an API key. Fill out the form here and they will send you one. Currently they are free.
All of the Get-* functions in the module require you to use the API key; you won’t get very far without one.
3) Set a Global Variable for the API Key
Each of the Get-* functions has an APIKey parameter. However, to make things easier to use I’ve also added the Set-BricksetAPIKey function which will create a global variable for the API key that will be valid for the duration of that PowerShell session. If you don’t supply an API key to the Get-* functions then they will look for the global key having been set.
So the best thing to do is run this function first, with your API key, to set the API key variable:
Set-BricksetAPIKey -APIKey 'ed4w-KQA2-1Ps2' -Confirm:$false
4) Getting All Lego Sets by Theme
First example of using one of the Get-* functions is Get-BricksetTheme and Get-BricksetSet. Together they can be used to retrieve a list of Brickset Themes and then the sets in a theme. So let’s take a look at the example:
First of all, use Get-BricksetTheme to retrieve all available Themes from the Brickset site (remember you don’t need to specify the API key if it has already been set:
Get-BricksetTheme | Format-Table Theme,SetCount -AutoSize
Now say we want to retrieve all of the sets for the Indiana Jones theme we can use Get-BricksetSet with the Theme parameter:
Tip: You can use the OrderBy parameter to sort by a particular value. This may be more efficient than piping it through to Sort-Object afterwards:
Note: there is a lot more information available for each set than displayed here. I’ve restricted the output to a few key properties.
Get-BricksetSet -Theme 'Indiana Jones' -OrderBy Pieces | Format-Table Name,Number,Theme,SubTheme,Year,Pieces -AutoSize
5) Getting All Lego Sets by Theme and Year
If you want the search to be more specific then you can specify multiple search criteria. For instance one of the largest ranges is the Star Wars theme. Let’s have a look and see what sets have been released this year so far:
Get-BricksetSet -Theme 'Star Wars' -Year 2015 -OrderBy Pieces | Format-Table Name,Number,Theme,SubTheme,Year,Pieces -AutoSize
6) Get a Specific Set by Set Number
All Lego sets are assigned a number by Lego. Use the SetNumber parameter of Get-BricksetSet to retrieve details of a specific set.
Note: the API requires that you supply the set number in the format {number}-{variant}, e.g. 7199-1. If you see the number on the front of the box as say 7199, typically you will need to use 7199-1 for the first variant of that set. However, be careful as this will not always be the case.
Get-BricksetSet -SetNumber '7199-1'
7) Download Lego Set Instructions
The function Get-BricksetSetInstructions will return URLs for links to the set’s instructions on the Lego.com website.
Note: the parameter to use is SetId not SetNumber. SetId is Brickset’s own reference number for the set and not the Lego Set Number we used in the previous example. Use Get-BricksetSet to find this info first. I’ve used PowerShell pipeline parameter binding in the functions so that you can do this easily:
Get-BricksetSet -SetNumber '7199-1' | Get-BricksetSetInstructions
Note: this example returned two pdfs, since it is a large set and had two printed manuals in the box.
If you want to open them straight into your web browser of choice you could do this:
Get-BricksetSet -SetNumber 7199-1 | Get-BricksetSetInstructions | Select-Object -ExpandProperty url | Foreach-Object {Invoke-Expression “cmd.exe /C start $\_”}
or if you wanted to say download all of the instructions for a particular theme you could do this using the built-in Windows cmdlet Start-BitsTransfer:
Get-BricksetSet -Theme 'Indiana Jones' | Get-BricksetSetInstructions | Select-Object -ExpandProperty url | ForEach-Object {$file = ($\_.split('/'))\[-1\]; Start-BitsTransfer -Source $\_ -Destination "C:\\Users\\jmedd\\Documents\\$file"}
8) Other Module Functions
There are a few other functions in the module for finding information around Images, Set Reviews and Recently Updated Sets.
I hope you have fun with this module :-)