Kategorien
Benutzer:Count Ypsilon/Skript:npclist.pl
Zur Navigation springen
Zur Suche springen
Dieses Skript erzeugt eine Liste aller im Wiki verzeichneten NPCs. In der Ausgabedatei steht jede Zeile für ein NPC und hat den Inhalt
NPC-Name,Angriffsstärke,LP,XP,GM
Das Skript arbeitet mit der HTML-Ausgabe der Wiki-Seiten, das ist suboptimal und fehleranfällig, es sollte auf das Parsen der Wiki-Quelltexte umgestellt werden - aber für den Augenblick tut es.
#!/usr/bin/perl use strict; use LWP::UserAgent; use URI::Escape; use HTTP::Request; my $ua = LWP::UserAgent->new(); my $host = "http://www.fwwiki.de"; my $url = $host . "/index.php/Kategorie:NPCs"; while($url ne "") { my $request = HTTP::Request->new("GET", $url); my $response = $ua->simple_request($request); my $c = $response->content(); $url = ""; while($c =~ /<a([^>]*)>([^<]*)<\/a>/gm) { my ($anchor, $text) = ($1, $2); my $href; $href = $1 if ($anchor =~ /href\s*=\s*"([^"]*)"/); $href =~ s/&/&/g; my $title; $title = $1 if ($anchor =~ /title\s*=\s*"([^"]*)"/); $url = $host.$href if ($text =~ /n.*chste \d+/); registerNpc($text, $host.$href) if ($title eq $text); } } sub registerNpc { my ($text, $href) = @_; my $request = HTTP::Request->new("GET", $href); my $response = $ua->simple_request($request); my $c = $response->content(); my $atk; my $xp; my $lp; my $gm; my $drops; $atk = $1 if ($c =~ /Angriffsst.{1,4}rke: (\d+)/); $lp = $1.$3 if ($c =~ /Lebenspunkte[^0-9]{1,8}(\d+)(\.(\d+))?/); $xp = $1 if ($c =~ /Erfahrung[^0-9]{1,8}(\d+)/); $gm = $1 if ($c =~ /Gold[^0-9]{1,8}(\d+)/); print "$text,$atk,$lp,$xp,$gm\n"; }