Bearbeiten von „FreewarWiki:Bot/Skripts/loclist.pl

Zur Navigation springen Zur Suche springen

Achtung

Du bearbeitest diese Seite unangemeldet. Wenn du deine Änderung speicherst, wird deine aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit öffentlich einsehbar. Um effektiver mitarbeiten zu können und deine IP-Adresse zu verbergen, melde dich doch bitte an.

Speichere bitte keine Textversuche ab. Nutze stattdessen die Spielwiese, um dich im Umgang mit der Textverarbeitung im Wiki vertraut zu machen.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
Zeile 12: Zeile 12:
#Dieses Skript geht alle Unterkategorien in der Kategorie:Orte im FreewarWiki durch und sucht dort nach Ortsartikeln.
#Dieses Skript geht alle Unterkategorien in der Kategorie:Orte im FreewarWiki durch und sucht dort nach Ortsartikeln.
#Da es nur die Unterkategorien durchsucht, findet es keine Ortsartikel welche z.B. nur der Kategorie:Orte hinzugefügt
#Da es nur die Unterkategorien durchsucht, findet es keine Ortsartikel welche z.B. nur der Kategorie:Orte hinzugefügt
#sind, aber keiner weiteren Unterkategorie, wie z.B. Bombenkrater.
#sind aber keiner weiteren Unterkategorie, wie z.B. Bombenkreater.
#Die Ausgabe erfolgt über print und kann weitergeleitet werden.
#Die Ausgabe erfolgt über print und kann weitergeleitet werden.


Zeile 22: Zeile 22:
my $url = $host . "/index.php/Kategorie:Orte";
my $url = $host . "/index.php/Kategorie:Orte";
my $intro = "<!-- ACHTUNG: Diese Seite wird von einem Bot aktualisiert. Wenn Du Veraenderungen am Aufbau dieser Seite vornimmst, hinterlasse bitte eine Nachricht auf der Diskussionsseite, sonst werden die Aenderungen vom Bot ueberschrieben. -->Diese Seite listet, nach [[Gebiet]]en geordnet, alle im Wiki eingetragenen [[Ort]]e mit deren Koordinatenangaben. (Stand $date)\n";
my $intro = "<!-- ACHTUNG: Diese Seite wird von einem Bot aktualisiert. Wenn Du Veraenderungen am Aufbau dieser Seite vornimmst, hinterlasse bitte eine Nachricht auf der Diskussionsseite, sonst werden die Aenderungen vom Bot ueberschrieben. -->Diese Seite listet, nach [[Gebiet]]en geordnet, alle im Wiki eingetragenen [[Ort]]e mit deren Koordinatenangaben. (Stand $date)\n";
my $preLocation = "<!--\n-->{{Ueberschriftensimulation 2|1={{Gebietslink|";
my $preLocation = "{{Ueberschriftensimulation 2|1={{Gebietslink|";
my $endLocation = "}}}}";
my $endLocation = "}}}}";
my $prePlace = "[[";
my $prePlace = "[[";
my $preX = "]]: ";
my $preX = "]]: ";
my $preY = ",";
my $preY = ",";
my $separator = ";";
my $seperator = "; ";
my $end = "[[Kategorie:Orte|!Orte (Liste)]]";
my $end = "[[Kategorie:Orte|!Orte (Liste)]]";


Zeile 40: Zeile 40:
#Hole alle Links welche (Orte) im Namen enthalten
#Hole alle Links welche (Orte) im Namen enthalten
while($c =~ /<a([^>]*)>([^<]*\(Orte\))<\/a>/gm) {
while($c =~ /<a([^>]*)>([^<]*\(Orte\))<\/a>/gm) {
  #$anchor enthält alle Attribute des a-Tags, $text enthält den Inhalt zwischen dem a-Tag
#$anchor enthält alle Attribute des a-Tags, $text enthält den Inhalt zwischen dem a-Tag
  my ($anchor, $text) = ($1, $2);
my ($anchor, $text) = ($1, $2);
  my $href;
my $href;
  #$href enthält nun den Link des Ankers
#$href enthält nun den Link des Ankers
  $href = $1 if ($anchor =~ /href\s*=\s*"([^"]*)"/);
$href = $1 if ($anchor =~ /href\s*=\s*"([^"]*)"/);
  $href =~ s/\N{U+0026}amp;/&/g;
$href =~ s/\N{U+0026}amp;/&/g;
  my $title;
my $title;
  #$title enthält den Wert des title-Attributes
#$title enthält den Wert des title-Attributes
  $title = $1 if ($anchor =~ /title\s*=\s*"([^"]*)"/);
$title = $1 if ($anchor =~ /title\s*=\s*"([^"]*)"/);
  #Brich ab wenn $href nicht ermittelt werden konnte
#Brich ab wenn $href nicht ermittelt werden konnte
  next if ($href eq "");
next if ($href eq "");
  #Gehe in die Unterkategorien welche die Ortsartikel zu den Gebieten enthalten
#Gehe in die Unterkategorien welche die Ortsartikel zu den Gebieten enthalten
  getUrl($text, $host.$href) if ($title eq "Kategorie:" . $text);
getUrl($text, $host.$href) if ($title eq "Kategorie:" . $text);
}
}


