Bearbeiten von „FreewarWiki:Bot/Skripts/Waffenliste.php

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 3: Zeile 3:
<pre>
<pre>
<?php
<?php
$cats = array("Verteidigungswaffen", "Angriffswaffen");
if (!isset($argv[1]) && !in_array($argv[1], $cats)) {
die("Nutzung: php Waffenliste.php arg\narg ist dabei einer der folgenden Werte: " . implode(", ", $cats) . "\n");
}


//Benutzername wird für den User-Agent benötigt
//Benutzername wird für den User-Agent benötigt
$bot = new mwBot('Beispieluser', 'www.fwwiki.de');
$bot = new mwBot('Beispieluser', 'www.fwwiki.de');
//HINWEIS: Skript schreibt Output in die Textdatei output.txt, evtl muss diese bestehen und die nötigen Rechte gegeben sein!
//HINWEIS: Skript schreibt Output in die Textdatei output.txt, evtl muss diese bestehen und die nötigen Rechte gegeben sein!
if (false === $bot->print2file($bot->start($argv[1]))) {
if (false === $bot->print2file($bot->erstelleTabelle())) {
echo 'Daten konnten nicht geschrieben werden, Datei "output.txt" vorhanden und beschreibbar?';
  echo 'Daten konnten nicht geschrieben werden, Datei "output.txt" vorhanden und beschreibbar?';
}
}


