#cs ----------------------------------------------------------------------------------------------- Définition de mots dans un dictionnaire sur internet Script AutoIt Version 3.3.8.0 Auteur : Ahbadiane Version du 17 Janvier 2012 Fonction : _DicoDefinition($sStrategieDico, $sMot, $hForm, $bStopPossible = True, $bDebug = False) #ce ----------------------------------------------------------------------------------------------- #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 AutoItSetOption("MustDeclareVars", 1) #include-once #include #include Global $oErreur, $iNbErreur = 0, $bErreur = False ;------------------------------------------------------------------------------ ; Retourne le ou les définitions d'un mot dans les dictionnaires sur internet ; ; IN $sStrategieDico : Contient la liste des dicos à parcourir : C-a-d "L"="Larousse.fr", "D"="Diconnaire.net", "T"="dictionnaire.Tv5.org" ou "X"="dictionnaire.eXionnaire.com" ; Peut-être terminé par un /x (x=L,D,T ou X) pour obliger à revoir avec un nouveau mot dans ces derniers dictionnaires ; Exemples ; "DL" = rechercher en premier sur Diconnaire.net et si pas trouvé alors rechercher sur Larousse.fr ; "LD/L" = rechercher en premier Larousse.fr et si pas trouvé alors rehercher sur Diconnaire.net et si trouvé rechercher avec un mot différent sur Larousse.fr ; $sMot : Mot à rechercher ; $hForm : Handle de la fenêtre qui appel cette fonction (utilisé pour l'arrêt di traiatement pour voir si la fenêtre est active) ; $bStopPossible : Pour tester l'appui de la touche Echap pour arrêter le traitement ; $bDebug : True => création dans le spous-répertoire debug, d'un fichier HTML et TXT par mot et par définition ; ; OUT Retour d'un tableau 2D ; Si OK : [0][0] = Nb de définitions ; [0][1] = Dico utilisé (remis ici mais idem que $sStrategieDico) ; [1][0] = Le Mot 1 ; [1][1] = Catégorie du Mot 1 (Verbe, Nom ...) ; [1][2] = La définition du Mot 1 ; [2][0] = Le Mot 2 ; ... ; Si arrêt user : [0][0] = -2, [0][1] = Arrêt par l'utilisateur ; Si une erreur : [0][0] = -1, [0][1] = Texte de l'erreur ;------------------------------------------------------------------------------ Func _DicoDefinition($sStrategieDico, $sMot, $hForm, $bStopPossible = True, $bDebug = False) Local $i, $j, $k, $sDico1, $sDico2, $sDicoDebut, $sDicoFin = "", $aReturn[1][3] = [[-1, "Pas de dictionnaire reconnu !", ""]] $i = StringInStr($sStrategieDico, "/") If $i > 0 Then $sDicoDebut = StringLeft($sStrategieDico, $i -1) $sDicoFin = StringMid($sStrategieDico, $i +1) Else $sDicoDebut = $sStrategieDico EndIf For $i = 1 To StringLen($sDicoDebut) $sDico1 = StringMid($sDicoDebut, $i, 1) $aReturn = _DicoDefinitionUnDico($sDico1, $sMot, $hForm, $bStopPossible, $bDebug) If $aReturn[0][0] >= 1 Then For $j = 1 To StringLen($sDicoFin) $sDico2 = StringMid($sDicoFin, $j, 1) If $sDico2 = $sDico1 Then ExitLoop For $k = 1 To $aReturn[0][0] ; Mot différent ou dictionnaire pas utilisé If ($sMot <> $aReturn[$k][0]) Or Not StringInStr(StringLeft($sDicoDebut, $i), $sDico2) Then Local $aReturn2 = _DicoDefinitionUnDico($sDico2, $aReturn[$k][0], $hForm, $bStopPossible, $bDebug) If $aReturn2[0][0] >= 1 Then Return $aReturn2 If $aReturn2[0][0] = -2 Then ; Arrêt utilisateur Local $aErreur[1][3] = [[-2, "Arrêt par l'utilisateur", ""]] Return $aErreur EndIf EndIf Next Next ExitLoop ElseIf $aReturn[0][0] = -2 Then ; Arrêt utilisateur ExitLoop EndIf Next Return $aReturn EndFunc ;------------------------------------------------------------------------------ ; Retourne le ou les définitions d'un mot dans un dictionnaire sur internet ; ; IN Idem _DicoDefinition() ; ; OUT Idem _DicoDefinition() ;------------------------------------------------------------------------------ Func _DicoDefinitionUnDico($sDico, $sMot, $hForm, $bStopPossible, $bDebug) Local $aReturn ; Mise en place de la gestion des erreurs $oErreur = ObjEvent("AutoIt.Error", "FuncErreur") $iNbErreur = 0 GUISetCursor(15, 1) ; Curseur WAIT Switch StringUpper($sDico) Case "L" $aReturn = _DicoDefinitionLarousse($sMot, $hForm, $bStopPossible, $bDebug) $sDico = "Larousse.fr" Case "D" $aReturn = _DicoDefinitionDictionnaireNet($sMot, $hForm, $bStopPossible, $bDebug) $sDico = "Dictonnaire.net" Case "T" $aReturn = _DicoDefinitionDictionnaireTv5Org($sMot, $hForm, $bStopPossible, $bDebug) $sDico = "Dictionnaire.TV5.org" Case "X" $aReturn = _DicoDefinitionDictionnaireExionnaireCom($sMot, $hForm, $bStopPossible, $bDebug) $sDico = "Dictionnaire.eXionnaire.com" Case Else $aReturn = "Quel dictionnaire ?" EndSwitch GUISetCursor(2, 1) ; Désactivation de la gestion des erreurs $oErreur = 0 If IsArray($aReturn) Then $aReturn[0][1] = $sDico Return $aReturn Else If $aReturn = "Stop" Then Local $aErreur[1][3] = [[-2, "Arrêt par l'utilisateur", ""]] Else Local $aErreur[1][3] = [[-1, $aReturn, ""]] EndIf Return $aErreur EndIf EndFunc ;------------------------------------------------------------------------------ ; Retourne le ou les définitions d'un mot du dictionnaire sur Dictionnaire.eXionnaire.com ; ; IN Idem _DicoDefinition() ; ; OUT Idem _DicoDefinition() ; ; REM : Mots à tester : bridgee, graderaient, remesurer, manger, Lysat, Voir, table, titrisas ;------------------------------------------------------------------------------ Func _DicoDefinitionDictionnaireExionnaireCom($sMot, $hForm, $bStopPossible, $bDebug) Local $aReturn[2][3], $as, $asBody, $i, $j ; Mode debug _DicoDefinitionModeDebug(0, $sMot, "X", $aReturn, $bDebug) ; Corps de la page HTML du mot trouvé sur dictionnaire.tv5.org Local $sBody = _DicoDefinitionBody("X", $sMot, $hForm, $bStopPossible, $bDebug) ; Erreur remontée ? If StringLen($sBody) < 200 Then Return $sBody ; Trouvé ? If StringInStr($sBody, " n'a pas été trouvé dans notre dictionnaire") Then Return "Mot non trouvé !" $as = _StringBetween($sBody, "href='#sommaire'>1.", "href='#sommaire'") If @error Then Return "Mot non trouvé !" $sBody = $as[0] ; $aReturn[0][0] : Nombre de définitions (Nb d'articles) StringReplace($sBody, "id='divEntreeDico'", "") $i = @extended If $i < 1 Then Return "Mot non trouvé !" Dim $aReturn[$i +1][3] $aReturn[0][0] = $i ; Nettoyer les
$sBody = StringReplace($sBody, "
", "") ; Découpage par bloc
") If @error Then Return "Erreur (1) sur la structure de la page" ; Mot For $i = 1 To $aReturn[0][0] $as = _StringBetween($asBody[$i -1], "", "") If @error Then Return "Erreur (2) sur la structure de la page" $aReturn[$i][0] = $as[0] Next ; Catégorie For $i = 1 To $aReturn[0][0] $as = _StringBetween($asBody[$i -1], "", "") If @error Then Return "Erreur (3) sur la structure de la page" $aReturn[$i][1] = $as[0] Next ; Définition For $i = 1 To $aReturn[0][0] $as = _StringBetween($asBody[$i -1], "", "") If @error Then $j = StringInStr($asBody[$i -1], "border='0'>") If $j > 0 Then $aReturn[$i][2] = _RemplaceEntre(StringMid($asBody[$i -1], $j +11), "<", ">", "") Else $aReturn[$i][2] = _RemplaceEntre($as[0], "<", ">", "") EndIf Next Return $aReturn EndFunc ;------------------------------------------------------------------------------ ; Retourne le ou les définitions d'un mot du dictionnaire sur Dictionnaire.tv5.org ; ; IN Idem _DicoDefinition() ; ; OUT Idem _DicoDefinition() ;------------------------------------------------------------------------------ Func _DicoDefinitionDictionnaireTv5Org($sMot, $hForm, $bStopPossible, $bDebug) Local $i, $sa, $s, $aReturn[2][3], $saMot, $saDef, $saCat ; Mode debug _DicoDefinitionModeDebug(0, $sMot, "T", $aReturn, $bDebug) ; Corps de la page HTML du mot trouvé sur dictionnaire.tv5.org Local $sBody = _DicoDefinitionBody("T", $sMot, $hForm, $bStopPossible, $bDebug) ; Erreur remontée ? If StringLen($sBody) < 200 Then Return $sBody ; Trouvé ? If StringInStr($sBody, "" & $sMot & " n'est pas une entrée du dictionnaire") Then Return "Mot non trouvé !" ; $aReturn[0][0] : Nombre de définitions (Nb d'articles) StringReplace($sBody, '(', "") $aReturn[0][0] = @extended If $aReturn[0][0] = 0 Then Return "Mot non trouvé !" ; Bloc recherché $sa = _StringBetween($sBody, '
', '
') If @error <> 0 Then Return "Erreur (1) sur la structure de la page" $s = _RemplaceEntre($sa[0], '", "") $aReturn[$i][0] = StringReplace($aReturn[$i][0], "> ", "") $aReturn[$i][1] = _RemplaceEntre(StringStripWS($saCat[$i -1], 7), "<", ">", "") $aReturn[$i][2] = StringReplace($saDef[$i -1], '
', @CRLF) $aReturn[$i][2] = StringReplace($aReturn[$i][2], @CRLF, "", 1) $aReturn[$i][2] = StringReplace($aReturn[$i][2], @CRLF, "", -2) $aReturn[$i][2] = _RemplaceEntre($aReturn[$i][2], '<', '>', '') Next _DicoDefinitionModeDebug(1, $sMot, "T", $aReturn, $bDebug) Return $aReturn EndFunc ;------------------------------------------------------------------------------ ; Retourne le ou les définitions d'un mot du dictionnaire sur http://www.dictionnaire.net et http://www.conjugaison.net ; ; IN Idem _DicoDefinition() ; ; OUT Idem _DicoDefinition() ;------------------------------------------------------------------------------ Func _DicoDefinitionDictionnaireNet($sMot, $hForm, $bStopPossible, $bDebug) Local $i, $sa, $sMotTrouve, $aReturn[2][3], $saDef, $bTrouve ; Mode debug _DicoDefinitionModeDebug(0, $sMot, "D", $aReturn, $bDebug) ; Corps de la page HTML du mot trouvé sur Dictionnaire.net Local $sBody = _DicoDefinitionBody("DMot", $sMot, $hForm, $bStopPossible, $bDebug) ; Erreur remontée ? If StringLen($sBody) < 200 Then Return $sBody ; Trouvé ? $bTrouve = False If Not StringInStr($sBody, 'finition "' & $sMot & '" non disponible') Then $bTrouve = True ElseIf StringRight($sMot, 1) = "s" Then ; => Pluriel ? $sMot = StringTrimRight($sMot, 1) $sBody = _DicoDefinitionBody("DMot", $sMot, $hForm, $bStopPossible, $bDebug) ; Erreur remontée ? If StringLen($sBody) < 200 Then Return $sBody ; Trouvé ? If StringInStr($sBody, 'finition "' & $sMot & '" non disponible') Then $sMot &= "s" Else $bTrouve = True EndIf EndIf If Not $bTrouve Then ; => Conjugaison $sBody = _DicoDefinitionBody("DVerbe", $sMot, $hForm, $bStopPossible, $bDebug) ; Erreur remontée ? If StringLen($sBody) < 200 Then Return $sBody ; Trouvé ? If StringInStr($sBody, 'CONJUGAISON - Conjugaison française & grammaire des verbes') Then Return "Mot non trouvé !" ; Verbe de référence $sa = _StringBetween($sBody, '

Conjugaison ', '

') If @error <> 0 Then Return "Mot non trouvé !" $sMot = $sa[0] $sBody = _DicoDefinitionBody("DMot", $sMot, $hForm, $bStopPossible, $bDebug) ; Erreur remontée ? If StringLen($sBody) < 200 Then Return $sBody ; Trouvé ? If StringInStr($sBody, 'finition "' & $sMot & '" non disponible') Then Return "Mot non trouvé !!!" EndIf ; $aReturn[0][0] : Nombre de définitions (Nb d'articles) $sa = _StringBetween($sBody, 'class="container-bloc1"> ', '') If @error <> 0 Then Return "Mot non trouvé !" $aReturn[0][0] = UBound($sa) ; $sMotTrouve : Mot trouvé $sa = _StringBetween($sBody, '

Définition', '

') If @error <> 0 Then Return "Erreur (1) sur la structure de la page" $sMotTrouve = StringStripWS($sa[0], 7) ; Définition $saDef = _StringBetween($sBody, 'class="container-bloc1"> ', '
') If @error <> 0 Then Return "Erreur (2) sur la structure de la page" ReDim $aReturn[$aReturn[0][0] +1][3] For $i = 1 To $aReturn[0][0] $aReturn[$i][0] = $sMotTrouve $saDef[$i -1] = StringStripWS($saDef[$i -1], 7) $aReturn[$i][1] = StringLeft($saDef[$i -1], StringInStr($saDef[$i -1], "") -1) $saDef[$i -1] = StringMid($saDef[$i -1], StringInStr($saDef[$i -1], "
") +16) $saDef[$i -1] = _RemplaceEntre($saDef[$i -1], "<", ">", "") $aReturn[$i][2] = StringReplace($saDef[$i -1], "-" & @LF, "- ") Next _DicoDefinitionModeDebug(1, $sMot, "D", $aReturn, $bDebug) Return $aReturn EndFunc ;------------------------------------------------------------------------------ ; Retourne le ou les définitions d'un mot du dictionnaire sur http://www.larousse.f ; ; IN Idem _DicoDefinition() ; ; OUT Idem _DicoDefinition() ;------------------------------------------------------------------------------ Func _DicoDefinitionLarousse($sMot, $hForm, $bStopPossible, $bDebug) Local $i, $j, $k, $n, $s, $sRef0, $saRef, $sa, $saDef, $aReturn[2][3] ; Mode debug _DicoDefinitionModeDebug(0, $sMot, "L", $aReturn, $bDebug) ; Corps de la page HTML du mot trouvé sur Larousse.fr Local $sBody = _DicoDefinitionBody("L", $sMot, $hForm, $bStopPossible, $bDebug) ; Erreur remontée ? If StringLen($sBody) < 200 Then Return $sBody ; $aReturn[0][0] : Nombre de définitions (Nb d'articles) $sa = _StringBetween($sBody, 'class="heading">Articles [', ']<') If @error <> 0 Then Return "Mot non trouvé !" $aReturn[0][0] = Number($sa[0]) ; $sRef0 : La référence de la définition actuelle, sous la forme Mot/xxxxx $sa = _StringBetween($sBody, 'clearfix">', '>Définitions') If @error <> 0 Then Dim $sa[1] = [$sBody] $sa = _StringBetween($sa[0], 'href="/dictionnaires/francais/', '"') If @error <> 0 Then Return "Erreur (1) sur la structure de la page" $sRef0 = $sMot & "/" & StringMid($sa[0], StringInStr($sa[0], "/") +1) ; $saRef[] : Liste des références des N définitions, sous la forme Mot/xxxxx $sa = _StringBetween($sBody, 'class="heading">Articles [', '