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 ?
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
Code : Tout sélectionner
#include <String.au3>
#include <array.au3>
Global $forb1 = "<b>"
$search = InputBox("", "Search :")
$sReceived = InetRead ("http://fr.wikipedia.org/wiki/" & $search) ; une alternative pour faire la requête
$sReceived = BinaryToString($sReceived, 4) ; UTF8
If Not @error Then
$final1 = _StringBetween($sReceived, "<p>", "</p>") ; $final1[0] = 1er paragraphe, $final1[1] = 2ème paragraphe...
_ArrayDisplay($final1)
$final2 = StringRegExpReplace($final1[0], $forb1, "") ; il ne faut pas mettre les [ ]
MsgBox(0, "", $final2)
Else
MsgBox(0, "", "erreur inconnue")
EndIf
[<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.