FreewarWiki:Bot/Skripts/auftraglist.php: Unterschied zwischen den Versionen

aus FreewarWiki, der Referenz für Freewar
Zur Navigation springen Zur Suche springen
(ist extrem gekürzt, aber sollte gehen..logfunktion grad von sql auf direktausgabe umgestellt..bitte mal testen und ggf. verbessern :)
 
(+ 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_COOKIE, $this->getCookies());
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 = utf8_encode("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 = 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 .= utf8_encode("Die Buttons neben den Überschriften können zum Sortieren angeklickt werden. Da die Liste sehr lang ist, kann dies allerdings einige Sekunden dauern.");
$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 &uuml;bersprungen: Ist kein Auftrag', 80);
$this->status($page['title'] . 'wurde &uuml;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());