Private/Get-BridgeImage.ps1
|
function Get-BridgeImage { <# .SYNOPSIS Εξάγει όλους τους συνδέσμους εικόνων από HTML περιεχόμενο. .DESCRIPTION Η Get-BridgeImage αναλύει HTML δεδομένα και επιστρέφει αντικείμενα με τους συνδέσμους εικόνων που σχετίζονται με την κατάσταση της γέφυρας. .PARAMETER HtmlContent Το HTML περιεχόμενο της σελίδας ως συμβολοσειρά (string). .PARAMETER Location Η τοποθεσία της γέφυρας ('poseidonia' ή 'isthmia'). .OUTPUTS [System.Collections.ArrayList] - Λίστα από αντικείμενα εικόνων με την ιδιότητα 'src'. .EXAMPLE Get-BridgeImage -HtmlContent $html -Location 'isthmia' .NOTES Η ανάλυση βασίζεται σε κανονικές εκφράσεις (regex) για την εύρεση εικόνων. Φιλτράρει μόνο τις εικόνες που περιέχουν 'image-bridge' στο URL. #> [CmdletBinding()] [OutputType([System.Collections.ArrayList])] param ( [Parameter(Mandatory)][ValidateNotNullOrEmpty()][string]$HtmlContent, [Parameter(Mandatory)][ValidateNotNullOrEmpty()][ValidateSet('poseidonia', 'isthmia')] [string]$Location ) # Αφαίρεση τόνων από το μοτίβο (pattern) για αντιστοίχιση τόσο τονισμένου όσο και ατόνιστου ελληνικού κειμένου $bridgePattern = if ($Location -eq 'poseidonia') { 'Ποσειδων[ιίΙΊ]α' } else { 'Ισθμ[ιίΙΊ]α' } # Διαχωρισμός με χρήση ανθεκτικού regex για χειρισμό μη ευαισθησίας πεζών-κεφαλαίων, μονών/διπλών εισαγωγικών και μεταβλητών κενών/κλάσεων $blocks = [regex]::Split($HtmlContent, '(?i)<div[^>]+class=["''][^"'']*panel\s+panel-primary[^"'']*["''][^>]*>') # Αντιστοίχιση μπλοκ (block) χωρίς ευαισθησία πεζών-κεφαλαίων με βάση το μοτίβο της γέφυρας $block = $blocks | Where-Object { $_ -match "(?i)$bridgePattern" } if (-not $block) { $writeBridgeLogSplat = @{ Stage = 'Ανάλυση' Message = "❌ Δεν βρέθηκε block για $Location" } Write-BridgeLog @writeBridgeLogSplat $errorRecord = [System.Management.Automation.ErrorRecord]::new( ([System.Exception]::new("Δεν βρέθηκε block για τη θέση $Location.")), 'BridgeImageBlockNotFound', [System.Management.Automation.ErrorCategory]::ObjectNotFound, $Location ) $PSCmdlet.ThrowTerminatingError($errorRecord) } # Αντιστοίχιση ετικετών img χωρίς ευαισθησία πεζών-κεφαλαίων, με μονά/διπλά εισαγωγικά και αυθαίρετη σειρά του src $bmatches = [regex]::Matches($block, '(?i)<img[^>]+src=["'']([^"'']+)["'']') $imageList = [System.Collections.ArrayList]::new() foreach ($m in $bmatches) { $src = $m.Groups[1].Value if ($src -notmatch '\.png$' -and $src -match 'image-bridge') { $null = $imageList.Add([pscustomobject]@{ src = $src }) } } return [System.Collections.ArrayList]::new([object[]]@($imageList)) } |