Spam Loeschen

Darmstadt.pm | Mailingliste | Treffen, Veranstaltungen | Leute | Links | FAQ | ... Hilfe | Änderungen | Einstellung: | Impressum |
| Seite verändern

SPAM im Wiki

Gerade bei German.pm kommt sehr viel Spam an. Da mich es ziemlich genervt hat, diesen Spam immer von Hand zu löschen, habe ich ein Skript geschrieben, dass auf der Änderungsseite nachschaut, ob Seiten geschrieben wurden, die "verdächtig" sind. Die Seiten, die von den Spammern erstellt werden, beginnen (fast) immer mit 'http'.

Mit diesem Skript kann ich ganz einfach die Seite löschen:

#!/usr/bin/perl

use strict;
use warnings;
use LWP::Simple;
use HTML::Parser;

my $url     = 'http://www.perlmongers.de/?';
my $parser  = HTML::Parser->new(text_h  => [\&text_handler,"self,dtext"]);
my $choice  = 0;

my @pages;
list_files();

while($choice >= 0){
    print "> ";
    chomp($choice = <STDIN>);
    
    last if $choice =~ m/^n/ or $choice eq 'exit';

    if($choice eq 'all'){
        delete_page(@pages);
	    $choice = 0;
    }
    elsif($choice eq 'ls'){
        list_files();
        $choice = 0;
    }
    elsif($choice =~ /\D/){
        print "Your choice was not valid\n";
        $choice = 0;
    }
    elsif(defined $pages[$choice-1]){
        delete_page($pages[$choice-1]);
    }
}

#----------------------------------------------------------------------------#
#                                  Subroutine                                #
#----------------------------------------------------------------------------#

sub list_files{
    @pages = ();
    my $changes = $url . 'Änderungen';
    my $content = get($changes);

    $parser->{changes} = 0;
    $parser->parse($content);

    my $counter = 1;
    print "What page should be deleted:\n";
    print $counter++," ",$_,"\n" for @pages;
}

sub text_handler{
    my ($self,$dtext) = @_;
    
    return unless defined $dtext;
    
    if($dtext eq 'Änderungen'){
            $self->{changes} = 1;
    }
    
    if($self->{changes} == 1 and $dtext =~ /^http:/){
        push @pages,$dtext;
    }
}

sub delete_page{
    my (@pages) = @_;
    
    my $url     = 'http://www.perlmongers.de/?';
    my $params  = 'action=edit&button=Speichern&wiki_text=&page_id=';

    for(@pages){
        get($url . $params . $_);
        print $_," deleted\n";
    }
}