Public/Get-Picl.ps1
|
# <# # .SYNOPSIS # Retrieves films available on picl.nl # #> # function Get-Picl # { # [CmdletBinding()] # param() # $DutchCulture = Get-Culture 'nl-NL' # Invoke-WebRequest -Uri 'https://picl.nl/films/' # | Select-Object -ExpandProperty Links # | Select-Object -ExpandProperty Href # | Where-Object { $_ -match '^/films/[^/]+$' } # | ForEach-Object { # $Url = 'https://picl.nl{0}' -f $_ # $Document = ConvertTo-HtmlDocument -Uri $Url # $Title = $Document | Select-HtmlNode -CssSelector 'h1' | Get-HtmlNodeText # $Image = $Document | Select-HtmlNode -CssSelector '._181o3r00 img' # $ImageUrl = 'https://picl.nl' + $Image.Attributes['src'].Value -replace '^https://picl\.nl/_next/image\?url=', '' # $ImageUrl = [System.Uri]::UnescapeDataString($ImageUrl) -replace '&.*$', '' # $Synopsis = $Document | Select-HtmlNode -XPath '//p[@data-sentry-component="HeroSubtitle"]' | Get-HtmlNodeText # $Description = $Document | Select-HtmlNode -XPath '//div[@data-sentry-component="Synopsis"]' | Get-HtmlNodeText -SkipRemoveLineBreaks # $Availability = ($Document | Select-HtmlNode -CssSelector '._181o3r08' | Get-HtmlNodeText) # if (-not $Availability.EndsWith('.')) { $Availability = "$Availability." } # $Meta = $Document | Select-HtmlNode -CssSelector '._1n2dy9g5' # $MetaLabels = $Document | Select-HtmlNode -CssSelector 'h3._1rqep6p3' -All | ForEach-Object { $_ | Get-HtmlNodeText } # $Meta = $Meta.Descendants() | Where-Object Name -In 'p', 'ul' # $RatingsIndex = $MetaLabels.IndexOf('Kijkwijzer') # $MetaLabels = $MetaLabels[0..($RatingsIndex - 1)] + $MetaLabels[($RatingsIndex + 1)..($MetaLabels.Length - 1)] # $AvailableUntilIndex = $MetaLabels.IndexOf('Te zien tot en met') # $GenreIndex = $MetaLabels.IndexOf('Genre') # $CountryIndex = $MetaLabels.IndexOf('Land') # $LanguageIndex = $MetaLabels.IndexOf('Taal') # $SubtitlesIndex = $MetaLabels.IndexOf('Ondertitels') # $AvailableUntilText = '' # $AvailableUntil = $null # if ($AvailableUntilIndex -ne -1) # { # $AvailableUntilText = $Meta[$AvailableUntilIndex] | Get-HtmlNodeText # $AvailableUntil = [DateTime]::ParseExact($AvailableUntilText, 'd MMMM yyyy', $DutchCulture) # $Availability = ("Te zien tot $AvailableUntilText. " + $Availability) -replace '\. \.$', '.' # } # filter ElementsContainingText # { # $CurrentElement = $_ # switch ($CurrentElement.Name) # { # 'p' { return $CurrentElement } # 'ul' { return $CurrentElement.Elements('li') } # } # } # $Genre = $Meta[$GenreIndex] | ElementsContainingText | ForEach-Object { $_ | Get-HtmlNodeText } | Join-String -Separator ', ' # $Country = $Meta[$CountryIndex] | ElementsContainingText | ForEach-Object { $_ | Get-HtmlNodeText } | Join-String -Separator ', ' # $Language = $Meta[$LanguageIndex] | ElementsContainingText | ForEach-Object { $_ | Get-HtmlNodeText } | Join-String -Separator ', ' # $SubTitles = $Meta[$SubtitlesIndex] | ElementsContainingText | ForEach-Object { $_ | Get-HtmlNodeText } | Join-String -Separator ', ' # [PSCustomObject]@{ # PSTypeName = 'UncommonSense.Cinema.PiclFilm' # Url = $Url # Title = $Title # ImageUrl = $ImageUrl # Synopsis = $Synopsis # Description = $Description # Genre = $Genre # Country = $Country # Language = $Language # Subtitles = $Subtitles # Availability = $Availability # AvailableUntil = $AvailableUntil # } # } # } |