Jump to content

Wikipedia:Banner standardisation/Code

From Wikipedia, the free encyclopedia
<?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); }
}