sobota, 14 sierpnia 2010

adderek Webmini 0.2

Nowa wersja adderka Webmini.
Zmiany:
*katalogowanie wielu stron jednocześnie (wymagany plik strony.xml)
*drobne poprawki w kodzie
*obsługa niestandardowych pytań (wymagany plik odpowiedzi.xml)
*zmiana licencji.
Kod zmienia licencję na Soulware(czyli licencja BSD + w zamian za użytkowanie programu zobowiązujesz się oddać duszę autorowi tego skryptu:P).


use Win32::IEAutomation;
use WWW::Mechanize;
use List::MoreUtils qw(uniq);
use strict;
use utf8;
use XML::Simple;
use Data::Dumper;
no warnings;
my $mech = Win32::IEAutomation->new( visible => 1);#zmień na 0 jeśli nie chcesz oglądać okna IE
my $mechanize=WWW::Mechanize->new(autocheck => 0,timeout => 8);
$mechanize->agent_alias("Linux Mozilla");
my @katalogi=();
###################### STRONY #############################
my $xml = new XML::Simple();
my $data = $xml->XMLin("strony.xml",ForceArray => ["strona"]);
my @strony=@{$data->{strona}};
######################### ODPOWIEDZI ###################
my %odpowiedzi=();
$data = $xml->XMLin("odpowiedzi.xml",ForceArray => ["pytanie"]);
foreach (@{$data->{pytanie}})
{
$odpowiedzi{$_->{question}}=$_->{answer}
}
######################### KATALOGI ########################
print "[0]Wczytac liste katalogow z pliku textowego\n[1]Pozyczyc od Mara\n";
my $wybor=<>;
if($wybor==0)
{
print "podaj nazwe pliku:\n";
my $nazwa=<>;
open(ODCZYT,'./'.$nazwa) or die "Nie moge odczytac\n";
@katalogi=<ODCZYT>;
close(ODCZYT);
@katalogi=uniq(@katalogi);
}else{
czary_mary();
}
############################# SERCE #######################
foreach(@katalogi)
{
my $url=$_;
$mechanize->get($url);
if($mechanize->response->is_success)
{
foreach(@strony)
{
$mech->gotoURL($url);
my $content=$mech->Content();
eval
{
$mech->getTextBox('name:','e_www')->SetValue($_->{adres});
$mech->getTextBox('name:','e_title')->SetValue($_->{title});
$mech->getTextBox('name:','e_keywords')->SetValue($_->{keyword});
$mech->getTextArea('name:','e_desc')->SetValue($_->{opis});
if($content=~/<\/TEXTAREA>(.+?)<DIV align=left><INPUT size=53.+?name=answer>/gis)
{
my $zaw=$1;
while($zaw=~/<.*?>/)
{
$zaw=~s/<.*?>//;
}
my $znam_odp=0;
my $wynik="";
while ( my ($key, $value) = each(%odpowiedzi) )
{
if($zaw=~/$key/gis)
{
$wynik=$odpowiedzi{$key};
$znam_odp=1;
next;
}

}
if($znam_odp==0)
{

$zaw=~s/Odpowiedz na pytanie//;
while($zaw=~/(\n+|\s+|:|\?)/gi)
{
$zaw=~s/(\n+|\s+|:|\?)//;
}
$wynik=eval($zaw);
}
print "$wynik\n";
$mech->getTextBox('name:','answer')->SetValue($wynik);


}
$mech->getInputButton('name:','step2')->Click;

};
}
}
}
######################### MAR #################################
sub czary_mary
{
$mechanize->get('http://www.katalogiseo.info/WebMini.html');
my $zawartosc=$mechanize->content();
my @linki=();
while($zawartosc=~/<a href=\"(katalogi-WebMini,[^\"]+)/gi)
{
push(@linki,'http://www.katalogiseo.info/'.$1);
}
@linki=uniq(@linki);
foreach(@linki)
{
#print $_."\n";
$mechanize->get($_);
$zawartosc=$mechanize->content();
while($zawartosc=~/<div style=\"float:left;\"><a href=\"([^\"]+)\" class=\"linki\" target=\"_blank\">/gi)
{
my $url=$1;
if($url=~/\/$/)
{
push(@katalogi,$1.'?mode=add');
}else{
push(@katalogi,$1.'/?mode=add');
}
}
}
@katalogi=uniq(@katalogi);
print "Pobrano ".scalar(@katalogi)." katalogow\n";
}
################################ GAME OVER #################