Benutzer:RevoBot/Quelltext

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
<?php
	function newPost($s) {
		global $post, $fields;
		if(isset($fields[$s])) {
			$post[$s] = $fields[$s];
		}
	}
		
	function bearbeiten($inhalt) {
		// Was soll man denn schönes mit dem Quelltext anfangen?
	}
		
	$wgUserName = '***';
	$server = 'de.wikipedia.org';
	$indexpath = '/w/index.php'
	$cookie = 'dewiki_session=***; '.
		'dewikiUserID=***; '.   // Ich habe mich ganz normal eingeloggt 
		'dewikiUserName=***; '. // und die Daten dann aus dem Browser ausgelesen.
		'dewikiToken=***;';
		
	$header[0] = 'Accept: */*';
	$header[] = 'Cache-Control: max-age=0';
	$header[] = 'Connection: keep-alive';
	$header[] = 'Keep-Alive: 300';
	$header[] = 'Accept-Charset: utf-8,*';
	$header[] = 'Accept-Language: de';
	
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_COOKIE, $cookie);
	curl_setopt($curl, CURLOPT_USERAGENT, $wgUserName);
	curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
	curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_TIMEOUT, 30);
	curl_setopt($curl, CURLOPT_AUTOREFERER, true);
	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
	
	unset($header, $cookie);
	
/*//////////////////////////////////////////////////////
	
	Ab hier kann man alles in eine Schleife packen.
	Curl versucht die Verbindung aufrecht zu erhalten.
	
//////////////////////////////////////////////////////*/

	$seite = '***';
	$summary = '***';
	
	curl_setopt($curl, CURLOPT_URL, // Hier kann man nach Belieben auch "&section=X" anhängen
		'http://'.$server.$indexpath.'?title='.urlencode($seite).'&action=edit');
	$html = curl_exec($curl); // Der Bot merkt es nicht, wenn er die Seite gar nicht editieren darf.
	preg_match('#wgUserName = "(.*?)"#', $html, $benutzerName);
	if($benutzerName[1] != $wgUserName) { // Der Cookie könnte abgelaufen sein
		die('ACHTUNG: Benutzername: '.$benutzerName[1]."\n");
	}
	preg_match('#<textarea.*?>(.*?)</textarea>#ms', $html, $textarea);
	
	$inhalt = bearbeiten(html_entity_decode($textarea[1]));
		// Hier kommt das eigentliche Editieren hin.
	
	$post = array(
		'wpMinoredit' => '1', // Wenn es keine kleine Änderung ist, diese Zeile ganz weglassen.
		'wpSummary'   => 'Bot-Edit: '.$summary,
		'wpTextbox1'  => $inhalt);
	preg_match_all('#<input (.*?) />#', $html, $inputs);
	foreach($inputs[1] as $v) {
		preg_match_all('#\s*(.*?)=([\'"])(.*?)\2#', $v, $defs);
		foreach($defs[1] as $k => $v) {
			switch($v) {
				case('value'): $value = $defs[3][$k]; break;
				case('name'): $name = $defs[3][$k]; break;
			}
		}
		if(isset($name) && isset($value)) {
			$fields[$name] = $value;
		}
		unset($value, $name);
	}
	newPost('wpSave');
	newPost('wpSection');
	newPost('wpStarttime');
	newPost('wpEdittime');
	newPost('wpEditToken');
	newPost('wpAutoSummary');
	newPost('baseRevId');
	unset($inhalt, $inputs, $fields);
	
	curl_setopt($curl, CURLOPT_URL,
		'http://'.$server.$indexpath.'?title='.urlencode($seite).'&action=submit');
	curl_setopt($curl, CURLOPT_POST, true);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
	
	$html = curl_exec($curl); // Bearbeitungskonflikte werden nicht abgefangen
	preg_match('#wgCurRevisionId = "(.*?)"#', $html, $diff); // Den Diff herausfinden, für Logs und so
	unset($html);