Page 1 sur 1

Recuperer le contenu d'une page web

Publié : lun. 16/mai/2011 16:34
par Parole De JOJO
Coucou, me revoila, une petite visite le temps de creer un petit programme que j'ai promis a un copain
Premierement j'en profite pour presenter des excuses a Dobro envers qui je me suis adresse malpoliment la derniere fois que je suis rentre ici.

Deuxiemement .. voila : J'ai fait une recherche, mais je n'ais trouve que des API, ce qui n'est pas vraiment pratique pour le petit project que j'entreprends : Existe-t-il une fonction Purebasic pour recuperer le contenu d'une page web, afin de la stocker dans une variable, puis la traiter? Il s'agit d'un petit code HTML, rien de tres complique ni de tres lourd.
Je ne sais pas pourquoi mais j'ai le souvenir d'avoir un jour fait ca pour recuperer un numero de version d'un programme mais je ne retrouve plus la source

Si c'est impossible, quel est le moyen le plus simple de le faire via les apis?

Merci beaucoup et bonne soiree

Re: Recuperer le contenu d'une page web

Publié : lun. 16/mai/2011 16:39
par Chris
Il y a la bibliothèque "Http" qui fonctionne bien pour ça.

Code : Tout sélectionner

InitNetwork()
Dir$ = GetCurrentDirectory()
Page$ = Dir$ + "index.php"


;/ Connexion au site, et téléchargement de la page d'index
Result = ReceiveHTTPFile("http://www.purebasic.fr/french/", Page$)

;/ Lecture du fichier et mise en mémoire
If Result <> 0
  If ReadFile(0, Page$)
    L = Lof(0) : *Mem = AllocateMemory(L)
    If *Mem
      ReadData(0, *Mem, L)
      Fichier$ = PeekS(*Mem, MemoryStringLength(*Mem), #PB_UTF8)
    EndIf
    FreeMemory(*Mem) : CloseFile(0)
  EndIf
EndIf

Debug Fichier$

Re: Recuperer le contenu d'une page web

Publié : lun. 16/mai/2011 16:40
par Cls
Avec le WebGadget, tu as GetGadgetItemText() avec l'attribut #PB_Web_HtmlCode.

Re: Recuperer le contenu d'une page web

Publié : lun. 16/mai/2011 16:44
par Parole De JOJO
@chris, c'est ce que je fais en attendant, mais c'a m'oblige a telecharger le fichier alors que je voudrais le lire en ligne

@cls, c'est une bonne idee, mais il faut un webgadget, disons invisible, mais c'est un petit peu tordu comme systeme et peut etre meme plus lent que de recuperer la page.

en fait il ne s'agit que d'une seule ligne, je suis certain d'avoir vu une fois une procedure pour cela


Merci

Re: Recuperer le contenu d'une page web

Publié : lun. 16/mai/2011 16:52
par Chris
@chris, c'est ce que je fais en attendant, mais c'a m'oblige a telecharger le fichier alors que je voudrais le lire en ligne
Tu parles d'une affaire: Télécharger un fichier de quelques dizaine d'octets.
D'autant plus que si tu ne changes pas son nom dans la variable "Page$", il est systématiquement écrasé par le téléchargement suivant.

Rien ne t'empêche, une fois qu'il est en mémoire dans le buffer, de le supprimer. Ça ne fait qu'une ligne de code en plus. :wink:

Re: Recuperer le contenu d'une page web

Publié : lun. 16/mai/2011 16:56
par Parole De JOJO
OK merci, je voulais juste savoir si il n'y a pas plus simple

Re: Recuperer le contenu d'une page web

Publié : mer. 18/mai/2011 14:09
par graph100
malheureusement, ce que j'ai ne se fait que par API, j'ai emprunté le code à qqun, je ne sais plus qui ;'(

Code : Tout sélectionner

ProcedureDLL.s Url2Text2(Url.s, OpenType.b,ProxyAndPort.s)
	; 1 INTERNET_OPEN_TYPE_DIRECT Resolves all host names locally.
	; 0 INTERNET_OPEN_TYPE_PRECONFIG Retrieves the proxy Or direct configuration from the registry.
	; 4 INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY Retrieves the proxy Or direct configuration from the registry And prevents the use of a startup Microsoft JScript Or Internet Setup (INS) file.
	; 3 INTERNET_OPEN_TYPE_PROXY Passes requests To the proxy unless a proxy bypass list is supplied And the name To be resolved bypasses the proxy. In this Case, the function uses INTERNET_OPEN_TYPE_DIRECT.
	
	
	
	isLoop.b=1
	INET_RELOAD.l = $80000000
	hInet.l=0
	hURL.l=0
	Bytes.l=0
	Buffer.s= Space (2048 )
	RES.s= ""
	
	
	hInet = InternetOpen_ ( "" , OpenType, ProxyAndPort, "" , 0)
	hURL = InternetOpenUrl_ (hInet, Url, #Null , 0, INET_RELOAD, 0)
	
	If hURL
		
		Repeat
			InternetReadFile_ (hURL,@Buffer, Len (Buffer), @Bytes)
			
			If Bytes = 0
				isLoop=0
			Else
				RES = RES + Left (Buffer, Bytes)
			EndIf
		Until isLoop=0
		
		InternetCloseHandle_ (hURL)
		InternetCloseHandle_ (hInet)
		
	Else
		ProcedureReturn "CONNECTION ERROR"
	EndIf
	
	ProcedureReturn RES
EndProcedure