# Requires Tcl 8.5+ and tcllib # To enable you must .chanset #channel +wiki package require http package require htmlparse package require tls http::register https 443 [list tls::socket -tls1 1] namespace eval wiki { variable max_lines 1 variable max_chars 400 variable url "https://en.wikipedia.org/wiki/" bind pub -|- ",wiki" wiki::search #variable parse_regexp {(.*?

.*?
)??.*?

(.*?)

\n)?.*?

(.*)(()|(

)).*?((
)|(
.*?

(.*?)<\/p>} setudef flag wiki } proc wiki::fetch {term {url {}}} { if {$url != ""} { set token [http::geturl $url -timeout 10000] } else { set query [regsub -all -- {\s} $term "_"] set token [http::geturl ${wiki::url}${query} -timeout 10000] } set data [http::data $token] set ncode [http::ncode $token] set meta [http::meta $token] upvar #0 $token state set fetched_url $state(url) http::cleanup $token # debug putlog "Fetch! term: $term url: $url fetched: $fetched_url" set fid [open "w-debug.txt" w] puts $fid $data close $fid # Follow redirects if {[regexp -- {^3\d{2}$} $ncode]} { return [wiki::fetch $term [dict get $meta Location]] } if {$ncode != 200} { error "HTTP query failed ($ncode): $data: $meta" } # If page returns list of results, choose the first one and fetch that #if {[regexp -- {

.*?((may refer to:)|(in one of the following senses:))

} $data]} { # regexp -- {