Communauté sur les Eggdrops - Community about Eggdrops
Lire une ligne précise sur une page html - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (https://forum.eggdrop.fr)
+-- Forum: Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum: Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Thread: Lire une ligne précise sur une page html (/showthread.php?tid=5)



Lire une ligne précise sur une page html - BdS - 13/09/2006

J'ai un petit souci:

Je sais faire lire une page web a mon egg, cependant il lit toujours la premiere.
Ce que je voudrais c'est lui donné la ligne a lire, et non pas automatiquement la premiere ...

Voila le code que j'utilise:


Code:
bind pub mn !test pub:test
proc pub:test { nick uhost handle chan arg } {
set lsl(avant) "l'url du site"
set key [http::geturl $lsl(avant)]
set line [http::data $key]
putserv "PRIVMSG $chan : \00302,00$line"
}
Merci d'avance : )


- CrazyCat - 13/09/2006

C'est normal, ta variable $line contient en fait l'intégralité de ta source html, tu ne vois que la première ligne car le caractère de nouvelle ligne (\n) est interprété.
Donc, il te faut transformer ta page html en un tableau de lignes pour pouvoir aller lire la bonne:

Code:
bind pub mn !test pub:test
proc pub:test { nick uhost handle chan arg } {
   set lsl(avant) "l'url du site"
   set key [http::geturl $lsl(avant)]
   set arrlines [split [http::data $key] "\n"]
   incr arg -1
   putserv "PRIVMSG $chan : \00302,00$arrlines($arg)"
}
Je pars bien sur du principe que $arg est le N° de la ligne que tu veux lire.


- BdS - 13/09/2006

Je test et je te dis si c'est mon bonheur ! Merci : )

(la classe ton nom de domaine ^^;)


- BdS - 14/09/2006

Je n'arrive pas a avoir ce que je veux.

L'url ou l'egg va chercher des infos: ici

Je veux pouvoir recuperer les 10 lignes ensemble ou separement, ou sont les titres, mais a la demande.

Merci d'avance CrazyCat : )


- CrazyCat - 14/09/2006

ah oui, le code html est mal foutu, difficile à parser...
Il faudrait que tu puisses modifier le générateur pour ajouter un caractère particulier devant chaque ligne intéressante.
Sinon, il faut aller récupérer une chaine particulière (<b>Song Title</b> par exemple), et faire une regexp qui permette de récupèrer les autres lignes, du genre "<td>(*)<\/td>"...

J'essayerais de voir ça demain :)


- BdS - 02/10/2006

j'ai toujours pas reussi :(


- CrazyCat - 03/10/2006

Le plus simple que je vois, c'est de traiter ta chaine ainsi ($webpage contient ta source)

Code:
# on récupère ce qui est entre "<b>Song Title</b></td></tr>" et le premier "</table>" situé après
regsub -all {.*<b>Song Title</b></td></tr>(.*)</table>} $webpage "\\1" webpage
# on sépare sur les "</tr>"
foreach line [split $webpage "</tr>"] {
   # on supprime les balises HTML
   regsub -all {<[^>]>} $line "" line
   # on affiche
   putserv "PRIVMSG $chan :$line"
}
Bon, c'est fait à l'arrache, je ne promet rien :)


- BdS - 03/10/2006

j'vais m'en débrouiller, merci : )