Association loi de 1901/SQL
Aller à la navigation
Aller à la recherche
Requête web pour l'extraction de données.
Date d'événement
<#
Nom : PSHWEB101
Description : extraction de données d'un site web contenant les dates et lieux d'événements
Usage : exercice en PowerShell
Particularité : néant
Auteur : fylip22
Version : 1.0
Révisions :
- 1.0 (21/04/2025) : création du script
#>
# nombre maximum d'orchestre à traiter
$ListeLongueur = 200
$OrchestreNombre, $DateNombre = 0, 0
$horodatage = Get-Date -Format "yyyyMMdd-HHmmss"
$fichierExport = "C:\support\bal-$horodatage.csv"
New-Item -ItemType File -Path $fichierExport -Force
Set-Content -Path $fichierExport -Value "Orchestre;Jour;Date;Heure;Ville;Département;Salle;Descriptif" -Encoding UTF8
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#
# A.- Récupération de la liste des orchestres (code)
#
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# page de la liste des orchestres
$webSite = Invoke-WebRequest -Uri http://www.touteladanse.com/dd_orchestre.php
# récupération des éléments du site
$liste = $webSite.AllElements
$match = $liste | select-string '([a-z]{3}[0-9]{3})' -AllMatches
$resultat = $match.Matches.value
$orchestreListeUnique = $resultat | Select-Object -Unique | Select-Object -last $ListeLongueur | Sort-Object
Write-host ("Nombre d'orchestres : {0}" -f $orchestreListeUnique.count)
Clear-Host
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#
# B.- Récupération des dates de chaque orchestre
#
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
## Début de la bouche générale
Foreach ($orchestreCode in $orchestreListeUnique) {
# exploration
$webSite = Invoke-WebRequest -Uri http://www.touteladanse.com/$orchestreCode.php
# Find table in the website
$tableData = $webSite.AllElements | Where-Object {$_.tagname -eq 'td' -and $_.innertext -notlike "*dispo*"}
# Table header and data
$tdata = $tableData.innerText
$thead = @("Date", "Heure", "Ville", "Salle", "Descriptif")
$dataResult = New-Object System.Collections.ArrayList
# commencer à 1 pour ne pas avoir les deux premières (titre du tableau)
for ($i = 1; $i -le $tdata.count; $i+= ($thead.count - 1)) {
if ($tdata.count -eq $i) { break }
$group = $i + ($thead.count - 1)
[void]$dataResult.Add($tdata[$i..$group])
$i++
}
# Html data into powershell table format
$finalResult = @()
$finalResult += $orchestreCode
$OrchestreNombre += 1
foreach ($data in $dataResult) {
$data = $data -replace '(lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche).(\d\d\/\d\d\/\d\d\d\d)$', '$1;$2'
$regex = "([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZâÉéèêëîïôö'' -]+).*\(([0-9][0-9])\)"
$data = $data -replace $regex,'$1;$2'
$data = $data -join ";"
$finalResult += $data -join ";"
Add-Content -Path $fichierExport -Value "$orchestreCode;$data"
}
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#
# B.1 - Affichage des dates pour l'orchestre en cours
#
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Write-Host "* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
Write-Host ("Orchestre {0}, nombre de dates : {1}" -f $orchestreCode, $finalResult.count)
$DateNombre += $finalResult.count
}
## Fin de la bouche générale
Write-Host ("Fin du traitement pour {0} orchestres et {1} événements" -f $OrchestreNombre, $DateNombre)