Kategorien
FreewarWiki:Bot/Skripts/Waffenliste.php
< FreewarWiki:Bot | Skripts
<?php class mwBot { private $server; private $nick; public function __construct($name, $server) { $this->nick = $name; $this->server = $server; } public function status($status, $code = 0) { print date("d.m.y H:i:s") . " => " . $status . ($code == 0?"":(" (".$code.")")) . "<br/>"; } /*################################# # APIVERBINDUNG ## #################################*/ private function getAPI($query) { $c = curl_init('http://' . $this->server . '/api.php?' . $query . '&format=json'); curl_setopt($c, CURLOPT_USERAGENT, 'BotFrameWorkApi -- Benutzer:' . $this->nick); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($c); curl_close($c); $decoded = json_decode($result, true); return $decoded['query']; } /*################################# # HILFSFUNKTIONEN ## #################################*/ private function getContent($title) { $this->status('Hole Artikel: ' . htmlentities($title)); $result = $this->getAPI('action=query&prop=info|revisions&titles=' . urlencode($title) . '&rvprop=timestamp|content&intoken=edit'); $pages = $result['pages']; foreach($pages as $page) { return $page['revisions'][0]['*']; } } /*################################# # SPEZIELLE FUNKTIONEN ## #################################*/ /* Angriffswaffen des FWWiki*/ public function getAWaffe() { $pages = $this->getAPI('action=query&list=categorymembers&cmtitle=Category:' . urlencode('Angriffswaffen') . '&cmlimit=500'); $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. Da die Liste sehr lang ist, kann dies allerdings einige Sekunden dauern."); $out .= "\n\n"; $out .= "{| class=\"sortable prettytable\" style=\"text-align:right;\"\n"; $out .= "! align=\"center\" | Angriffswaffe\n"; $out .= "! align=\"center\" | Stärke\n"; $out .= "|-\n"; foreach($pages['categorymembers'] as $page) { // TODO {{Item/Layout|Typ=awaffe als Regex einbauen um nur Waffen-Artikel zu filtern $content = $this->getContent($page['title']); preg_match('#Stärke=\W*([0-9]+)#si', $content, $staerke); $out .= "| [[" . ($page['title']) . "]]" . "\n|{{SortKey|{{nts|" . $staerke[1] . "}}|" . $staerke[1] . "}}\n" . "|-\n"; } return substr($out, 0, -2) . "}\n [[Kategorie:Angriffswaffen|!]]"; } public function print2file($str, $file = 'output.txt') { return file_put_contents($file, $str); } } //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->getAWaffe())) { echo 'Daten konnten nicht geschrieben werden, Datei "output.txt" vorhanden und beschreibbar?'; }