FreewarWiki:Bot/Skripts/auftraglist.php

aus FreewarWiki, der Referenz für Freewar
Version vom 26. Februar 2012, 14:11 Uhr von Cembon (Diskussion | Beiträge) (+ friedensmission / fehler korrigiert..waren . ; und nocch iwas zu wenig^^)
Zur Navigation springen Zur Suche springen

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());