Kategorien
FreewarWiki:Bot/Skripts/auftraglist.php: Unterschied zwischen den Versionen
< FreewarWiki:Bot | Skripts
Cembon (Diskussion | Beiträge) (ist extrem gekürzt, aber sollte gehen..logfunktion grad von sql auf direktausgabe umgestellt..bitte mal testen und ggf. verbessern :) |
Cembon (Diskussion | Beiträge) (+ friedensmission / fehler korrigiert..waren . ; und nocch iwas zu wenig^^) |
||
Zeile 11: | Zeile 11: | ||
public function mwBot($name, $server) { | public function mwBot($name, $server) { | ||
$this->nick = $name | $this->nick = $name; | ||
$this->server = $server; | $this->server = $server; | ||
} | } | ||
public function status($status, $code = 0) { | public function status($status, $code = 0) { | ||
print date("d.m.y H:i:s") . " => " $status . ($code == 0?"":(" (".$code.")") . "<br/>"; | print date("d.m.y H:i:s") . " => " . $status . ($code == 0?"":(" (".$code.")")) . "<br/>"; | ||
} | } | ||
Zeile 25: | Zeile 25: | ||
private function getAPI($query) { | private function getAPI($query) { | ||
$c = curl_init('http://' . $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 54: | Zeile 53: | ||
$pages = $this->getAPI('action=query&list=categorymembers&cmtitle=Category:' . urlencode('Aufträge') . '&cmlimit=500'); | $pages = $this->getAPI('action=query&list=categorymembers&cmtitle=Category:' . urlencode('Aufträge') . '&cmlimit=500'); | ||
$out = | $out = htmlentities("Diese Tabelle wird von Zeit zu Zeit automatisch aus den Daten aus den einzelnen Auftrags-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 des jeweiligen Auftrages korrigieren!"); | ||
$out .= "\n\n"; | $out .= "\n\n"; | ||
$out .= | $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 .= "\n\n"; | ||
$out .= "{| {{Prettytable|text-align:right;}} class=sortable\n"; | $out .= "{| {{Prettytable|text-align:right;}} class=sortable\n"; | ||
Zeile 63: | Zeile 62: | ||
$out .= "! align=\"center\" | AP\n"; | $out .= "! align=\"center\" | AP\n"; | ||
$out .= "! align=\"center\" | Zeit\n"; | $out .= "! align=\"center\" | Zeit\n"; | ||
$out .= "! align=\"center\" | Friedensmission\n"; | |||
$out .= "|-\n"; | $out .= "|-\n"; | ||
Zeile 71: | Zeile 71: | ||
preg_match('#AP=\W*([0-9]+)#si', $content, $ap); | preg_match('#AP=\W*([0-9]+)#si', $content, $ap); | ||
preg_match('#Zeit=\W*([0-9]+)#si', $content, $zeit); | preg_match('#Zeit=\W*([0-9]+)#si', $content, $zeit); | ||
$out .= "| align=\"left\" | " . str_replace('Auftrag:', '', $page['title']) . "\n|{{SortKey|{{nts|" . $gold[1] . "}}|" . $gold[1] . "}}\n|{{SortKey|{{nts|" . $ap[1] . "}}|" . $ap[1] . "}}\n|{{SortKey|{{nts|" . $zeit[1] . "}}|" . $zeit[1] . "}}\n|-\n"; | preg_match('#Friedensmission=\W*(\w+)#si', $content, $fm); | ||
$out .= "| align=\"left\" | " . str_replace('Auftrag:', '', $page['title']) . | |||
"\n|{{SortKey|{{nts|" . $gold[1] . "}}|" . $gold[1] . "}}\n" . | |||
"|{{SortKey|{{nts|" . $ap[1] . "}}|" . $ap[1] . "}}\n" . | |||
"|{{SortKey|{{nts|" . $zeit[1] . "}}|" . $zeit[1] . "}}\n" . | |||
"| style=\"" . | |||
(($fm[1]=='Ja' || $fm[1]=='ja')?"background-color:#0a0 !important;":($fm[1]=='semi'?"background-color:#ff9 !important;":"")) . "\" | {{SortKey|{{nts|" . | |||
(($fm[1]=='Ja' || $fm[1]=='ja')?"2":($fm[1]=='semi'?"1":"0")) . "}}|" . | |||
(($fm[1]=='Ja' || $fm[1]=='ja')?'ja':($fm[1]=='semi'?'ähnlich':'nein')) . "}}\n|-\n"; | |||
} else { | } else { | ||
$this->status($page['title'] . 'wurde übersprungen: Ist kein Auftrag', 80); | $this->status($page['title'] . 'wurde übersprungen: Ist kein Auftrag', 80); |
Version vom 26. Februar 2012, 14:11 Uhr
Dies ist ein Skript von Cembon. Es ist nicht der vollständige Quelltext des Bots, sondern nur die benötigten Teile. Wenn du hier Änderungen machst, schreibe bitte auf meine Diskussionsseite --Cembon (Diskussion | Beiträge) 08:55, 26. Feb. 2012 (CET)
<?php // require 'template.inc.php'; class mwBot { private $server; private $nick; public function mwBot($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); return json_decode($result,true)['query']; } /*################################# # HILFSFUNKTIONEN ## #################################*/ private function getContent($title) { $this->status('Hole Artikel: ' . htmlentities($title)); $pages = $this->getAPI('action=query&prop=info|revisions&titles=' . urlencode($title) . '&rvprop=timestamp|content&intoken=edit')['pages']; foreach($pages as $page) { return $page['revisions'][0]['*']; } } /*################################# # SPEZIELLE FUNKTIONEN ## #################################*/ /* Goldtabelle:Auftrag für das FwWiki */ public function getAuftragsgold() { $pages = $this->getAPI('action=query&list=categorymembers&cmtitle=Category:' . urlencode('Aufträge') . '&cmlimit=500'); $out = htmlentities("Diese Tabelle wird von Zeit zu Zeit automatisch aus den Daten aus den einzelnen Auftrags-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 des jeweiligen Auftrages 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 .= "{| {{Prettytable|text-align:right;}} class=sortable\n"; $out .= "! align=\"center\" | Auftrag\n"; $out .= "! align=\"center\" | Gold\n"; $out .= "! align=\"center\" | AP\n"; $out .= "! align=\"center\" | Zeit\n"; $out .= "! align=\"center\" | Friedensmission\n"; $out .= "|-\n"; foreach($pages['categorymembers'] as $page) { if(strpos($page['title'], "Auftrag:") !== false) { $content = $this->getContent($page['title']); preg_match('#Gold=\W*([0-9]+)#si', $content, $gold); preg_match('#AP=\W*([0-9]+)#si', $content, $ap); preg_match('#Zeit=\W*([0-9]+)#si', $content, $zeit); preg_match('#Friedensmission=\W*(\w+)#si', $content, $fm); $out .= "| align=\"left\" | " . str_replace('Auftrag:', '', $page['title']) . "\n|{{SortKey|{{nts|" . $gold[1] . "}}|" . $gold[1] . "}}\n" . "|{{SortKey|{{nts|" . $ap[1] . "}}|" . $ap[1] . "}}\n" . "|{{SortKey|{{nts|" . $zeit[1] . "}}|" . $zeit[1] . "}}\n" . "| style=\"" . (($fm[1]=='Ja' || $fm[1]=='ja')?"background-color:#0a0 !important;":($fm[1]=='semi'?"background-color:#ff9 !important;":"")) . "\" | {{SortKey|{{nts|" . (($fm[1]=='Ja' || $fm[1]=='ja')?"2":($fm[1]=='semi'?"1":"0")) . "}}|" . (($fm[1]=='Ja' || $fm[1]=='ja')?'ja':($fm[1]=='semi'?'ähnlich':'nein')) . "}}\n|-\n"; } else { $this->status($page['title'] . 'wurde übersprungen: Ist kein Auftrag', 80); } } return substr($out, 0, -2) . "}"; } public function print2file($str) { $fo = fopen('output.txt', "w"); fwrite($fo, $str); fclose($fo); } } //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! $bot->print2file($bot->getAuftragsgold());