#!/usr/bin/perl # # blacklist_update.pl # # Peter R. Wood # http://prwdot.org/ # copyright 2004 ## Configuration use strict; use LWP::Simple; use WWW::Mechanize; my $logfile = '/path/to/your/logfile'; my $blacklist_url = 'http://www.jayallen.org/comment_spam/blacklist.txt'; my $mt_url = 'http://path.to/mt/mt.cgi'; my $mtbl_url = 'http://path.to/mt/mt-blacklist.cgi?__mode=add'; my $mt_username = 'yourMTusername'; my $mt_password = 'yourMTpassword'; my $chunk_limit = 500; ## Main Program logit( 'info', "Starting." ); my $mech = WWW::Mechanize->new(); logit( 'info', "Logging in to MT" ); my $login_status = login_to_mt(); if ($login_status) { logit( 'info', "Login was successful!" ); my @blacklist_content = split( /\n/, get($blacklist_url) ); logit( 'info', "Master blacklist downloaded; " . scalar(@blacklist_content) . " lines in blacklist." ); my @blacklist_chunks = (); my $line_count = 1; my @blacklist_additions = (); foreach my $line (@blacklist_content) { push( @blacklist_chunks, $line ); # Since we've built a chunk, submit it to MT-Blacklist if ( ( $line_count % $chunk_limit == 0 ) || ( $blacklist_content[-1] eq $blacklist_content[ $line_count - 1 ] ) ) { logit( 'info', "Submitting a chunk" ); logit( 'info', "--First line: " . $blacklist_chunks[0] ); logit( 'info', "--Last line: " . $blacklist_chunks[-1] ); my $blacklist_chunk = join( "\n", @blacklist_chunks ); my ( $submit_result, $additions ) = submit_chunk($blacklist_chunk); my @additions = @{$additions}; if ($submit_result) { logit( 'info', "--Submission successful!" ); push( @blacklist_additions, @additions ); } else { logit( 'error', "--Problem with submission." ); } @blacklist_chunks = (); } $line_count++; } logit( 'info', "Finished submitting blacklist." ); if (@blacklist_additions) { logit( 'info', "The following entries were added:" ); foreach my $addition (@blacklist_additions) { logit( 'info', $addition ); } } else { logit( 'info', "There were no new entries." ); } } else { logit( 'error', "Login failed." ); } logit( 'info', "Finished." ); logit( 'info', "=" x 70 ); ### Subroutines sub login_to_mt { my $login_status = 0; $mech->get($mt_url); $mech->form_number(1); $mech->set_fields( 'username' => $mt_username, 'password' => $mt_password ); $mech->submit(); $login_status = $mech->success(); return ($login_status); } sub submit_chunk { my ($chunk) = @_; my $submission_status = 0; $mech->get($mtbl_url); $mech->form_number(1); $mech->set_fields( '__mode' => 'add_confirm', 'entryimport' => $chunk ); $mech->submit(); $submission_status = $mech->success(); my @additions = (); if ($submission_status) { my $result_content = $mech->content(); if ( $result_content =~ /successfully\s+added\s+to\s+the\s+blacklist:<\/p>\s+