Bonjour ar-s
Merci pour ce module, je l'intégrerai peut-être mais il ne prend pas en compte les verbes conjugués, par exemple.
Si je l'intègre, j'afficherai la définition dans une info bulle s'il la trouve, sinon, j'utiliserai le lien qui ouvre google avec le mot recherché.
J'ai aussi testé avec Larousse, Le petit robert, etc...
Bonjour,
En m'inspirant du code fourni par Ar-s, j'ai fait la même fonction en utilisant un autre dictionnaire qui trouve aussi (pas tous...) les verbes conjugués entre autres. J'ai mis aussi une boucle pour lancer la requête (10 fois max) car, parfois, la requête n'aboutit pas dans le temps imparti (j'ai un faible débit dans ma jolie ville).
Voici le code :
EnableExplicit
If InitNetwork()=0 : MessageRequester("Erreur", "InitNetwork() non initialisé !"):End:EndIf
Procedure.s definition_du_mot(mot.s)
; Modifiée par jak64 en prenant pour base le code de Ar-s
Protected debut_url.s = "http://dictionnaire.sensagent.leparisien.fr/"
Protected fin_url.s="/fr-fr/"
Protected url.s
Protected requete.q
Protected resultat.s
Protected debut.i
Protected fin.i
Protected chaine_recherchee_avant.s="</span><span class="+Chr(34)+"wording"+Chr(34)+">"
Protected chaine_recherchee_apres.s="<"
Protected nb_definitions.b
Protected nu_definitions.b
Protected definitions.s
Protected nb_essais.b=0
;= Construction de l'url avec le mot dont on recherche la ou les définition(s)
url=debut_url+mot.s+fin_url
;= Lancement de la requête
While nb_essais<10
requete = HTTPRequest(#PB_HTTP_Get, url)
If requete
If HTTPInfo(requete, #PB_HTTP_StatusCode) = "200" ; La requête s'est bien déroulée
resultat = HTTPInfo(requete, #PB_HTTP_Response)
nb_essais=10
;= Compter combien de définitions existent pour le mot passé en paramètre
nb_definitions = CountString (resultat, chaine_recherchee_avant)
definitions="----- Définitions de "+ mot + " -----" + Chr(10) + Chr(10)
If nb_definitions>0
debut=1
;= Boucle pour extraire chaque définition
For nu_definitions=1 To nb_definitions
;= Rechercher la chaîne avant la définition
Fin = FindString(resultat,chaine_recherchee_avant,debut)
;= Rechercher la chaîne après la définition
debut=fin+29
Fin = FindString(resultat,chaine_recherchee_apres,debut)
;= Stocker les définitions en ajoutant un retour à la ligne entre chacune d'elles
definitions + Right("0"+Str(nu_definitions),2) + " - " + Mid(resultat,debut,fin-debut)+Chr(10)
Next nu_definitions
Else
definitions = "Pas de définition trouvée pour " + mot + Chr(10)
EndIf
Else
nb_essais+1
EndIf
Else
definitions = "La requête n'a pas aboutie"
EndIf
Wend
ProcedureReturn definitions
EndProcedure
;= Exemples d'utilisation
Debug definition_du_mot("turlupinais")
Debug "***************************************************************************************************************"
Debug definition_du_mot("gâteau")
Debug "***************************************************************************************************************"
Debug definition_du_mot("IncAs")
Debug "***************************************************************************************************************"
Debug definition_du_mot("DEFINISSAIENT")
Debug "***************************************************************************************************************"
Debug definition_du_mot("empaquetées")
Debug "***************************************************************************************************************"
Debug definition_du_mot("AXENE")
Debug "***************************************************************************************************************"
Debug definition_du_mot("aller-retour")
Debug "***************************************************************************************************************"
Debug definition_du_mot("azertyuiop")
Debug "***************************************************************************************************************"
End
J'ignore pourquoi ça me stresse ces systèmes on-line. Pour ce type de truc, je préfère quelquechose d'embarqué. C'est sûr c'est x fois plus lourd (faire une base de définition, comme la gérer) mais, grosso modo, ça prend 8 méga pour tous les mots et accords, et 128 méga, pour des définitions d'une vingtaine de mots en moyenne.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Ca me rend un peu triste d'avoir vécu la majorité de ma vie sans connaître ce langage si facile à apprendre et qui fait des merveilles, si j'avais eut toutes ces choses quand j'étais analyste-programmeur ...
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Je comprends Micoute,
Mais comme on devait tout programmer, ça nous a permis de faire les tris bulle ou par insertion, de faire de l'assembleur, de nous poser des tas de questions car les langages de l'époque n'offraient pas la richesse de ceux d'aujourd'hui. Je me souviens d'avoir programmé, entre autres, en cobol, des calendriers quo sortaient imprimés sur des grosses imprimantes à bande pilote et là y'avait aucune fonction sur les dates, c'était formateur.
PB peut toujours servir.
En ce moment je me suis replongé dans PHP/MySQL car j'ai rejoint un projet assez gros projet mêlant :
Unity/Oculust Quest et pour gérer tout ça, des API php qui communique avec MySQL.. Et pour upper les fichiers de mises à jour et des videos 360° j'ai fait un Client FTP en purebasic ! Ce dernier est juste excellent. En glissant déposant un fichier dessus,
- il l'up
- il génère un UUID
- il date le nom du fichier
- il renseigne la BDD en envoyant toutes ces infos à un API que j'ai fait en PHP.
Tout ça pour 668 ko !
PB est formidable et ses prochaines moutures, si elles permettent une installation sur ARM (Rpi par exemple), ça va être énorme.