User:MadmanBot/Source/zerozero.php
require_once '../config.php'; $log->setIdent('zerozero'); // Initialize Dementia require_once '../dementia/Dementia.php'; Dementia::init('http://en.wikipedia.org', 'enwiki-p.rrdb.toolserver.org'); // Obtain login token $login = DementiaAction::factory('login'); $result = $login->setName(BOT_NAME)->setPassword(BOT_PASSWORD)->execute(); if (!isset($result['token'])) { $log->err('Unable to obtain login token'); exit; } // Log in and get authentication tokens $login->setToken($result['token']); $result = $login->execute(); if (!isset($result['result']) || $result['result'] !== 'Success') { $log->err('Unable to log in and get authentication tokens'); exit; } // Find last revision of all pages linking to www.zerozerofootball.com $exturlusage = DementiaQuery::factory('exturlusage'); $exturlusage->setQuery('www.zerozerofootball.com')->setNamespace(0); $revisions = DementiaQuery::factory('revisions'); $revisions->setGenerator($exturlusage)->setProp('content'); while (($pages = $revisions->execute()) !== false) { // Loop through pages foreach ($pages as $page) { // Find bare links $content = $page['revisions'][0]['*']; preg_match_all($ExtLinkRegex, $content, $matches, PREG_OFFSET_CAPTURE); // Loop through links $offset = 0; foreach ($matches[0] as $key => $match) { // Get line of content $match[1] += $offset; $start = strrpos($content, "\n", -strlen($content) + $match[1]) + 1; $length = strpos($content, "\n", $match[1]) - $start; $line = substr($content, $start, $length); $link = $match[0]; $parsed_link = parse_url($link); // Skip link if not within scope if ($parsed_link['host'] != 'www.zerozerofootball.com') continue; // Replace host in link $replacement = http_build_url(array_merge($parsed_link, array('host' => 'www.footballzz.co.uk'))); // Replace link within line $line = str_replace($link, $replacement, $line); // Replace host in line $line = str_ireplace('zerozerofootball.com', 'footballzz.co.uk', $line); // Replace line within content $content = substr_replace($content, $line, $start, $length); $offset += strlen($line) - $length; } // Find bracketed links preg_match_all($ExtLinkBracketedRegex, $content, $matches, PREG_OFFSET_CAPTURE); // Loop through links $offset = 0; foreach ($matches[0] as $key => $match) { $link = $match[0]; $link_url = $matches[1][$key][0]; $link_text = $matches[3][$key][0]; $parsed_url = parse_url($link_url); // Skip link if not within scope of task if ($parsed_url['host'] != 'www.footballzz.co.uk') continue; if ($parsed_url['path'] == '/jogador.php') { // Replace link with template parse_str($parsed_url['query'], &$query); $replacement = "{{Zerozero profile|id=$query[id]}}"; } else { // Replace host in link text $new_text = str_ireplace('zerozerofootball.com', 'footballzz.co.uk', $link_text); $replacement = str_replace($link_text, $new_text, $link); } // Replace link within content $content = substr_replace($content, $replacement, $match[1], strlen($link)); $offset += strlen($replacement) - strlen($link); } if ($content == $page['revisions'][0]['*']) { $log->warning("$page[title]: No changes were made"); continue; } if (strpos($content, 'zerozerofootball.com') !== FALSE) { $log->warning("$page[title]: References to zerozerofootball.com remain"); continue; } // Edit content of page $edit = DementiaAction::factory('edit')->setTitle($page['title']); $edit->setMinor(true)->setBot(true); $edit->text = $content; $edit->summary = 'Replacing links to www.zerozerofootball.com [[Wikipedia:' . 'Bot requests#Bot needed to convert links to a template|by request]]'; $info = DementiaQuery::factory('info')->setTitles($page['title'])->setToken('edit'); $result = $info->execute(); $result = $edit->setToken($result['edittoken'])->execute(); if (!isset($result['result']) || $result['result'] !== 'Success') $log->err("Unable to edit $page[title]: " . json_encode($result)); else $log->info("Edited $page[title] successfully"); } }