Zeile 26: Zeile 21:
public function status($status, $code = 0) {
public function status($status, $code = 0) {
print date("d.m.y H:i:s") . " => " . $status . ($code == 0?"":(" (".$code.")")) . "\n";
print date("d.m.y H:i:s") . " => " . $status . ($code == 0?"":(" (".$code.")")) . "<br/>";
}
}
Zeile 34: Zeile 29:
private function getAPI($query) {
private function getAPI($query) {
$c = curl_init('https://' . $this->server . '/api.php?' . $query . '&format=json');  
$c = curl_init('http://' . $this->server . '/api.php?' . $query . '&format=json');  
curl_setopt($c, CURLOPT_USERAGENT, 'BotFrameWorkApi -- Benutzer:' . $this->nick);
curl_setopt($c, CURLOPT_USERAGENT, 'BotFrameWorkApi -- Benutzer:' . $this->nick);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
Zeile 48: Zeile 43:
private function getContent($title) {
private function getContent($title) {
$this->status('Hole Artikel: ' . $title);
$this->status('Hole Artikel: ' . htmlentities($title));
$result = $this->getAPI('action=query&prop=info|revisions&titles=' . urlencode($title) . '&rvprop=timestamp|content&intoken=edit');
$result = $this->getAPI('action=query&prop=info|revisions&titles=' . urlencode($title) . '&rvprop=timestamp|content&intoken=edit');
$pages = $result['pages'];
$pages = $result['pages'];
Zeile 60: Zeile 55:
#################################*/
#################################*/
/* Main-Funktion - sucht die Artikel einer Waffenkategorie und baut die Wiki-Seite auf */
/* Angriffswaffen des FWWiki*/
public function start($cat) {
$pages = $this->getAPI('action=query&list=categorymembers&cmtitle=Category:' . urlencode($cat) . '&cmlimit=500');
public function erstelleTabelle() {
$pages = $this->getAPI('action=query&list=categorymembers&cmtitle=Category:' . urlencode('Angriffswaffen') . '&cmlimit=500');


foreach ($pages['categorymembers'] as $page) {
foreach($pages['categorymembers'] as $page) {
$content = $this->getContent($page['title']);
$content = $this->getContent($page['title']);
if ($this->isWaffe($content)) {
if ($this->isWaffe($content)) {
$waffenArray[] = $this->createWaffe($content, $page['title']);
$waffenArray[] = $this->createWaffe($content, ($page['title']));
}
}
else {
else {
echo "\tArtikel beschreibt keine Waffe!\n";
echo "Artikel beschreibt keine Waffe!";
}
}
}
}
// Sortierung des Arrays nach der Stärke der Waffen-Objekte
// Sortierung des Arrays nach der Staerke der Waffen-Objekte
usort($waffenArray, array("Waffe", "cmpWaffe"));
usort($waffenArray, array("Waffe", "cmpWaffe"));
// Zählen der Waffen
$out = htmlentities("Diese Tabelle wird von Zeit zu Zeit automatisch aus den Daten aus den einzelnen Angriffswaffen-Artikeln erstellt (zuletzt am '''" . date("d.m.Y H:i:s") . "'''). Die Daten hier sollten nicht direkt geändert werden, weil solche Änderungen bei einer Neuerstellung verloren gehen. Stattdessen bitte die Daten auf den Seiten der jeweiligen Angriffswaffe korrigieren!");
$count = count($waffenArray);
// Aufbau der Liste
$out = "<noinclude>\nDiese Liste wird von Zeit zu Zeit automatisch aus den Daten aus den einzelnen $cat-Artikeln erstellt (zuletzt am '''" . date("d.m.Y H:i:s") . "'''). Das Script um die Liste zu akualisieren findet ihr hier [[FreewarWiki:Bot/Skripts/Waffenliste.php]].";
$out .= "\n\n";
$out .= "\n\n";
$out .= "Anzahl Waffen: " . $count . "\n\n</noinclude><!--\n\n-->{{#vardefine:" . $cat . "Anzahl|" . $count . "}}<!--\n";
$out .= "{| class=\"prettytable\"\n";
$out .= "! align=\"center\" | Angriffswaffe\n";
$out .= "|-\n";
// Durchlaufen des Waffen-Arrays und Hinzufuegen zur Liste
foreach($waffenArray as $currentWaffe) {
foreach($waffenArray as $currentWaffe) {
$out .= "\n-->{{{{{Vorlage}}}|Name=" . $currentWaffe->name . "}}<!--" ;  
$out .= "| [[" . ($currentWaffe -> name) . "]]\n" . "|-\n";  
}
}
return $out . "\n\n--><noinclude>{{Dokumentation}}</noinclude>";
return substr($out, 0, -2) . "}\n";
}
}
/* Überprüfung ob der Artikel eine Waffe ist */
private function isWaffe($content) {
private function isWaffe($content) {
// Überprüfung ob der Artikel dem Layout für eine Angriffswaffe entspricht
// Ueberpruefung ob der Artikel dem Layout fuer eine Angriffswaffe entspricht
if (preg_match('~Item/Layout|Typ=awaffe~', $content)) {
if ( preg_match('/Item\/Layout|Typ=awaffe/', $content) ) {
// Überprüfung ob der Artikel eine saisonale Waffe beschreibt
// Ueberpruefung ob der Artikel eine saisonale Waffe beschreibt
if (!preg_match('/Saisonale Items/', $content)) {
if ( !(preg_match('/Saisonale Items/', $content)) ) {
return true;
return true;
}
}
Zeile 103: Zeile 95:
}
}
/* Erstellen eines neuen Waffen-Objektes */
private function createWaffe($content, $name) {
private function createWaffe($content, $name) {
preg_match('#\|Stärke=\W*([0-9]+)#si', $content, $staerke);
preg_match('#Stärke=\W*([0-9]+)#si', $content, $staerke);
return new Waffe($name, $staerke[1]);
$newWaffe = new Waffe( $name, ($staerke[1]) );
return $newWaffe;
}
}
public function print2file($str, $file = 'output.txt') {
public function print2file($str, $file = 'output.txt') {
Zeile 114: Zeile 107:
}
}


/* Waffen-Objekt */
class Waffe {
class Waffe {
public $name;
public $name;
public $staerke;
public $staerke;
 
// Konstruktor fuer ein Waffen-Objekt
function __construct($name, $staerke){
function Waffe ($name, $staerke){
$this->name = $name;
        $this->name   = $name;
$this->staerke = $staerke;
$this->staerke = $staerke;
}
    }
 
// Vergleichsfunktion fuer Waffen-Objekte
// Vergleichsfunktion fuer Waffen-Objekte
static function cmpWaffe($waffe1, $waffe2){
static function cmpWaffe($waffe1, $waffe2){
$staerke1 = $waffe1->staerke;
        $staerke1 = $waffe1 -> staerke;
$staerke2 = $waffe2->staerke;
        $staerke2 = $waffe2 -> staerke;
if ($staerke1 == $staerke2) {
        if ($staerke1 == $staerke2) {
return strcasecmp($waffe1->name, $waffe2->name);
$name1 = $waffe1 -> name;
}
$name2 = $waffe2 -> name;
return $staerke1 - $staerke2;
return ($name1 > $name2) ? +1 : -1;
}
        }
        return ($staerke1 > $staerke2) ? +1 : -1;
    }
}
}
</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: