Me revoilà pour un petit projet pour le boulot.
Dans ma boite on a un problème, les personnes ne vont pas voir l'intranet. Le directeur voudrait qu'on ai sur les postes, une application qui ouvre une petite fenêtre en pop-up lorsque l'application détecte qu'un RSS ou qu'une page web a été modifier sur l'intranet.Et ainsi inviter les personnes a venir voir l'info
Et a mon avis utiliser PB pour faire cette application est l'idéal.
Voici le bout de code que j'utilise pour détecter qu'un file RSS ou une page web a changé.
Qu'en pensez vous ? y a t'il une meilleur façon de faire ?
Code : Tout sélectionner
InitNetwork()
Procedure.l DownloadToMem ( URL.s, *lpRam, ramsize.l )
Protected agent.s, hInet.l, hData.l, Bytes.l
; #INTERNET_OPEN_TYPE_DIRECT = 1
; #INTERNET_DEFAULT_HTTP_PORT = 80
; #INTERNET_SERVICE_HTTP = 3
; #INTERNET_FLAG_NO_CACHE_WRITE = $4000000
; #INTERNET_FLAG_RELOAD = $8000000
agent.s = "Mozilla/4.0 (compatible; ST)"
hInet.l = InternetOpen_ ( @agent.s,0,0,0,0 )
hData.l = InternetOpenUrl_ ( hInet, @URL.s, "", 0, $8000000, 0 )
If hData > 0 : InternetReadFile_ ( hData, *lpRam, ramsize.l, @Bytes.l ) : Else : Bytes = -1 : EndIf
InternetCloseHandle_ (hInet)
InternetCloseHandle_ (hFile)
InternetCloseHandle_ (hData)
ProcedureReturn Bytes.l
EndProcedure
;Structure pour mémoriser les différents URLs a surveiller
Structure WebList
name.s ;Un nom
url.s ;l'adresse URL a surveiller
fingerPrint.s ;l'emprunte de la page (pour savoir si ça changé)
EndStructure
Global NewList WebList.WebList()
;Une pseud
AddElement(WebList())
WebList()\url="http://ecotidien.typhon.net/feed/";
AddElement(WebList())
WebList()\url="http://www.lemonde.fr/rss/une.xml";
;on test tout les liens et on verifie si certain on changer ...
Procedure Check()
ForEach WebList()
Debug WebList()\url
Result.s = Space(63000)
Size= DownloadToMem ( WebList()\url, @Result, 63000 )
If Size>0
fingerprint.s=SHA1Fingerprint(@Result, Size)
;Si la page a changé
If WebList()\fingerPrint<>fingerprint
Debug "la page a changé"
WebList()\fingerPrint=fingerprint
Debug Result
EndIf
EndIf
Next
EndProcedure
;Une pseudo boucle pour tester si ça marche
For z=1 To 4000
Delay(10000)
Check()
Next