Zeile 70: Zeile 70:
#Sucht die Ortsartikel in den Unterkategorien
#Sucht die Ortsartikel in den Unterkategorien
sub getUrl {
sub getUrl {
  #$location beinhaltet den Gebietsnamen
#$location beinhaltet den Gebietsnamen
  my ($location, $href) = @_;
my ($location, $href) = @_;
  $location =~ s/\(Orte\)//;
$location =~ s/\(Orte\)//;
  $location = trim($location);
$location = trim($location);
  #@filter beinhaltet Strings welche nicht im $title des vermeintlichen Ortsartikels enthalten sein dürfen
#@filter beinhaltet Strings welche nicht im $title des vermeintlichen Ortsartikels enthalten sein dürfen
  my @filter = ("", "Gebiet", $location);
my @filter = ("", "Gebiet", $location);
  #@excFilter beinhaltet alle Ausnahmen, welche durch die Filter als kein Ortsartikel markiert wurden aber doch welche sein sollen
#@excFilter beinhaltet alle Ausnahmen, welche durch die Filter als kein Ortsartikel markiert wurden aber doch welche sein sollen
  my @excFilter = ("Dummyplace");
my @excFilter = ("Dummyplace");
  my $request = HTTP::Request->new("GET", $href);
my $request = HTTP::Request->new("GET", $href);
  my $response = $ua->simple_request($request);
my $response = $ua->simple_request($request);
  my $c = $response->content();
my $c = $response->content();
  #Hole alle Links aus der Unterkategorie
#Hole alle Links aus der Unterkategorie
  while($c =~ /<li><a([^>]*)>([^<]*)<\/a>/gm) {
while($c =~ /<li><a([^>]*)>([^<]*)<\/a>/gm) {
    my ($anchor, $text) = ($1, $2);
my ($anchor, $text) = ($1, $2);
    my $href;
my $href;
    $href = $1 if ($anchor =~ /href\s*=\s*"([^"]*)"/);
$href = $1 if ($anchor =~ /href\s*=\s*"([^"]*)"/);
    $href =~ s/\N{U+0026}amp;/&/g;
$href =~ s/\N{U+0026}amp;/&/g;
    my $title;
my $title;
    $title = $1 if ($anchor =~ /title\s*=\s*"([^"]*)"/);
$title = $1 if ($anchor =~ /title\s*=\s*"([^"]*)"/);
    #$flag gibt Auskunft ob ein Link ein Ortsartikel ist, 1 für ja
#$flag gibt Auskunft ob ein Link ein Ortsartikel ist, 1 für ja
    my $flag = 1;
my $flag = 1;
    if (($title eq $text)) {
if (($title eq $text)) {
      #Gehe den Filter durch, bei einem Treffer ist der Link kein Ortsartikel
#Gehe den Filter durch, bei einem Treffer ist der Link kein Ortsartikel
      foreach(@filter) {
foreach(@filter) {
        if($title eq $_) {
if($title eq $_) {
          $flag = 0;
$flag = 0;
          #Gehe den Ausnahme Filter durch, bei einem Treffer ist der Link doch ein Ortsartikel
#Gehe den Ausnahme Filter durch, bei einem Treffer ist der Link doch ein Ortsartikel
          foreach(@excFilter) {
foreach(@excFilter) {
            if($title eq $_) {
if($title eq $_) {
              $flag = 1;
$flag = 1;
            }
}
          }
}
        }
}
      }
}
      #Prüfe nochmals auf verschiedene Zeichenketten in $title
#Prüfe nochmals auf verschiedene Zeichenketten in $title
      if(($href =~ /FreewarWiki:/gm) or ($href =~ /Felder:/gm)) {
if(($href =~ /FreewarWiki:/gm) or ($href =~ /Felder:/gm)) {
        $flag = 0;
$flag = 0;
      }
}
      #Wenn der Link ein Ortsartikel ist, hole seine Daten
#Wenn der Link ein Ortsartikel ist, hole seine Daten
      if($flag eq 1) {
if($flag eq 1) {
        registerLocation($text, $host.$href, $location);
registerLocation($text, $host.$href, $location);
      }
}
    }
}
  }
}
}
}


Zeile 144: Zeile 144:
   #$flag bestimmt ob ein Gebiet noch nicht aufgetreten ist, 1 für ja
   #$flag bestimmt ob ein Gebiet noch nicht aufgetreten ist, 1 für ja
   my $flag = 1;
   my $flag = 1;
  #Gehe alle bekannten Gebiete durch und setze ggf. $flag
#Gehe alle bekannten Gebiete durch und setze ggf. $flag
  foreach(@locationList) {
foreach(@locationList) {
    if($location eq $_) {
if($location eq $_) {
      $flag = 0;
$flag = 0;
    }
}
  }
}
  #Ist ein Gebiet noch nicht aufgetreten, drucke es
#Ist ein Gebiet noch nicht aufgetreten, drucke es
  if($flag eq 1) {
if($flag eq 1) {
    print "$preLocation$location$endLocation";
print "$preLocation$location$endLocation";
    push(@locationList, $location);
push(@locationList, $location);
  }
}
  #Drucke alle Daten des Ortes
#Drucke alle Daten des Ortes
  print "$prePlace$text$preX$x$preY$y$separator";
print "$prePlace$text$preX$x$preY$y$seperator";
   }
   }
}
}
</pre>
</pre>

Bitte beachte, dass alle Beiträge zu FreewarWiki von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können. Reiche hier keine Texte ein, falls du nicht willst, dass diese ohne Einschränkung geändert werden können.

Du bestätigst hiermit auch, dass du diese Texte selbst geschrieben hast oder diese von einer gemeinfreien Quelle kopiert hast (weitere Einzelheiten unter FreewarWiki:Urheberrechte). ÜBERTRAGE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!

Bitte beantworte die folgende Frage, um diese Seite speichern zu können (weitere Informationen):

Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)

Die folgende Vorlage wird auf dieser Seite verwendet: