[R] InetGetSource et les Regex

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

[R] InetGetSource et les Regex

#1

Message par aurel2108 »

Bonjour à tous,

Voilà, je voudrais faire un petit programme de traduction utilisant Google Translate.
Malheureusement, Google va fermer son API et j'ai donc décidé de passer directement par la page web.
Néanmoins, je suis confronté à ce problème :

Code : Tout sélectionner

#include <Array.au3>
#include <inet.au3>

$source = _INetGetSource("http://translate.google.com/translate_t?hl=&ie=UTF-8&text=test&sl=auto&tl=es")
$resultat = StringRegExp($source, '<span id=result_box class="short_text"><span title="(.*?)" onmouseover="this.style.backgroundColor=' & "'#ebeff9'" & ' onmouseout="this.style.backgroundColor=' & "'#fff'" & '>(.*?)</span></span>', 1)
_ArrayDisplay($resultat)
 
ne fonctionne pas (n'affiche même pas la fenêtre _ArrayDisplay) tandis que :

Code : Tout sélectionner

#include <Array.au3>

$source = '<span id=result_box class="short_text"><span title="test" onmouseover="this.style.backgroundColor=' & "'#ebeff9'" & ' onmouseout="this.style.backgroundColor=' & "'#fff'" & '>test</span>'
$resultat = StringRegExp($source, '<span id=result_box class="short_text"><span title="(.*?)" onmouseover="this.style.backgroundColor=' & "'#ebeff9'" & ' onmouseout="this.style.backgroundColor=' & "'#fff'" & '>(.*?)</span>', 1)
_ArrayDisplay($resultat)
 
Fonctionne.

Je pense donc que cela vient de la fonction InetGetSource mais je ne trouve pas l'erreur.
En effet, INetGetSource me renvoie bien la source et ma regex est correcte.

Merci d'avance de bien vouloir m'aider.
Modifié en dernier par aurel2108 le ven. 22 juil. 2011 00:07, modifié 1 fois.
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] InetGetSource et les Regex

#2

Message par Iste »

Testez manuellement le code renvoyé par _INetGetSource() et vos regexp.

Il y a de forte chance que la source de la page ne soit pas celle que vous voulez.

Pour avoir un résultat certain, utilisez un objet IE (IE.au3)
Signez ici
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

Re: [..] InetGetSource et les Regex

#3

Message par aurel2108 »

En effet, je vais tester si le code source récupéré est correct à ma regex.
Cependant, est-il possible de récupérer le code source avec IE.au3 mais sans ouvrir Internet Explorer ou du moins, sans le voir à l'écran ?

EDIT : Le code récupéré est correct, néanmoins, je n'obtiens toujours rien. :/
Je vais essayer de récupérer le code autrement.
EDIT² : J'ai peut être trouvé, ce serait surement à cause des majuscules.
EDIT 3 : En effet, en modifiant un peu, ça marche avec IE.au3, je cherche toujours pour INetGetSource. :/
EDIT 4 (le dernier) : En bidouillant un chouilla, j'ai trouvé une regex potable pour INetGetSource.

Voilà le code :

Code : Tout sélectionner

#include <Array.au3>

$source = _INetGetSource("http://translate.google.com/translate_t?hl=&ie=UTF-8&text=test&sl=auto&tl=es")
$resultat = StringRegExp($source,'onmouseout="this.style.backgroundColor=(.*?)>(.*?)</span>',2)
MsgBox(0, "Traduction", $resultat[2])
Et veuillez m'excuser du dérangement. :/
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] InetGetSource et les Regex

#4

Message par Iste »

Vous l'avez peut etre vu, mais oui, IE.au3 permet de travailler de manière caché (voir doc)

Sinon, pour avoir déja essayé de faire un _INetGetSource() sur des pages google, j'ai constaté que, comme d'autre, une grande partie de la page se génère apres chargement (par javascript). Du coup, récupérer la source ne fonctionne pas, il faut simuler l'ouverture de la page.
Signez ici
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [R] InetGetSource et les Regex

#5

Message par timmalos »

Je vous conseillerai également de ne pas inclure <Inet.au3> Pour simplement 4 lignes :
Un simple InetRead et BinaryToString suffit ici ;)

Code : Tout sélectionner

Func _INetGetSource($s_URL, $bString = True)
    Local $sString = InetRead($s_URL, 1)
    Local $nError = @error, $nExtended = @extended
    If $bString Then $sString = BinaryToString($sString)
    Return SetError($nError, $nExtended, $sString)
EndFunc   ;==>_INetGetSource
Répondre