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"; } } ?>