[Richard Suchenwirth] 2007-06-05 - If you want to see what's going on in the [Tcl chatroom], but don't have a chat client available, the following script retrieves the current day's log via [http] and renders it in [HTML] to stdout. Redirect it into a file, point your browser to it, enjoy! :^)
#!/usr/bin/env tclsh
set usage {
usage: today.tcl > today.html
Retrieve today's chat log, format into HTML on stdout
}
set base http://tclers.tk/conferences/tcl/
if {$argv eq "-h"} {puts $usage; exit 1}
proc main argv {
package require http
set date [clock format [clock sec] -format %Y-%m-%d]
#http::config -proxyhost proxy -proxyport 80
set token [http::geturl $::base/$date.tcl -headers {Pragma no-cache}]
puts "
Tclers' Chat of $date"
eval [html'escape [http::data $token]]
puts
[clock format [clock sec]]
}
interp alias {} html'escape {} string map {< < > > & &}
#-- All chat entries invoke [m]
proc m {time who what} {
if {$who eq "ijchain"} {
set who [lindex [split $what] 0]
if {$who eq "***"} {set who ""}
set what [join [lrange [split $what] 1 end]]
}
set what [string map {\n
} $what]
if {$who eq ""} { #-- join/leave message
puts "
* $what"
} elseif {[string match /me* $what]} { #-- "action"
puts "
$who [string range $what 4 end]"
} else { #-- regular message
puts "
$who: $what"
}
}
main $argv
----
[RS] update: added Pragma no-cache and \n substitution (for multi-line posts). Notice that the html'escape alias got garbled: the [string map] makes no sense. Replace with (removing the _):
< &_lt_; > &_gt_; & &_amp_;
----
[LV] 2007 June 05 - well, this seems to provide the heart of a [CGI] script to display the chat. With some work on generating input to the chat from CGI, we could be back in the chat room ;-) ...
[RS] Yes indeed. If [Tkabber] could take chat posts from a HTTP POST, that would be even easier - the above script would at the end produce an entry widget and a Post button which would do the right thing...
----
[Category Example]