Показать сообщение отдельно

ICQ.com Search Parser (Tk/GUI Version)
  #2  
Старый 30.12.2007, 01:32
Spyder
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме:
9098076

Репутация: 4303


По умолчанию ICQ.com Search Parser (Tk/GUI Version)

Версия с гуи. К сожалению есть одна недоработка, после того как закончится парсинг вы не сможеет запустить его по новой: придётся запускать скрипт снова. В будущем постараюсь это исправить
Код:
#!perl
use LWP;
use Tk;
use Tk::DialogBox;
&Tk;
sub Tk
{
$main=MainWindow->new(-title => 'ICQ.com Search Parser by Spyder');
$main->geometry ('320x140');
$main->resizable (0,0);
$main->Label(-text => 'Enter query')->pack();
$quer=$main->Entry(-width => 50)->pack;
$main->Label(-text => 'Path to save result')->pack;
$trg=$main->Entry(-width => 50,
                      -textvariable => \$fs)->pack;
$main->Button(-text => 'Parsing', 
              -width=> '80',
              -height=> '1',
              -font => 'courier',
              -command => \&Main)->pack(-side => 'bottom');                      
$main->Button(-text => 'Browse',
              -command => \&filesave)->pack(-side => 'left');
$lim=$main->Entry(-width => 5)->pack(-side => 'right'); 
$main->Label(-text => 'Limit:')->pack(-side => 'right');              
MainLoop;                   
}
sub filesave
{
	$fs = $main->getSaveFile(); 
}   
sub Main
{
$target = $trg->get;
$query = $quer->get;
$limit = int($lim->get);	
if ($^O == "MSwin32") {
$tmp = "C:/icqtempfile.txt";
} else {
$tmp = "/tmp/icqtempfile.txt";
}
if ($limit) {
$lim = $limit * 10;
} else {
$lim = $pg+1;
}
&Parse;
}
sub Parse
{
for ($pg=0;;$pg=$pg+10) {
open (TRG,">>$target") or die "Can't save to $target:$!";
$url = "http://search.icq.com/search/results.php?q=$query&start=$pg";
$agent = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => $url) or die "Can't connect to ICQ.com:$!";
$resp = $agent->request($req);
open (TMP, ">$tmp");
print TMP $resp->content;
close TMP;
open (TMP, "$tmp");
@mas = <TMP>;
if ($mas[136] =~ /<div class="nor1">/ or $pg == $lim) {
close TRG;
unlink $tmp;
$InfoWindow=$main->DialogBox(-title   => 'Result', -buttons => ["OK"]);
$InfoWindow->add('Label', -text => "$limit Pages Parsed!", -font => '{Verdana} 8 bold',-foreground=>'red')->pack;
$InfoWindow->Show();
$InfoWindow->destroy;
return;
}
while (@mas) {
$str = shift @mas;
if ($str =~ m/\('http\S+'\)/) {
($q,$lnk,$q) = split /'/, $&;
print TRG "$lnk\n" if ($lnk ne $lnksf);
$lnksf = $lnk;
}
}
}
}
 
Ответить с цитированием