[...] http request

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
azerty2699
Niveau 3
Niveau 3
Messages : 47
Enregistré le : mer. 07 janv. 2015 18:58
Status : Hors ligne

[...] http request

#1

Message 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.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [...] http request

#2

Message 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).
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
azerty2699
Niveau 3
Niveau 3
Messages : 47
Enregistré le : mer. 07 janv. 2015 18:58
Status : Hors ligne

Re: [...] http request

#3

Message 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.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [...] http request

#4

Message 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.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
azerty2699
Niveau 3
Niveau 3
Messages : 47
Enregistré le : mer. 07 janv. 2015 18:58
Status : Hors ligne

Re: [...] http request

#5

Message 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 ?
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [...] http request

#6

Message par orax »

Code : Tout sélectionner

#include <String.au3>
$aArray = _StringBetween("<p>blabla</p>", "<p>", "</p>")
ConsoleWrite($aArray[0] & @CRLF)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] http request

#7

Message 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")
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
azerty2699
Niveau 3
Niveau 3
Messages : 47
Enregistré le : mer. 07 janv. 2015 18:58
Status : Hors ligne

Re: [...] http request

#8

Message 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.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [...] http request

#9

Message par jguinch »

En fait tu veux supprimer toutes les balises, non ?

Code : Tout sélectionner

$final2 = StringRegExpReplace($final1[0], "<.*?>", "")
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [...] http request

#10

Message 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>.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
azerty2699
Niveau 3
Niveau 3
Messages : 47
Enregistré le : mer. 07 janv. 2015 18:58
Status : Hors ligne

Re: [...] http request

#11

Message 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.
Répondre