Benutzer:Count Ypsilon/Skript:npclist.pl

aus FreewarWiki, der Referenz für Freewar
Version vom 25. August 2006, 01:56 Uhr von Count Ypsilon (Diskussion | Beiträge) (nur falls das jemand anders auch mal nutzen will)
(Unterschied) ← Nächstältere Version | ↑ Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
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";
 }