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

aus FreewarWiki, der Referenz für Freewar
Zur Navigation springen Zur Suche springen
(hoffe es passt, falls man es nochmal braucht)
 
KKeine Bearbeitungszusammenfassung
Zeile 49: Zeile 49:
#################################*/
#################################*/
/* Goldtabelle:Auftrag für das FwWiki */
/* Suche nach dem String $searchstr in der Kategorie $cat */
public function searchFor($cat, $searchstr) {
public function searchFor($cat, $searchstr) {

Version vom 26. Februar 2012, 16:33 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 __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);
		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         ##
	#################################*/	
	
	/* Suche nach dem String $searchstr in der Kategorie $cat */
	
	public function searchFor($cat, $searchstr) {
		$pages = $this->getAPI('action=query&list=categorymembers&cmtitle=Category:' . urlencode($cat) . '&cmlimit=500');
		
		$out = 0;
		$out2 = 0;
		$list = "";
		
		foreach($pages['categorymembers'] as $page) {
			if(strpos($page['title'], "Auftrag:") !== false) {
				$content = $this->getContent($page['title']);
				if(preg_match('#' . $searchstr . '=\W*(\w+)#si', $content,$match) == 1) {
					$out++;
					if($match[1] == 'none') {
						$out2++;
					} else {
						$list .= "<br>* [[" . $page['title'] . "]]";
					}
				}
			} else {
				$this->status($page['title'] . 'wurde übersprungen: Ist kein Auftrag', 80);
			}
		}
		
		return "Gefunden: " . $out . 'mal, Auf <i>none</i> gesetzt: ' . $out2 . 'mal, ' . $list;
	}
	
	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!
$botresult = $bot->searchFor("Aufträge", "Lösung");
if (false === $bot->print2file($botresult)) {
   echo '<br><br><br>Daten konnten nicht geschrieben werden, Datei "output.txt" vorhanden und beschreibbar?';
}
echo '<br><br><br>' . $botresult;