Page 1 sur 1

Récupérer la définition d'un mot français

Publié : ven. 21/mai/2021 10:33
par Ar-S

Code : Tout sélectionner

InitNetwork()


Procedure.s CatchDefinition(word.s)
    ; by Ar-S
    Protected BaseURL$ = "https://api.dictionaryapi.dev/api/v2/entries/fr/", urlinfo$, start
    ; 
    urlinfo$=BaseURL$+word.s
    ; 
    Request = HTTPRequest(#PB_HTTP_Get, urlinfo$)
    If Request
        If HTTPInfo(Request, #PB_HTTP_StatusCode) = "200"
            HTML$ = HTTPInfo(Request, #PB_HTTP_Response)
            
            ;             Debug HTML$
            ; Chargement du JSON
            
            N = CountString (HTML$, "definition"+Chr(34))
            start = 0
            
            If N = 1
                
                Start = FindString(HTML$,"definition"+Chr(34),0)
                Start+13
                Fin = FindString(HTML$,".",Start)
                
                def.s = Mid(HTML$,start,fin-start)
            Else

                For i = 1 To N
                    
                    Start = FindString(HTML$,"definition"+Chr(34),start)
                    Start+13
                    Fin = FindString(HTML$,".",Start)
                    def.s + Mid(HTML$,start,fin-start)+Chr(10)
                    start = Fin
                    
                Next
                
            EndIf    
            
        Else
            def = "Pas de données pour ce mot" 
        EndIf
        
    Else
        def = "La requête n'a pas aboutie"
    EndIf
    
    ProcedureReturn def

EndProcedure

; ----------EXAMPLE-----------

Debug CatchDefinition("programmation")
Debug CatchDefinition("cacao")
Debug CatchDefinition("chinois")
Debug CatchDefinition("serviette")

Re: Récupérer la définition d'un mot français

Publié : ven. 21/mai/2021 11:49
par venom
Sympa, je ne connaissais pas cette API.
Merci du partage :wink:






@++

Re: Récupérer la définition d'un mot français

Publié : ven. 21/mai/2021 12:26
par jak64
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...

Merci pour ta contribution.

Re: Récupérer la définition d'un mot français

Publié : ven. 21/mai/2021 15:35
par jak64
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 :

Code : Tout sélectionner

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

Re: Récupérer la définition d'un mot français

Publié : dim. 30/mai/2021 1:43
par Ollivier
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.

Re: Récupérer la définition d'un mot français

Publié : lun. 31/mai/2021 9:14
par Kwai chang caine
Cool comme fonction :D
Fallait y penser :idea:
Encore faut il que le site soit perenne :wink: en tout cas merci pour le partage 8)

Re: Récupérer la définition d'un mot français

Publié : lun. 31/mai/2021 17:28
par jak64
Bonjour Kwai chang caine

Encore faut-il que nous aussi soyons pérennes mais ça ...

Re: Récupérer la définition d'un mot français

Publié : lun. 31/mai/2021 20:30
par Kwai chang caine
J'espere au moins autant que le site :wink: :lol:

Re: Récupérer la définition d'un mot français

Publié : mar. 01/juin/2021 14:29
par Micoute
PureBasic nous survivra.

Re: Récupérer la définition d'un mot français

Publié : mar. 01/juin/2021 16:48
par Kwai chang caine
Surtout nous :wink: :mrgreen:

Re: Récupérer la définition d'un mot français

Publié : mar. 01/juin/2021 16:48
par Kwai chang caine
Surtout nous :wink:
Il aura pas trop de mal :lol:

Re: Récupérer la définition d'un mot français

Publié : mar. 01/juin/2021 17:32
par Micoute
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 ...

Re: Récupérer la définition d'un mot français

Publié : mar. 01/juin/2021 18:12
par jak64
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.

Re: Récupérer la définition d'un mot français

Publié : mar. 01/juin/2021 20:04
par Ar-S
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.