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
$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!
if (false === $bot->print2file($bot->start($argv[1]))) {
echo 'Daten konnten nicht geschrieben werden, Datei "output.txt" vorhanden und beschreibbar?';
}


class mwBot {
class mwBot {
Zeile 26: Zeile 14:
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 22:
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 36:
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 48:
#################################*/
#################################*/
/* 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 getAWaffe() {
 
$pages = $this->getAPI('action=query&list=categorymembers&cmtitle=Category:' . urlencode('Angriffswaffen') . '&cmlimit=500');
foreach ($pages['categorymembers'] as $page) {
$count = 0;
$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!");
$out .= "\n\n";
$out .= htmlentities("Die Buttons neben den Überschriften können zum Sortieren angeklickt werden.");
$out .= "\n\n";
$out .= "{| class=\"sortable prettytable\"\n";
$out .= "! align=\"center\" | Angriffswaffe\n";
$out .= "! align=\"center\" | Stärke\n";
$out .= "|-\n";
foreach($pages['categorymembers'] as $page) {
$content = $this->getContent($page['title']);
$content = $this->getContent($page['title']);
if ($this->isWaffe($content)) {
// Ueberpruefung ob der Artikel dem Layout fuer eine Angriffswaffe entspricht
$waffenArray[] = $this->createWaffe($content, $page['title']);
if (preg_match('/Item\/Layout|Typ=awaffe/', $content)) {
// Ueberpruefung ob der Artikel eine saisonale Waffe beschreibt
if (preg_match('/Saisonale Items/', $content)) {
echo 'Waffe ist nur ein saisonales Item';
}
else {
$count += 1;
preg_match('#Stärke=\W*([0-9]+)#si', $content, $staerke);
$out .= "| [[" . ($page['title']) . "]]" .
"\n|{{SortKey|{{nts|" . $staerke[1] . "}}|" . $staerke[1] . "}}\n" . 
"|-\n";
}
}
}
else {
else {
echo "\tArtikel beschreibt keine Waffe!\n";
echo 'Artikel ist keine Angriffswaffe';
}
}
}
}
// Sortierung des Arrays nach der Stärke der Waffen-Objekte
return substr($out, 0, -2) . "}\n" . "Gesamt = " . $count ;
usort($waffenArray, array("Waffe", "cmpWaffe"));
// Zählen der Waffen
$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 .= "Anzahl Waffen: " . $count . "\n\n</noinclude><!--\n\n-->{{#vardefine:" . $cat . "Anzahl|" . $count . "}}<!--\n";
// Durchlaufen des Waffen-Arrays und Hinzufuegen zur Liste
foreach($waffenArray as $currentWaffe) {
$out .= "\n-->{{{{{Vorlage}}}|Name=" . $currentWaffe->name . "}}<!--" ;
}
return $out . "\n\n--><noinclude>{{Dokumentation}}</noinclude>";
}
/* Überprüfung ob der Artikel eine Waffe ist */
private function isWaffe($content) {
// Überprüfung ob der Artikel dem Layout für eine Angriffswaffe entspricht
if (preg_match('~Item/Layout|Typ=awaffe~', $content)) {
// Überprüfung ob der Artikel eine saisonale Waffe beschreibt
if (!preg_match('/Saisonale Items/', $content)) {
return true;
}
}
return false;
}
/* Erstellen eines neuen Waffen-Objektes */
private function createWaffe($content, $name) {
preg_match('#\|Stärke=\W*([0-9]+)#si', $content, $staerke);
return new Waffe($name, $staerke[1]);
}
}
Zeile 114: Zeile 91:
}
}


class Waffe {
//Benutzername wird für den User-Agent benötigt
public $name;
$bot = new mwBot('Beispieluser', 'www.fwwiki.de');
public $staerke;
//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->getAWaffe())) {
function __construct($name, $staerke){
  echo 'Daten konnten nicht geschrieben werden, Datei "output.txt" vorhanden und beschreibbar?';
$this->name = $name;
}
$this->staerke = $staerke;
}


// Vergleichsfunktion fuer Waffen-Objekte
static function cmpWaffe($waffe1, $waffe2){
$staerke1 = $waffe1->staerke;
$staerke2 = $waffe2->staerke;
if ($staerke1 == $staerke2) {
return strcasecmp($waffe1->name, $waffe2->name);
}
return $staerke1 - $staerke2;
}
}
</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: