Public/Get-NpoProgramEpisode.ps1

function Get-NpoProgramEpisode
{
    param
    (
        [Parameter(Mandatory, ValueFromPipeline, Position = 0)]
        [string[]]$ProgramUrl,

        [string]$SeasonId
    )

    process
    {
        $ProgramUrl.ForEach{
            $CurrentProgramUrl = $_
            $ProgramID = $CurrentProgramUrl | Get-NpoProgramIdFromUrl
            $QueryString = @(
                if ($SeasonId) { "seasonId=$SeasonId" }
                'tileType=asset'
                'tileMapping=dedicated'
                'pageType=episode'
            ) -join '&'

            $NextLink = "/media/series/$ProgramId/episodes?$QueryString"

            do
            {
                $DataUrl = "https://www.npostart.nl$NextLink"
                $Data = Invoke-RestMethod -Uri $DataUrl -Headers @{ 'X-Requested-With' = 'XMLHttpRequest' }

                $Data.tiles | ForEach-Object {
                    $Tile = ConvertTo-HtmlDocument -Text $_
                    $Title = $Tile | Select-HtmlNode -CssSelector 'h2' | Get-HtmlNodeText
                    $Link = $Tile | Select-HtmlNode -CssSelector 'a' | ForEach-Object { $_.Attributes['href'].Value }
                    $DateText = ($Link -split '/')[-2]
                    $Date = [DateTime]::ParseExact($DateText, 'dd-MM-yyyy', $null)
                    $Image = $Tile | Select-HtmlNode -CssSelector 'img' | ForEach-Object { $_.Attributes['data-src'].Value }
                    $Synopsis = ConvertTo-HtmlDocument $Link | Select-HtmlNode -CssSelector 'meta[name="description"]' | ForEach-Object { $_.Attributes['content'].Value } | ForEach-Object { [System.Web.HttpUtility]::HtmlDecode($_) }

                    [PSCustomObject]@{
                        PSTypeName = 'UncommonSense.Npo.ProgramEpisode'
                        Date       = $Date
                        Title      = $Title
                        Synopsis   = $Synopsis
                        Link       = $Link
                        Image      = $Image
                    }
                }

                $NextLink = $Data.NextLink
            } while ($NextLink)
        }
    }
}