Page 1 sur 1

surveiller un RSS ou un site web

Publié : lun. 17/janv./2011 14:15
par Thyphoon
Hello !

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

Re: surveiller un RSS ou un site web

Publié : lun. 17/janv./2011 16:39
par Ar-S
Ce sont des pages RSS internes ou pas, y as tu accès ?
Si oui il suffit de "marquer" la page avec une valeur x dans la source et de vérifier si cette valeur a changée (ID de la dernière news par exemple).

Re: surveiller un RSS ou un site web

Publié : lun. 17/janv./2011 16:59
par Thyphoon
Ar-S a écrit :Ce sont des pages RSS internes ou pas, y as tu accès ?
Si oui il suffit de "marquer" la page avec une valeur x dans la source et de vérifier si cette valeur a changée (ID de la dernière news par exemple).
Oui ça peut être une bonne idée... je vais regarder ça ... le problème c'est qu'on a pas acces au code de l'intranet ...

Re: surveiller un RSS ou un site web

Publié : lun. 17/janv./2011 17:05
par Ar-S
c'est à voir avec le webmaster

Re: surveiller un RSS ou un site web

Publié : lun. 17/janv./2011 17:25
par Thyphoon
Ar-S a écrit :c'est à voir avec le webmaster
Oui mais même le webmaster n'a pas accès au code, c'est un produit clef en main ...

Re: surveiller un RSS ou un site web

Publié : lun. 17/janv./2011 20:46
par case
c'est bête d'avoir tout les postes qui doivent vérifier si il y a eu changement des pages non ? si c'est une grosse boite ca vas faire plein de requêtes sur l'intégralité des pages du serveur... sans compter que ca vas bouffer tu temps machine sur chaque poste... et de la bande passante plus utilie a autre chose , enfin il me semble non ?

le plus simple serait d'avoir la possibilité que chaque client interroge un fichier texte généré chaque jour par un logiciel avec une tache planifiée sur le serveur par exemple.

du coup le client interrogerais uniquement le fichier du jour pour avoir les url modifiées. et les popuperais a la face du vil collaborateur qui a rien a foutre de l'intranet et des flux rss de la boite :)

mais pour ca faudrait avoir accès au serveur.