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) } } } |