Я использую WWW::Mechanize
и HTML::TokeParser
для анализа веб-сайта на наличие обновлений. Я не могу дать никаких подробностей на веб-сайте, потому что он требует входа в систему. На веб-сайте по существу есть таблица данных. Я просто разбираю html, пока не доберусь до первой строки таблицы, проверяю, является ли это значением моей последней очистки, если нет, отправляю письмо. Это прекрасно работает, когда я проверяю существующие записи таблицы, за исключением того, что когда происходят фактические обновления, очистка не останавливается на моей последней очистке. Он продолжает отправлять письма до тех пор, пока таблица не будет исчерпана, и повторяет это бесконечно. Я не могу понять, что происходит. Я знаю, что мало кто может проверить без веб-сайта, но я все равно публикую свой код. Я был бы признателен за идеи о том, что может пойти не так.
код:
sub func{
my ($comid, $mechlink) = @_;
my $mechanize = WWW::Mechanize->new(
noproxy => 0,
stack_depth => 5,
autocheck => 1
);
$mechanize->proxy( https => undef );
eval{
my $me = $mechanize->get($mechlink);
$me->is_success or die $me->status_line;
};
return $comid if ($@);
my $stream = HTML::TokeParser->new( \$mechanize->{content} ) or die $!;
while ( $tag = $stream->get_tag('td') ) {
if( $tag->[1]{class} eq 'dateStamp' ) {
$dt = $stream->get_trimmed_text('/td');
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$name = $stream->get_trimmed_text('/td') if( $tag->[1]{class} eq 'Name' );
return $comid unless( $tag->[1]{class} eq 'Name' );
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$info = $stream->get_trimmed_text('/td');
print "$name?\n";
return $retval if($info eq $comid);
print "You've Got Mail! $info $comid\n";
$tcount++;
$retval = $info if($tcount == 1);
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$link = "http://www.abc.com".$tag->[1]{href} if ($tag->[0] eq 'a' );
my $outlook = new Mail::Outlook();
my $message = $outlook->create();
$message->To('[email protected]');
$message->Cc('[email protected];[email protected]');
my $hd = "$name - $info";
$message->Subject($hd);
$message->Body(" ");
$message->Attach($link);
$message->send;
}
}
}