Updated 2004-10-01 06:17:03

Okay, this is silly, I know - but sometimes I just cannot resist the temptation. Here is an example of useful webscraping: If you meta moderate on slashdot, you get more moderation points.

Okay so maybe it is not very useful. Actually, I don't even use my moderation points. ever.

-- 01Okt2004 PS.

Save the script and give it your username and password.

Usage:
 tclsh slashmetamod.tcl ?username ?password??

It will prompt you if you do not provide them on the commandline.
    # Slashdot meta moderator.
    # This script will do your meta moderations for you.

    package require http
    # First, log in to slashdot:

    set username [lindex $argv 0]
    set password [lindex $argv 1]

    if { $username eq "" } {
	puts -nonewline "Username: "
	flush stdout
	set username [gets stdin]
    }

    if { $password eq "" } {
	puts -nonewline "Password: "
	flush stdout
	set password [gets stdin]
    }

    set p 0.8 ;# p=0.8 - 80% of moderations considered 'fair'.

    puts "Logging into slashdot as $username..."
    http::config -useragent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)"

    set q [http::formatQuery unickname $username returnto http://slashdot.org \
	       op userlogin upasswd $password login_temp yes]

    set tok [http::geturl http://slashdot.org/login.pl -query $q]

    upvar \#0 $tok state
    set cookies [list]
    foreach {name value} $state(meta) {
	if { $name eq "Set-Cookie" } {
	    lappend cookies [lindex [split $value {;}] 0]
	}
    }

    http::cleanup $tok
    puts "Getting posting numbers to metamoderate..."
    set tok2 [::http::geturl http://slashdot.org/metamod.pl -headers [list Cookie [join $cookies {;}]]]

    if { [regexp {You are currently not eligible to Meta Moderate} [http::data $tok2]] } {
	puts "You are currently not eligible to Meta Moderate."
	exit
    }

    set items [regexp -all -inline {<INPUT TYPE="RADIO" NAME="(mm[0-9]*)" VALUE="-">} [http::data $tok2]]

    http::cleanup $tok2

    set q ""
    foreach {x mm} $items {
	set fair [expr {rand() <= $p}]
	if { $fair } {
	    set choice +
	} else {
	    set choice -
	}
	lappend q [http::formatQuery $mm $choice]
	puts "Posting $mm: $choice"
    }

    lappend q [http::formatQuery op MetaModerate]

    set q [join $q "&"]

    set tok3 [::http::geturl http://slashdot.org/metamod.pl -query $q -headers [list Cookie [join $cookies {;}]]]

    if { [regexp {You are currently not eligible to Meta Moderate} [http::data $tok2]] } {
	puts "MetaModeration failed, slashdot said:"
	puts "You are currently not eligible to Meta Moderate."
	exit
    }
    puts "MetaModerated."