# Dieser Quelltext ist größtenteils tclweather.tcl # von Jason Tang (tang@jtang.org) entnommen. # Also visit http://mini.net/tcl/tclweather # Er stellt die Verbindung zu dem Server her # und läßt die Daten in gui::formatData aufbereiten # set ::tw(location_code) EDDI set ::tw(ort) Hamburg set ::tw(use_proxy) 0 set ::tw(print_obsdata) 1 set ::tw(location_filename) "location.txt" package require http namespace eval ::metar { } proc ::metar::download_observation {} { global tw puts "download_observation $tw(location_code)" if {$tw(use_proxy)} { http::config -proxyhost $tw(proxy_host) -proxyport $tw(proxy_port) if {![string equal $tw(proxy_name) ""]} { set passphrase "$tw(proxy_name):$tw(proxy_password)" set authorization [list "Proxy-authorization" \ "basic [base64_encode $passphrase]"] } } else { set authorization [list "" ""] } if {[catch {set token [http::geturl \ http://weather.noaa.gov/cgi-bin/mgetmetar.pl?cccc=$tw(location_code) \ -headers $authorization]}] != 0 ||\ [http::ncode $token] != 200} { puts fehler ;# error downloading catch {http::cleanup $token} return [list "" ""] } ;# scan through for both the date and observation data set date "" set observation "" set in_date 0 set in_observation 0 puts [http::data $token] foreach line [split [http::data $token] "\n"] { if {$in_date == 1} { if {[string equal $line ""] || [regexp {\/FONT} $line]} { set in_date 2 } else { append date $line } } elseif {$in_observation} { if {[string equal $line ""] || [regexp {\/font} $line]} { set in_observation 2 } else { append observation $line } } elseif {[regexp {FONT COLOR} $line]} { set in_date 1 } elseif {[regexp {font face} $line] && $in_date == 2 && $in_observation == 0} { set in_observation 1 } } http::cleanup $token return [list $date $observation] } proc ::metar::update_data {} { global tw latest_data foreach {date observation} [download_observation] {} if {[string equal $date ""] || [string equal $observation ""]} { set tw(downloadFailed) true } else { set tw(downloadFailed) false parse_weather $observation new_data #parray new_data gui::formatData [array get new_data] } } proc ::metar::update_loc {} { load_location_cache $tw(location_filename) }