User:Botodo/Source

  1. log in credentials should be included here

require_once('botodologin');

  1. Snoopy should be set so the host name is en.wikipedia.org.

require_once('Snoopy.class.php');

$bot = new Snoopy();

define("debugon", $_GET["debug"]);

define("editinterval", 60);

define("wikiroot", "http://en.wikipedia.org/w/index.php?");

function debug($b="Ping", $t="", $a="") {

if (debugon){

print "
$b $t $a
";

}

}

function content($title) {

// Returns the raw wikitext, unless there's a bot prohibition, in which case it returns false.

global $bot;

$bot->fetchtext(wikiroot . "title=" . $title . "&action=raw");

$rawtext = $bot->results;

if (!preg_match("/{{nobots}}|{{bots|deny=[^}]*(" . USERNAME . "|all)[^}]*}}|{{bots|allow=none}}/", $rawtext)) return $rawtext;

return false;

}

function countMainLinks($title) {

// Counts the links to the mainpage

global $bot;

if(preg_match("/\w*:(.*)/", $title, $title)) $title = $title[1]; //Gets {{PAGENAME}}

$url = wikiroot . "title=Special%3AWhatlinkshere&target=$title&limit=500&namespace=$namespace&from=$offset";

$bot->fetchtext($url);

debug("Just fetched:", '"What links here", URL:', $url);

$response = explode("\n", $bot->results);

return count($response) - 68;

}

function whatTranscludes($title, $namespace = false /* 0 = main */, $limit = 10000, $offset = 0) {

// Returns an array of links to a specified page.

global $bot;

$url = wikiroot . "title=Special%3AWhatlinkshere&target=Template:" . urlencode($title) . "&limit=" . $limit . "&namespace=$namespace&from=$offset";

$bot->fetchtext($url);

debug("Just fetched:", '"What links here", URL:', $url);

$response = $bot->results;

if (preg_match_all("/(500\)|\n)([^\|]*)( \(transclusion\))? +\(links\)/U", $response, $links)) {

debug("Number of results:", count($links[2]));

return $links[2];

}

return false;

}

function nextTransclusion($title, $namespace = false /* 0 = main */) {

// Returns an array of links to a specified page.

global $bot;

global $offset;

$url = wikiroot . "title=Special%3AWhatlinkshere&target=Template:" . urlencode($title) . "&limit=1&namespace=$namespace&from=$offset";

$bot->fetch($url);

$page = $bot->results;

preg_match("/from=(\d*)&back=.*>next<\/a>/U", $page, $nextoffset);

preg_match("|/wiki/[^\$]*/wiki/([^\"]*)\"|Us", $page, $articlename);

debug("Just fetched:", '"What links here", Offset was ' . $nextoffset[1] . ', URL:', $url);

$offset = $nextoffset[1];

return $articlename[1];

return false;

}

function logIn($username, $password) {

global $bot;

$loginUrl = wikiroot . "title=Special:Userlogin&action=submitlogin&type=login";

$submit_vars["wpName"] = $username;

$submit_vars["wpPassword"] = $password;

$submit_vars["wpRemember"] = 1;

$submit_vars["wpLoginattempt"] = "Log+in";

$bot->submit($loginUrl, $submit_vars);

debug("Logging in:", "as " . $username . " at", $loginUrl);

if (ereg("You have successfully signed in to Wikipedia", $bot->results)) return true;

debug("Login failed!"); return false;

}

function write($page, $data, $editsummary = "Bot edit") {

global $bot;

//Load edit page so we can scrape starttimes

$editUrl = wikiroot . "title=$page&action=edit";

$bot->fetchform($editUrl);

$form = $bot->results;

preg_match_all("~name=\"(.*)\"~U", $form, $name);

preg_match_all("~value=\"(.*)\"~U", $form, $value);

for ($i= 15; $i>=0; $i--) $value[1][$i] = $value[1][$i-1]; //Aligns name and value; textarea and form name combine to knock them adrift.

//Save the variable set on the edit page

$page_vars = array_combine($name[1], $value[1]);

//Set our post vars to the values of the inputs:

$submit_vars["wpEdittime"] = $page_vars["wpEdittime"];

$submit_vars["wpStarttime"] = $page_vars["wpStarttime"];

$submit_vars["wpEditToken"] = $page_vars["wpEditToken"];

// The less glamorous post vars also need setting:

$submit_vars["wpScrollTop"] = "0";

$submit_vars["wpSection"] = "";

$submit_vars["wpTextbox1"] = $data;

$submit_vars["wpSummary"] = $editsummary;

$submit_vars["wpMinoredit"] = 1;

$submit_vars["wpWatchthis"] = 0;

// Set this var to determine the action - Save page!

$submit_vars["wpSave"] = "Save+page";

$submitUrl = wikiroot . "title=$page&action=submit";

debug("Attempting to edit:", $page, $submitUrl);

debug("with variables:", "Starttime: " . $submit_vars["wpStarttime"] . " - Edit time:" . $submit_vars["wpEdittime"] . " - Edit token: " . $sumbit_vars["wpEditToken"]);

$bot->submit($submitUrl, $submit_vars);

debug("Edit made", "to $page");

}

print "Botodo";

debug("Welcome to BoToDo!", "Debug mode is on");

logIn(USERNAME, PASSWORD);

for ($i = 1; $i<10; $i++) {

$starttime = time();

$page = nextTransclusion("Todo", false);

$nolinks = countMainLinks($page);

print "Found $nolinks links regarding to do box at $page;\n";

if ($nolinks < 3) $p = 9;

else if ($nolinks < 6) $p=8;

else if ($nolinks < 11) $p=7;

else if ($nolinks < 21) $p=6;

else if ($nolinks < 51) $p=5;

else if ($nolinks < 101) $p=4;

else if ($nolinks < 251) $p=3;

else if ($nolinks < 501) $p=2;

else $p=1;

print "Assigning priority $p...\n\n";

$bot->fetchtext(wikiroot . "title=$page&action=raw");

$pagecode = $bot->results;

write($page, preg_replace("~{{todo(\|small=[^\|\}]*)?(\|list=[^\|\}]*)?(\|\d)?}}~U", "{{todo$1$2|$p}}", $pagecode), "Categorising To Do box as priority $p");

$endtime = time();

$timetaken = $endtime - $starttime;

print " Done in ${timetaken}s.
\n\n";

sleep(editinterval-$timetaken);

print "
Catching my breath for " . editinterval-$timetaken." seconds...

";

}