Here's a script to filter spam submissions (emails, pages, comments, whatever) through the Akismet filtering service - see http://akismet.com/ for details:
# Copyright (c) 2007 Jean-Claude Wippler # http://www.opensource.org/licenses/mit-license.php package provide akismet 0.1 package require http # see http://akismet.com/development/api/ # # blog (required) # The front page or home URL of the instance making the request. For a blog # or wiki this would be the front page. Note: Must be a full URI, including # http://. # # user_ip (required) # IP address of the comment submitter. # # user_agent (required) # User agent information. # # referrer (note spelling) # The content of the HTTP_REFERER header should be sent here. # # permalink # The permanent location of the entry the comment was submitted to. # # comment_type # May be blank, comment, trackback, pingback, or a made up value like # "registration". # # comment_author # Submitted name with the comment # # comment_author_email # Submitted email address # # comment_author_url # Commenter URL. # # comment_content # The content that was submitted. # # Other server environment variables # In PHP there is an array of environment variables called $_SERVER which # contains information about the web server itself as well as a key/value # for every HTTP header sent with the request. This data is highly useful to # Akismet as how the submited content interacts with the server can be very # telling, so please include as much information as possible. namespace eval akismet { variable key variable blog variable app proc setup {key_ blog_ {app_ ""}} { variable key $key_ variable blog $blog_ variable app $app_ if {[_connect verify-key "" key $key] ne "valid"} { error "Akismet: invalid key" } } proc comment-check {uip uagent args} { variable key _connect comment-check $key. user_ip $uip user_agent $uagent {*}$args } proc submit-spam {uip uagent args} { variable key _connect submit-spam $key. user_ip $uip user_agent $uagent {*}$args } proc submit-ham {uip uagent args} { variable key _connect submit-ham $key. user_ip $uip user_agent $uagent {*}$args } namespace export * namespace ensemble create proc _connect {type prefix args} { variable blog variable app set ver [package require akismet] set token [::http::geturl http://${prefix}rest.akismet.com/1.1/$type \ -headers [list User-Agent "$app | akismet.tcl/$ver"] \ -query [http::formatQuery blog $blog {*}$args]] set ncode [http::ncode $token] set data [http::data $token] http::cleanup $token if {$ncode != 200} { error "Akismet: $type failed (code $ncode)" } return $data } }
It's quite effective at tagging things we all are tired of having to clean up...
LV Too bad something like this couldn't be plugged into the Wiki...
jcw - Don't see why not...
jdc Is it possible to give a usage example? I've tried the following but always get the true return, indicating my string is spam (setup completed without errors):
set ip <my ip address> set ua "Mozilla/5.0" set rt [akismet::comment-check $ip $ua comment_content "An example of using this packages."] puts "Check: $rt"