Functions/Public/Invoke-RCRecherche.ps1
Function Invoke-RCRecherche { <# .SYNOPSIS Permet d'effectuer une recherche sur NosDeputes.fr .DESCRIPTION Il existe deux manière 'utiliser cette cmdlet: 1) en utilisant les parametres -Type -Text (Et optionellement -Format et / -limit) 2) avec le parametre -Query (seul) .PARAMETER Text Specifie le text a rechercher au sein de la base de donnée de NosDeputes.Fr .PARAMETER Type Permet de specifier spécifier sur quel type de document nous souhaitons éffectuer la recherche. Accepte les valeurs suivants: Parlementaire Organisme Intervention Amendement QuestionEcrite Section Texteloi Commentaire .PARAMETER Format Permet de spécifier le format qui est retourné. Par defaut, le retour est en JSON Les valeurs acceptées sont: JSON CSV XML .PARAMETER Limit Permet de limiter le nombre de retour que la recherche nous retourne. Ne peut être superieur à 500. .PARAMETER Query Permet d'écrire des query en utilisant "le query language" directement. Utiliser ce paramètre retourne les données brutes. Ceci signifique qu'il faut encore les rechercher au sein de l'objet. CF: Exemple Get-help Invoke-RCRecherche -Examples .PARAMETER Raw Retourne les données au format brut (sans la mis en forme). Est préférable pour l'utilisation au sein de scripts. .EXAMPLE Invoke-RCRecherche -Type Texteloi -Text "cumul" -limit 7 -Format json Tout les textes de loi qui contiennent le mot "cumul". Limit le nombre de retours à 7, et retour auf format JSON. document_type document_id document_url ------------- ----------- ------------ Texteloi 38 http://www.nosdeputes.fr//api/document/Texteloi/38/json Texteloi 52 http://www.nosdeputes.fr//api/document/Texteloi/52/json Texteloi 313 http://www.nosdeputes.fr//api/document/Texteloi/313/json Texteloi 348 http://www.nosdeputes.fr//api/document/Texteloi/348/json Texteloi 619 http://www.nosdeputes.fr//api/document/Texteloi/619/json Texteloi 130 http://www.nosdeputes.fr//api/document/Texteloi/130/json Texteloi 139 http://www.nosdeputes.fr//api/document/Texteloi/139/json .EXAMPLE Invoke-RCRecherche -Query "?cumul+mandat&object_name=QuestionEcrite&format=xml" Explication de la query: ? -> signifie "debut de la query de recherche". cumul+mandat -> recherche sur les motes clés "cumul mandat" (Le + symbolise un espace) & -> prochain parametre "Cle-valeur" object_name=QuestionEcrite -> Filtre uniquement sur les question ecrites & -> prochain paramètre "cle-valeur" format=xml -> retourne les données au format XML REtourne le resultat suivant: search ------ search (Voir exemple suivant pour l'expliquation aux données) .EXAMPLE L'exemple suivant illustre comment les données peuvent être lu/traités lorsque Invoke-RCRecherche est utilisé avec le paramètre 'Query' La méthodologie est la même lorsque le parametre -Raw est utilisé. $Retour = Invoke-RCRecherche -Query "?cumul+mandat&object_name=QuestionEcrite&format=xml" $Retour.search Nous avons un premier niveau d'objet avec des données relatif à la recherche (Pas les resultats de la recherche en elle même) start end last_result results ----- --- ----------- ------- 1 50 5788 results Pour Accéder au résultats de la recherche en soit, il faut les récuperer dans l'objet 'results' $Retour.Search.results.result document_type document_id document_url ------------- ----------- ------------ QuestionEcrite 17 http://www.nosdeputes.fr//api/document/QuestionEcrite/17/xml QuestionEcrite 28 http://www.nosdeputes.fr//api/document/QuestionEcrite/28/xml QuestionEcrite 5 http://www.nosdeputes.fr//api/document/QuestionEcrite/5/xml QuestionEcrite 45 http://www.nosdeputes.fr//api/document/QuestionEcrite/45/xml QuestionEcrite 177 http://www.nosdeputes.fr//api/document/QuestionEcrite/177/xml QuestionEcrite 110 http://www.nosdeputes.fr//api/document/QuestionEcrite/110/xml QuestionEcrite 219 http://www.nosdeputes.fr//api/document/QuestionEcrite/219/xml QuestionEcrite 29 http://www.nosdeputes.fr//api/document/QuestionEcrite/29/xml (...) .NOTES -Version: 1.0 -Author: Stéphane van Gulick -CreationDate: 01/02/2018 -LastModifiedDate: 01/02/2018 -History: 01/02/2018: Creation : Stéphane van Gulick Blog: www.powershelldistrict.com Site Source: www.nosdeputes.fr #> [cmdletBinding(DefaultParameterSetName="Text")] [CmdletBinding()] Param( [Parameter(Mandatory=$False,ParameterSetName="Query")] [ValidateNotNullOrEmpty()] [String]$Query, [Parameter(Mandatory=$False,ParameterSetName="Text")] [ValidateNotNullOrEmpty()] [String]$Text, [Parameter(Mandatory=$true,ParameterSetName="Text")] [ValidateNotNullOrEmpty()] [RechercheType]$Type, [Parameter(Mandatory=$False,ParameterSetName="Text")] [ValidateNotNullOrEmpty()] [Format]$Format = "json", [Parameter(Mandatory=$False,ParameterSetName="Text")] [ValidateNotNullOrEmpty()] [ValidateRange(1,500)] [int]$Limit, [Switch] $Raw ) switch ($PsCmdlet.ParameterSetName) { "Query"{ $url = $RC_Data.urls.recherche + $Query Break; } "Text"{ $url = $RC_Data.urls.recherche + $text + "?object_name=" + $Type if($PSCmdlet.MyInvocation.BoundParameters.Keys -contains "Limit"){ $url = $url + "&count=$limit" } $url = $url + "&format=$Format" Break; } Default{ throw "Parameterset not defined." } } try{ $data = Invoke-RestMethod -Uri $url -ErrorAction Stop }Catch [System.Net.WebException]{ write-warning "Server indisponible: Merci de vérifier vôtre connection internet." break }Catch{ $_.exception.message } if ($Raw){ return $data }elseif($Query){ return $data }else{ Switch($Format.ToString().ToUpper()){ "JSON"{ return $Data.results break; } "CSV"{ return $data Break; } "XML"{ Return $data.search.results.result Break; } } } } |