From 985dcb2901d2527b79976df787035425294200b9 Mon Sep 17 00:00:00 2001 From: fireonlive Date: Fri, 9 Aug 2024 19:04:10 +0000 Subject: init --- wiki.tcl | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 wiki.tcl (limited to 'wiki.tcl') diff --git a/wiki.tcl b/wiki.tcl new file mode 100644 index 0000000..4e9c203 --- /dev/null +++ b/wiki.tcl @@ -0,0 +1,111 @@ +# 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 -- {