use strict; use warnings; use LWP::UserAgent; use HTML::TableExtract; use DateTime; die "usage: perl $0 monk password seconds\n" unless $#ARGV == 2; my ( $monk, $pass, $secs ) = @ARGV; print "Querying the monastery once every $secs seconds for monk $monk\'s reputation.\n"; $secs = 10 if $secs < 10; while(1) { my $ua = LWP::UserAgent->new; $ua->agent("PMReputation"); my $res = $ua->post( 'http://perlmonks.org/?', {"node_id" => "3559", "op" => "login", "lastnode_id" => "3559", "user" => $monk, "passwd" => $pass, "expires" => "+10y", "length" => "500",} ); die "Cannot enter the monastery ($res->status_line).\n" unless $res->is_success; my $te = HTML::TableExtract->new( headers => [ '#', 'User', 'Experience', 'Level', 'Writeups', 'User Since', 'Last Here' ] ); $te->parse( $res->content ); my $writeups = 0; my $exp = 0; my $level = ""; my $rank = 0; my $total = 0; foreach my $ts ($te->tables) { foreach my $row ($ts->rows) { $total = $row->[0]; if( $row->[1] eq $monk ) { ($rank, $exp, $level, $writeups) = @$row[0,2,3,4]; } } } my $now = DateTime->now( time_zone => 'Europe/Berlin' ); my $text = $now->dmy.",".$now->hms.": $level $monk has experience of $exp and $writeups write ups, Saint $rank/$total.\n"; print $text; if( open my $log, ">>", "narcissistic.txt" ) { print $log $text; close $log; } sleep( $secs-3 ); }