Benutzer:APPER/MwBot.php

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Die Druckversion wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.
<?php
 // Most simple test program
 // (adds "Hallo" to the german Spielwiese, summary is "Testedit")
 // $mwbot = new MwBot("de.wikipedia.org", "Username", "password");
 // $mwbot->savePage("Wikipedia:Spielwiese", $mwbot->readPage("Wikipedia:Spielwiese") . "\nHallo", "Testedit");
 class MwBot {
 protected $host;
 protected $username;
 protected $password;
 protected $cookies;
 public $bot = 1; // set to 0 if this edit should not be marked as bot edit
 public function MwBot($host, $username, $password) {
 $this->host = $host;
 $this->username = $username;
 $this->password = $password;
 $this->cookies = "";
	 
 $this->login();
 }
		
 protected function login() {
 // first step: get login token
 $data = "action=query&format=php&meta=tokens&type=login";
 $website = $this->PostToHost($this->host, "/w/api.php", $data);
 $this->cookies = $this->GetCookies($website);
 $website = trim(substr($website, strpos($website, "\n\r\n")));
 $answer = unserialize($website); 
 $login_token = $answer['query']['tokens']['logintoken'];
	 if ($login_token == "") {
	 trigger_error("Cannot get valid login token\n", E_USER_ERROR);
	 }
 
 // second step: perform login
 $data = "action=login&format=php&lgname=" . urlencode($this->username) . "&lgpassword=" . urlencode($this->password) . "&lgtoken=" . urlencode($login_token);
 $website = $this->PostToHost($this->host, "/w/api.php", $data);
	 $this->cookies = $this->GetCookies($website);
 }
		
 public function savePage($title, $content, $summary) {
 // get edit token
 $data = "action=query&format=php&meta=tokens&type=csrf";
 $website = $this->PostToHost($this->host, "/w/api.php", $data);
 $website = trim(substr($website, strpos($website, "\n\r\n"))); // remove header
 $answer = unserialize($website);
 $token = $answer['query']['tokens']['csrftoken'];
 
 // now save using the edit token
 $data = "action=edit&format=php&title=" . urlencode($title) . "&text=" . urlencode($content) . "&token=" . urlencode($token) . "&summary=" . urlencode($summary) . "&bot=" . $this->bot;
 $website = $this->PostToHost($this->host, "/w/api.php", $data);
 }
 
 public function readPage($title) {
 $crl = curl_init();
 curl_setopt ($crl, CURLOPT_URL, "https://" . $this->host . "/w/index.php?title=" . urlencode($title) . "&action=raw");
 curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, 5); // 5 seconds
 curl_setopt ($crl, CURLOPT_USERAGENT, "MwBot"); 
 $ret = curl_exec($crl);
 curl_close($crl);
 return $ret;
 }
		
 // POST-Funktion
 protected function PostToHost($host, $path, $data) {
 $fp = fsockopen("ssl://" . $host, 443, $errno, $errstr, 30);
 if (!$fp) { 
	 trigger_error("Cannot create fsock:" . $errstr . " (" . $errno . ")\n", E_USER_ERROR); 
	 }
	 $str = "POST " . $path . " HTTP/1.0\r\n";
	 $str .= "Host: " . $host . "\r\n";
	 $str .= "User-Agent: MwBot\r\n";
	 $str .= "Connection: close\r\n";
	 $str .= "Content-type: application/x-www-form-urlencoded\r\n";
	 $str .= "Content-length: ". strlen($data) ."\r\n";
 if ($this->cookies != "") {
	 $str .= $this->cookies;
	 }
	 $str .= "\r\n";
	 $str .= $data;
 fputs($fp, $str);
 $res = "";
 while (!feof($fp)) {
	 $res .= fgets($fp, 128);
	 }
 fclose($fp);
 return $res;
 }
 
 protected function GetCookies($website) {
 $cookies = "";
 $regexp = "/Set-Cookie: ([^;]+)/";
 preg_match_all($regexp, $website, $treffer, PREG_SET_ORDER);
 foreach ($treffer as $wert) {
	 if (trim($wert[1]) != "" && strpos($wert[1], "=deleted") == false) {
	 $cookies .= "" . $wert[1] . "; ";
	 }
	 }
 return "Cookie: " . $cookies . "\r\n"; 
 }
 }
?>
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Benutzer:APPER/MwBot.php&oldid=198973409"