#!/usr/bin/perl
#===============================================================================
# DESCRIPTION: guns.ru_alarm - скрипт для проверки веток форума talks.guns.ru
# на предмет появления тем с заданными ключевыми словами.
# Задумывался как оповещалка о появлении интересующих вещей
# в разделах купли-продажи форума. Оповещает по e-mail.
#
# USAGE: Указать свои настройки и поставить в cron
#
# AUTHOR: dimio
# URL: http://www.dimio.org
# VERSION: 0.1
# CREATED: 2010-09-01
#===============================================================================
use warnings;
use strict;
use LWP::UserAgent;
#use LWP::Simple; # на хостинге не хочет получать страницу, приходится использовать LWP::UA
########### ПОЛЬЗОВАТЕЛЬСКИЕ НАСТРОЙКИ #####################################
my $forum = 245; #номер форума, за которым будет следить робот (245 - купля-продажа ср-в связи)
my $alarm_words = 'YAESU|яська'; #ключевые слова, на которые будет реагировать робот (разделитель - | )
my %email_opt = (
#Заменить на свои данные
'To: ' => 'dimio@dimio.org', #Адрес получателя
'From: ' => 'dimio@dimio.org', #Адрес отправителя
'Subject: ' => 'GUNS.RU alarm', #Тема письма
#Здесь ничего менять не нужно
'Mime-Version: ' => '1.0',
'Content-Type: ' => 'text/plain; charset="utf-8"',
'Content-Transfer-Encoding: ' => '8bit',
);
########### СИСТЕМНЫЕ НАСТРОЙКИ #####################################
my $sendmail = '/usr/bin/sendmail -t';
my $db_file = 'guns_miss.db';
########### КОНЕЦ НАСТРОЕК #####################################
my $ua = &ua_init;
my $miss;
if (-e $db_file) {
open (MISS, '<', $db_file) or die "Can't open $db_file : $!\n";
while (){
$miss = $_;
}
close (MISS);
}
else { system ("touch $db_file"); }
open (MISS, '>', $db_file) or die "Can't open $db_file : $!\n";
my $url = "http://talks.guns.ru/forumtopics/$forum.html";
my $resp = $ua->get($url);
die "Couldn't get page from $url\n" unless $resp->is_success;
my $content = $resp->content;
my $line ='';
while ($content =~ m#(.*($alarm_words).*?)#gi) {
print MISS " $1 ";
$line .= $1 . " ==> " . $2 . "\n" if $miss !~ / $1 /;
}
close (MISS);
&SendEmail(\%email_opt,$line) if $line;
exit 0;
################################################
sub SendEmail() {
my ($email_opt,$line) = @_;
my $msg_body;
foreach my $email_param (keys %$email_opt) {
$msg_body .= $email_param . $email_opt->{$email_param} . "\n";
}
$msg_body .= "\n" . $line . "\n";
system ("echo '$msg_body' | $sendmail");
}
sub ua_init() { # инициализация юзер-агента, прикидываемся браузером
my $browser=LWP::UserAgent->new('agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11)',
'requests_redirectable' => ['GET', 'POST']);
$browser->default_header('Accept' => 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1',
'Accept-Charset' => 'utf-8; *;q=0.1',
'Accept-Language' => 'ru,en-us;q=0.7,en;q=0.3',
'Accept-Encoding' => 'deflate, gzip, x-gzip, identity, *;q=0',
);
return ($browser);
}