Wikipedia:Banner standardisation/Code
This page is currently inactive and is retained for historical reference. Either the page is no longer relevant or consensus on its purpose has become unclear. To revive discussion, seek broader input via a forum such as the village pump. |
<?php
$username="";
$password="";
$PageNames=array();
$querycontinue="NONE";
$querynumber=0
//Getting articles from Category:WikiProject banners
while($querycontinue) {
$CatQuery[$querynumber]=new DOMDocument();
$url="http://en.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:WikiProject banners&cmlimit=500&format=xml&cmprop=ids|title|sortkey|timestamp";
if($querycontinue&&$querycontinue!="NONE") { $url=$url."$cmcontinue=".ereg_replace("&",'%26',$querycontinue); }
$CatQuery[$querynumber]->load($url);
$arrayoffset=$querynumber*500;
$x=0;
for($i=$arrayoffset;$i<$arrayoffset+$CatQuery[$querynumber]->getElementsByTagName("cm")->length;$i++) {
$TitleArray[$i]=$CatQuery[$querynumber]->getElementsByTagName("cm")->item($x)->attributes->getNamedItem("title")->nodeValue;
$x++;
}
if($CatQuery[$querynumber]->getElementsByTagName("query-continue")->length>0) {
$querycontinue=$CatQuery[$querynumber]->getElementsByTagName("query-continue")->item(0)->childNodes->item(0)->attributes->getNamedItem("cmcontinue")->nodeValue;
echo $querycontinue;
$querynumber++;
}
else { $querycontinue=false; }
}
echo "\n\n\n";
$MoveName=array();
$NeedsHuman=array();
foreach($TitleArray as $number=>$title) {
//Checking for Incorrect Syntax
if(!ereg("Template:WikiProject ",$title) {
//Checking for Project Mentions
$ProjectMentions=array();
$APIInfo=new DOMDocument();
$APIInfo->load("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&titles=".ereg_replace("&",'%26',$title));
echo ereg_replace("&",'%26',$title)."-".$number."|";
ereg("\[\[Wikipedia:WikiProject [^\]\|]",$APIInfo,$ProjectMentions);
//Matching Obvious Project Mentions and Setting Move Name
if(isset($ProjectMentions[1])&&((!isset($ProjectMentions[2]))||(isset($ProjectMentions[2])&&$ProjectMentions[2]==$ProjectMentions[1]))) {
$MoveName[$title]="Template:WikiProject ".ereg_replace("Wikipedia:WikiProject ","",ereg_replace("[\[\]\|]","",$ProjectMentions[1]));
//OR adding to List that needs to be sorted by hand.
else { $NeedsHuman[$title]=$title; }
unset($ProjectMentions);
}
}
//Checking for existing page
$NeedsDeletion=array();
$NeedsMove=array();
foreach($MoveName as $oldtitle=>$newtitle) {
$APIInfo=new DOMDocument();
$APIInfo->load("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&titles=".ereg_replace("&",'%26',$newtitle));
// Checking for non-existent page
if(isset($APIInfo->getElementsByTagName("page")->item(0)->attributes->getNamedItem("missing")) {
$NeedsMove[$oldtitle]=$newtitle;
}
// Checking for redirect page
elseif(ereg("#REDIRECT \[\[".$oldtitle,$APIInfo->getElementsByTagName("rev")->item(0)->nodeValue)) {
$NeedsDeletion[$oldtitle]=$newtitle;
}
// Adding others to NeedsHuman
else { $NeedsHuman[$oldtitle]=$oldtitle; }
}
unset($MoveName);
// Logging In
$LoginGet=curl_init("http://en.wikipedia.org/w/api.php");
curl_setopt($LoginGet,CURLOPT_POST,1);
curl_setopt($LoginGet,CURLOPT_RETURNTRANSFER,1);
curl_setopt($LoginGet,CURLOPT_COOKIEJAR,"cookies.txt");
curl_setopt($LoginGet,CURLOPT_POSTFIELDS,"lgname=".$username."&lgpassword=".$password."&action=login&format=xml");
$LoginResult=curl_exec($LoginGet);
$LoginDOM=new DOMDocument();
$LoginDOM->loadXML($LoginResult);
if($LoginDOM-getElementsByTagName("login")->item(0)->attributes->getNamedItem('result')->nodeValue!="Success") { die("No Login"); }
curl_close($LoginGet);
// UPDATE: Arrays to be acted upon -- NeedsMove, NeedsDeletion, and NeedsHuman
// Moving pages that can be moved
foreach($NeedsMove as $oldtitle=>$newtitle) {
$MoveRequest=curl_init("http://en.wikipedia.org/w/index.php?title=Special:Movepage&action=submit");
curl_setopt($MoveRequest,CURLOPT_RETURNTRANSFER,1);
curl_setopt($MoveRequest,CURLOPT_POST,1);
curl_setopt($MoveRequest,CURLOPT_COOKIEJAR,"cookies.txt");
curl_setopt($MoveRequest,CURLOPT_COOKIEFILE,"cookies.txt");
$POSTvars="wpNewTitle=".$newtitle."&wpOldTitle=".$oldtitle."&wpReason=WikiProject Banner standardisation";
$MoveTokenXML=new DOMDocument();
$MoveTokenXML->load("http://en.wikipedia.org/w/api.php?action=query&prop=info&intoken=move&format=xml&titles=".$oldtitle);
$MoveToken=$MoveTokenXML->getElementsByTagName("page")->item(0)->attributes->getNamedItem("movetoken")->nodeValue;
$POSTvars=$POSTvars."&wpMove=Move page&wpEditToken=".$MoveToken;
curl_setopt($MoveRequest,CURLOPT_POSTFIELDS,$POSTvars);
curl_exec($MoveRequest);
curl_close($MoveRequest);
if(isset($MoveRequest)) { unset($MoveRequest); }
}