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

aus FreewarWiki, der Referenz für Freewar
Zur Navigation springen Zur Suche springen
(+ friedensmission / fehler korrigiert..waren . ; und nocch iwas zu wenig^^)
K (+ linking)
Zeile 1: Zeile 1:
<div style="background-color:#ff9;border:1px solid #fc0;border-radius:5px;padding:10px;">
<div style="background-color:#ff9;border:1px solid #fc0;border-radius:5px;padding:10px;">
Dies ist ein Skript von [[User:Cembon|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 [[User Talk:Cembon|Diskussionsseite]] --[[User:Cembon|Cembon]] ([[User Talk:Cembon|Diskussion]] | [[Spezial:Beiträge/Cembon|Beiträge]]) 08:55, 26. Feb. 2012 (CET)
Dies ist ein Skript von [[User:Cembon|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 [[User Talk:Cembon|Diskussionsseite]] <br/>
--[[User:Cembon|Cembon]] ([[User Talk:Cembon|Diskussion]] | [[Spezial:Beiträge/Cembon|Beiträge]]) 13:25, 26. Feb. 2012 (CET)
</div>
</div>


<pre>
<pre>
<?php // require 'template.inc.php';
<?php


class mwBot {
class mwBot {
Zeile 72: Zeile 73:
preg_match('#Zeit=\W*([0-9]+)#si', $content, $zeit);
preg_match('#Zeit=\W*([0-9]+)#si', $content, $zeit);
preg_match('#Friedensmission=\W*(\w+)#si', $content, $fm);
preg_match('#Friedensmission=\W*(\w+)#si', $content, $fm);
$out .= "| align=\"left\" | " . str_replace('Auftrag:', '', $page['title']) .  
$out .= "| align=\"left\" | [[" . $page['title'] . "|" . str_replace('Auftrag:', '', $page['title']) . "]]" .  
"\n|{{SortKey|{{nts|" . $gold[1] . "}}|" . $gold[1] . "}}\n" .  
"\n|{{SortKey|{{nts|" . $gold[1] . "}}|" . $gold[1] . "}}\n" .  
"|{{SortKey|{{nts|" . $ap[1] . "}}|" . $ap[1] . "}}\n" .  
"|{{SortKey|{{nts|" . $ap[1] . "}}|" . $ap[1] . "}}\n" .  

Version vom 26. Februar 2012, 14:25 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) 13:25, 26. Feb. 2012 (CET)

<?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\" | [[" . $page['title'] . "|" . 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());