Posted to tcl by dkf at Thu May 06 12:37:06 GMT 2010view raw
- package require http
- package require tdom
- bind PUB - !start startFetchAndPrint
- bind PUB - !stop stopFetchAndPrint
- proc getCurrentMessage {url} {
- set t [http::geturl $url]
- set doc [dom parse [http::data $t]]
- http::cleanup $t
- set titles {}
- foreach node [$doc selectNodes /channel/item/title] {
- lappend titles [$node text]
- }
- $doc delete
- return [join $titles \n]
- }
- # The work to do each iteration
- proc fetchAndPrint {} {
- global currentMessage currentSchedule targetChannel
- # Reschedule the call to this in 60 seconds, saving the token so we
- # can cancel it later. (That enables !stop)
- set currentSchedule [after 60000 fetchAndPrint]
- # Fetch the current message
- set msg [getCurrentMessage "http://rit.me.uk/livescore/cricrss.php"]
- # Print it (line at a time) if there's been a change
- if {$msg ne $currentMessage} {
- set currentMessage $msg
- foreach line [split $msg \n] {
- puthelp "PRIVMSG $targetChannel :\00310$line\003"
- }
- }
- }
- # How to start things
- proc startFetchAndPrint {nick uhost hand chan arg} {
- global currentMessage targetChannel
- set currentMessage {}
- set targetChannel $chan
- # This will install the next scheduled callback immediately
- fetchAndPrint
- }
- # How to stop things
- proc stopFetchAndPrint {nick uhost hand chan arg} {
- global currentSchedule
- if {[info exists currentSchedule]} {
- after cancel $currentSchedule
- }
- }