Public/Get-FilmhuisVeenendaal.ps1
<# .SYNOPSIS Retrieves showtimes for Filmhuis Veenendaal #> function Get-FilmhuisVeenendaal { [CmdletBinding()] param() $DutchCulture = [CultureInfo]::GetCultureInfo('nl-NL') Invoke-WebRequest -Uri https://www.filmhuisveenendaal.nl/ ` | Select-Object -ExpandProperty Links | Select-Object -ExpandProperty Href | Where-Object { $_ -match 'https://www.filmhuisveenendaal.nl/.+' } | ForEach-Object { $_ -replace '/$', '' } | Where-Object { $_ -notlike '*over-ons*' } | Where-Object { $_ -notlike '*/vereniging*' } | Where-Object { $_ -notlike '*/leden*' } | Where-Object { $_ -notlike '*/nieuwsbrief*' } | Where-Object { $_ -notlike '*/vrijwilliger-worden*' } | Where-Object { $_ -notlike '*/bezoekersinformatie*' } | ForEach-Object { $_.ToLowerInvariant() } | ForEach-Object { $Url = $_ $Document = ConvertTo-HtmlDocument -Uri $Url $Texts = $Document | Select-HtmlNode -CssSelector '.et_pb_text_inner h3' -All $Title = $Texts | Select-Object -First 1 | Get-HtmlNodeText $DateText = $Texts | Select-Object -Skip 2 -SkipLast 2 | Get-HtmlNodeText $Texts = $Document | Select-HtmlNode -CssSelector '.et_pb_text_inner p' -All $Synopsis = $Texts | Select-Object -First 1 | Get-HtmlNodeText $Details = ($Texts | Select-Object -Skip 1 | Where-Object InnerText -like '*Genre:*' | Select-Object -First 1 | Select-Object -ExpandProperty InnerHtml) -split '<br>' | ForEach-Object { $_.Trim() } ($DateText -split 'uur') | Where-Object { $_.Trim() } | ForEach-Object { $Current = $_.Trim().ToLowerInvariant() -replace ',\s+', ',' -replace '^[\D\s]*', '' -replace 'janauri', 'januari' $Date = [DateTime]::ParseExact($Current, 'd MMMM,HH.mm', $DutchCulture) if ($Date -lt (Get-Date)) { $Date = $Date.AddYears(1) } [PSCustomObject]@{ PSTypeName = 'UncommonSense.Cinema.Film' Url = $Url Date = $Date Title = $Title Body = $Synopsis Genre = $Details | Where-Object { $_ -match '^Genre: (.*)$' } | ForEach-Object { $Matches[1] } Director = $Details | Where-Object { $_ -match '^Regisseur: (.*)$' } | ForEach-Object { $Matches[1] } LeadingRoles = $Details | Where-Object { $_ -match '^Hoofdrollen: (.*)$' } | ForEach-Object { $Matches[1] } RunningTime = $Details | Where-Object { $_ -match '^Speelduur: (.*)$' } | ForEach-Object { $Matches[1] } } } } } |