# HG changeset patch # User "Rex Tsai " # Date 1228332131 -28800 # Node ID 10f14db31151fe73d0ae8e1d7d88b02d5ff80939 # Parent 0d2c2a379c63aeb7dfb1196786511791d0dc66a2 added new dump spy info function diff -r 0d2c2a379c63 -r 10f14db31151 Ikariam.pm --- a/Ikariam.pm Tue Dec 02 17:21:21 2008 +0800 +++ b/Ikariam.pm Thu Dec 04 03:22:11 2008 +0800 @@ -727,42 +727,10 @@ my $self = shift; my $cityId = shift; - $self->changeCity($cityId); my $res = $self->{mech}->get(sprintf("http://%s/index.php?view=city&id=%d", $self->{server}, $cityId)); my $extractor = new Ikariam::Extractor(content => $res->content); - $self->{'cities'}->{$cityId}->{resources}->{gold} = $extractor->find('//span[@id="value_gold"]/text()'); - $self->{'cities'}->{$cityId}->{resources}->{gold} =~ s/,//g; - - $self->{'cities'}->{$cityId}->{name} = $extractor->find('//span[@class="city"]/text()'); - - my $island = $extractor->find('//div[@id="breadcrumbs"]/a[@class="island"]'); - if($island =~ /(\w+)\[(\d+):(\d+)\]/) { - $self->{'cities'}->{$cityId}->{island}->{name} = $1; - $self->{'cities'}->{$cityId}->{island}->{x} = $2; - $self->{'cities'}->{$cityId}->{island}->{y} = $3; - $self->{'cities'}->{$cityId}->{island}->{id} = my $island = $extractor->find('//div[@id="breadcrumbs"]/a[@class="island"]/@href'); - $self->{'cities'}->{$cityId}->{island}->{id} =~ s/\?view=island&id=(\d+)/$1/; - } - - $self->{'cities'}->{$cityId}->{construction} = defined($extractor->find('//*[@class="constructionSite"]')) ? 1 : 0; - - # maxCapacity - my $page = $extractor->{doc}->toString(1); - if($page =~ /maxCapacity : {\s+wood: (\d+),\s+wine: (\d+),\s+marble: (\d+),\s+crystal: (\d+),\s+sulfur: (\d+)\s+}/s) { - $self->{'cities'}->{$cityId}->{maxCapacity}->{wood} = $1; - $self->{'cities'}->{$cityId}->{maxCapacity}->{wine} = $2; - $self->{'cities'}->{$cityId}->{maxCapacity}->{marble} = $3; - $self->{'cities'}->{$cityId}->{maxCapacity}->{crystal} = $4; - $self->{'cities'}->{$cityId}->{maxCapacity}->{sulfur} = $5; - } - - foreach my $good (qw/wood wine marble crystal sulfur/) { - $self->{'cities'}->{$cityId}->{resources}->{$good} = $extractor->find(sprintf('//span[@id="value_%s"]', $good)); - $self->{'cities'}->{$cityId}->{resources}->{$good} =~ s/,//g; - } - foreach my $i (0..14) { my @buildings = $extractor->find(sprintf('//li[@id="position%s"]/@class', $i)); foreach my $building (@buildings) { @@ -782,6 +750,39 @@ } } + $self->{'cities'}->{$cityId}->{name} = $extractor->find('//span[@class="city"]/text()'); + + my $island = $extractor->find('//div[@id="breadcrumbs"]/a[@class="island"]'); + if($island =~ /(\w+)\[(\d+):(\d+)\]/) { + $self->{'cities'}->{$cityId}->{island}->{name} = $1; + $self->{'cities'}->{$cityId}->{island}->{x} = $2; + $self->{'cities'}->{$cityId}->{island}->{y} = $3; + $self->{'cities'}->{$cityId}->{island}->{id} = my $island = $extractor->find('//div[@id="breadcrumbs"]/a[@class="island"]/@href'); + $self->{'cities'}->{$cityId}->{island}->{id} =~ s/\?view=island&id=(\d+)/$1/; + } + + return $self->{'cities'}->{$cityId} if(wantarray()); + + $self->{'cities'}->{$cityId}->{resources}->{gold} = $extractor->find('//span[@id="value_gold"]/text()'); + $self->{'cities'}->{$cityId}->{resources}->{gold} =~ s/,//g; + + $self->{'cities'}->{$cityId}->{construction} = defined($extractor->find('//*[@class="constructionSite"]')) ? 1 : 0; + + # maxCapacity + my $page = $extractor->{doc}->toString(1); + if($page =~ /maxCapacity : {\s+wood: (\d+),\s+wine: (\d+),\s+marble: (\d+),\s+crystal: (\d+),\s+sulfur: (\d+)\s+}/s) { + $self->{'cities'}->{$cityId}->{maxCapacity}->{wood} = $1; + $self->{'cities'}->{$cityId}->{maxCapacity}->{wine} = $2; + $self->{'cities'}->{$cityId}->{maxCapacity}->{marble} = $3; + $self->{'cities'}->{$cityId}->{maxCapacity}->{crystal} = $4; + $self->{'cities'}->{$cityId}->{maxCapacity}->{sulfur} = $5; + } + + foreach my $good (qw/wood wine marble crystal sulfur/) { + $self->{'cities'}->{$cityId}->{resources}->{$good} = $extractor->find(sprintf('//span[@id="value_%s"]', $good)); + $self->{'cities'}->{$cityId}->{resources}->{$good} =~ s/,//g; + } + $self->{'cities'}->{$cityId}->{transporters}->{avail} = $extractor->find('//span[@id="value_transAvail"]/text()'); $self->{'cities'}->{$cityId}->{transporters}->{sum} = $extractor->find('//span[@id="value_transSum"]/text()'); $self->{'cities'}->{$cityId}->{transporters}->{sum} =~ s/[\(|\)]//g; @@ -831,6 +832,31 @@ } } +sub checkSafeHouse { + my $self = shift; + my $cityId = shift; + my $data; + + my @locations = @{$self->{'cities'}->{$cityId}->{locations}}; + foreach (0..$#locations) { + if($locations[$_] eq 'safehouse') { + my $res = $self->{mech}->get(sprintf('http://%s/index.php?view=safehouse&id=%d&position=%d', $self->{server}, $cityId, $_ )); + my $extractor = Ikariam::Extractor->new(content => $res->content); + foreach (1..25) { + my @links = $extractor->find(sprintf('//div[@class="spyinfo" and position() = %d]//a/@href', $_)); + last if($#links < 0); + if ($links[0] =~ /id=(\d+)/) { + @{$data->{$1}->{city}} = $self->checkCity($1); + @{$data->{$1}->{risks}} = Ikariam::Extractor->new(content => $self->{mech}->get($links[1])->content)->find('//div[@class="missionRisk"]'); + } + } + last; + } + } + return $data; +} + + sub checkMilitaryAdvisorMilitaryMovements { my $self = shift; my $res = $self->{mech}->get(sprintf('http://%s/index.php?view=militaryAdvisorMilitaryMovements', $self->{server})); @@ -1090,6 +1116,7 @@ # looking for cities foreach my $cityId (keys(%{$self->{'cities'}})) { + $self->changeCity($cityId); $self->checkCity($cityId); $self->checkTownHall($cityId); $self->checkArmies($cityId); diff -r 0d2c2a379c63 -r 10f14db31151 spy.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spy.pl Thu Dec 04 03:22:11 2008 +0800 @@ -0,0 +1,22 @@ +#!/usr/bin/perl + +use strict; +use Ikariam; +use Data::Dumper; +use Decision::ParseTree q{ParseTree}; +use YAML qw/LoadFile Dump DumpFile/; + +our $i = new Ikariam($::server, $::user, $::pass); +$i->login; +# $i->check(); +foreach (glob("city-*-dump.yaml")) { + my $city = LoadFile($_); + $i->{'cities'}->{$city->{id}} = $city; + + my $spydata = $i->checkSafeHouse($city->{id}); + foreach (keys(%{$spydata})) { + DumpFile("spy-$_-dump.yaml", $spydata->{$_}); + } +} +$i->logout; +