Page 1 sur 1

[...] http request

Posté : mer. 11 mars 2015 20:14
par azerty2699
Bonsoir,
Je cherche un moyen de faire une requête http afin d'accéder au contenu d'une page web et l'afficher, pour faire une recherche google par exemple.
Pour l'instant je ne sais que récupérer le code source d'une page web sans accéder à l'intérieur.

Merci de votre aide.

Re: [...] http request

Posté : mer. 11 mars 2015 21:34
par orax
Je ne comprends pas ce que tu veux dire par accéder à l'intérieur.
http://autoitscript.fr/forum/viewtopic. ... it=WinHTTP Voir l'exemple de PandiPanda avec winhttp.winhttprequest, ou le mien plus loin avec _WinINet* ; même si je doute que ça puisse correspondre à ta demande... Ces exemples permettent de faire une requête plus personnalisable qu'avec un simple inetget().
Il y a aussi l'UDF IE.au3 pour automatiser une fenêtre Internet Explorer ou juste un "objet IE" dans une GUI avec _IECreateEmbedded (une page web intégrée dans la GUI).

Re: [...] http request

Posté : mer. 11 mars 2015 23:01
par azerty2699
En fait si j'arrive à couper une chaîne de caractère ce serait très bien, as-tu une idée pour cela ?
"couper" je veux dire en selectionner juste une partie.

Re: [...] http request

Posté : mer. 11 mars 2015 23:28
par orax
Il y a certaines fonctions des rubriques String Management (celles qui commencent par String* ou _String*). Comme StringSplit, StringLeft, StringMid, etc.
Quelle fonction utiliser ? C'est au cas par cas. Il y a aussi StringRegExp qui permet de faire beaucoup de choses mais qui est un plus complexe.

Re: [...] http request

Posté : mer. 11 mars 2015 23:41
par azerty2699
Difficile de trouver quelque chose qui correspond vraiment à mon cas ici... Voilà ce que j'essaye de faire précisément :
Je cherche à récupérer le premier paragraphe de la page, donc le programme doit :

-chercher dans le code source le premier "<p>" qu'il trouve
-chercher dans le code source le premier "</p>" qu'il trouve
-conserver uniquement ce qui se trouve entre les deux.

Est-ce que mon explication est claire ?

Re: [...] http request

Posté : jeu. 12 mars 2015 00:05
par orax

Code : Tout sélectionner

#include <String.au3>
$aArray = _StringBetween("<p>blabla</p>", "<p>", "</p>")
ConsoleWrite($aArray[0] & @CRLF)

Re: [...] http request

Posté : jeu. 12 mars 2015 15:15
par mikell
ça serait une bonne occasion de s'initier à StringRegExp (facile dans ce cas)

Code : Tout sélectionner

Msgbox(0,"", StringRegExpReplace($source, '(?s).*?<p>(.*?)</p>.*', "$1")

Re: [...] http request

Posté : jeu. 12 mars 2015 23:14
par azerty2699
Merci à vous deux, _StringBetween() et StringRegExpReplace() fonctionnent bien.
Cependant orax, j'ai remarqué que par exemple _StringBetween($oReceived, "<p>", "</p>") ne permet de récupérer que ce qui se trouve dans le premier paragraphe, mais je n'ai pas trouvé de moyen d'obtenir ce qui se trouve dans le deuxième, ou même les deux (récupérer les deux premiers paragraphes).

N'y a-t-il pas un moyen de filtrer facilement l'intérieur d'une chaîne de caractères selon les critères qu'on veut ?

Sinon mikell, si par exemple on a la chaîne

"<b>blabla</b><i>blablabla</i>"

comment remplacer "<b>" et "</b>" et "<i>" et "</i>" par une chaîne vide ? (afin de les supprimer au fait)
sans suppimer les autres "b" et "i" eventuellement présents dans le reste de la chaîne ?
J'ai essayé ceci mais ça supprime aussi tous les autres "b" qu'il trouve :

Code : Tout sélectionner

[spoiler=]#include <String.au3>
Global $forb1 = "<b>"
$search = InputBox("", "Search :")

$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET", "http://fr.wikipedia.org/wiki/" & $search, False)

$oHTTP.Send()
$oReceived = $oHTTP.ResponseText
$oStatusCode = $oHTTP.Status

If $oStatusCode == 200 Then
    $final1 = _StringBetween($oReceived, "<p>", "</p>")
    $final2 = StringRegExpReplace($final1[0], "[" & $forb1 & "]", "")
    MsgBox(0, "", $final2)
Else
    MsgBox(0,"","erreur inconnue")
EndIf[/spoiler]
Merci.

Re: [...] http request

Posté : jeu. 12 mars 2015 23:49
par jguinch
En fait tu veux supprimer toutes les balises, non ?

Code : Tout sélectionner

$final2 = StringRegExpReplace($final1[0], "<.*?>", "")

Re: [...] http request

Posté : jeu. 12 mars 2015 23:51
par orax
azerty2699 a écrit :j'ai remarqué que par exemple _StringBetween($oReceived, "<p>", "</p>") ne permet de récupérer que ce qui se trouve dans le premier paragraphe
T'avais bien compris que _StringBetween renvoie un tableau ?
► Afficher le texte
[<b>] va trouver les caractères < ou b ou > mais pas la chaîne entière <b>.

Re: [...] http request

Posté : ven. 13 mars 2015 00:15
par azerty2699
Merci jguinch, en effet je n'avais pas pensé à utliser le joker "*"...
Orax j'avais remarqué ça mais quand j'essayais $final1[1] j'obtenais une boîte de dialogue vide, simplement parce que le paragrapheétait vide...

merci pour vos réponses.