Benutzer:RevoBot/Quelltext
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 "§ion=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);