Based on FordLawnmower's version.
Will check all web addresses that are posted on a channel. Can change options on which ones to show.
package require http
namespace eval webadvisor {
#Use lowercase letters only for this setting.
variable showsafe "on"
variable showwarning "on"
variable showdanger "on"
}
bind pubm - "*" main
proc main {nick host hand chan text} {
if {[regexp {(www\.|http\:\/\/)([^\s]+)} [strip $text] a b site]} { putserv "PRIVMSG $chan :[resolve $site]" }
}
proc check {site} {
set url "http://www.siteadvisor.com/sites/$site"
set page [web2data $url]
if {[regexp {class="siteGreen">} $page] && $webadvisor::showsafe == "on"} { return "(SAFE) No problems found with: $site"
} elseif {[regexp {class="siteYellow">} $page] && $webadvisor::showwarning == "on"} { return "(CAUTION) Found potential suspicious behavior on: $site"
} elseif {[regexp {class="siteRed">} $page] && $webadvisor::showdanger == "on"} { return "(DANGER) Found potential security risks with: $site" }
}
proc resolve {site} {
set url "http://$site"
set page [web2data $url]
if {$page == 0} { return }
if {[string range $page 0 3] != "301"} { return [check $site]
} elseif {[regexp {href="(.*?)">?i} $page match site]} { return [check $site]
} elseif {[regexp {<html} $page]} { return [check $site] }
}
proc strip {text} { return [regsub -all -- {\017|\015|\031|\002|\037|\026|\003(\d{1,2})?(,\d{1,2})?} $text ""] }
proc web2data {website} {
package require http
if { [catch { set token [http::geturl $website -timeout 100000]} error] } { return 0
} elseif { [http::ncode $token] == "404" } { return 0
} elseif { [http::status $token] == "ok" } { set data "[http::ncode $token] [http::data $token]"
} elseif { [http::status $token] == "timeout" } { return 0
} elseif { [http::status $token] == "error" } { return 0 }
http::cleanup $token
if {[info exists data]} { return $data
} else { return 0 }
}
putlog "WebAdvisor"