Php:Watchlist parser.php

From Botwiki

Jump to: navigation, search
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<title>Watchlist parser.</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<!-- <meta name="robots" content="noindex,nofollow"> -->
 
    <style type="text/css" media="screen,projection">/*<![CDATA[*/
        @import "http://en.wikipedia.org/skins-1.5/common/shared.css?80";
        @import "http://en.wikipedia.org/skins-1.5/monobook/main.css?80";
        @import "../misza.css";
    /*]]>*/</style>
 
	</head>
		<body class="mediawiki">
 
		<div id="globalWrapper">
		<div id="column-content">
		<div id="content">
 
		<h1>Watchlist parser.</h1><br/>
			<p>This is a tool written by <a href="http://it.wikipedia.org/wiki/Utente:Filnik" title="Filnik">Filnik</a> to parse the watchlist to make it
			more readable for the users.
			<br/><br/>
			Here you have to defain in what project you want to use that script (example: "commons.wikimedia.org") and your NickName and Passoword on this
			project (as you can see in the source, the script won't same any data that you post)
			<br/><br/>
			Although I won't store any data posted, I <b>won't guarantee anything</b> because I don't want to have Problems.<br/>
			If you trust me, good. Enjoy and make me know what do you think about this tool :-)
			<br/><br/>
			If it's the first time that you use this script, try it with a minor account (like your account on a language where you have few pages in watchlist)
			<br/>so you won't make big Mistakes.
			<br/><br/>
			<b><a href="http://botwiki.sno.cc/wiki/Php:Watchlist_parser.php" title="Source">Source</a></b>
			<br />
			</p>
		<?PHP
    		$domain = $_REQUEST['domain'];
    		if ($domain == ''){$domain = 'commons.wikimedia.org';}
 
			echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\"  />
				<label for='domain'>Domain: </label><input type=\"text\" name=\"domain\" id=\"domain\" value=\"$domain\" />";
			if ($_REQUEST['nickname'] == '' or $_REQUEST['password'] == ''){
			echo "
				<label for='nickname'>Nickname: </label><input type='text' class='loginText' name=\"nickname\" id=\"nickname\" value=\"\" size='20' />
		<label for='password'>Password: </label>
		<input type='password' class='loginPassword' name=\"password\" id=\"password\" value=\"\" size='20' />";
			}else{
			?>
<input type='hidden' class='loginText' name="nickname" id="nickname" value="<?=$_REQUEST['nickname']?>" />
<input type='hidden' class='loginPassword' name="password" id="password" value="<?=$_REQUEST['password']?>" />
			<?
		?>
		<br/>	
		<br/>
		<input type="submit" value="Enter" />
		<br/>
		<ul>	
<script type="text/javascript">
function CheckAll(formName) {
  var form = document.getElementsById(formName)
  for (var i=0;i<form.elements.length;i++) {
 
    if( form.elements[i].type == 'checkbox'){
      form.elements[i].checked = true;
    }
  }
}
</script>			
 
<?PHP
 
class http {
        private $ch;
        private $uid;
 
        function data_encode($data, $keyprefix = "", $keypostfix = "") {
                assert( is_array($data) );
                $vars=null;
                foreach($data as $key=>$value) {
                        if(is_array($value)) $vars .= $this->data_encode($value, $keyprefix.$key.$keypostfix.urlencode("["), urlencode("]"));
                        else $vars .= $keyprefix.$key.$keypostfix."=".urlencode($value)."&";
                }
                return $vars;
        }
 
        function __construct(){
                $this->ch = curl_init();
                $this->uid = dechex(rand(0,99999999));
      			$this->cookie_file = 'cookie.txt';
				curl_setopt($this->ch, CURLOPT_COOKIEFILE, $this->cookie_file);
				curl_setopt($this->ch, CURLOPT_COOKIEJAR, $this->cookie_file);	
				curl_setopt($this->ch, CURLOPT_USERAGENT, "'Filnik's Watchlist.php");
				#"Mozilla/5.0 (X11; U; Linux i686; it; rv:1.8.1.3) Gecko/20060601 Firefox/2.0.0.4 (Ubuntu-edgy)");
                curl_setopt($this->ch,CURLOPT_MAXCONNECTS,100);
                curl_setopt($this->ch,CURLOPT_CLOSEPOLICY,CURLCLOSEPOLICY_LEAST_RECENTLY_USED);
        }
 
        function post($url,$data) {
                curl_setopt($this->ch,CURLOPT_URL,$url);
                curl_setopt($this->ch,CURLOPT_FOLLOWLOCATION,True);
                curl_setopt($this->ch,CURLOPT_MAXREDIRS,10);
                curl_setopt($this->ch,CURLOPT_HEADER,0);
                curl_setopt($this->ch,CURLOPT_RETURNTRANSFER,1);
                curl_setopt($this->ch,CURLOPT_TIMEOUT,30);
                curl_setopt($this->ch,CURLOPT_CONNECTTIMEOUT,10);
                curl_setopt($this->ch,CURLOPT_POST,True);
                curl_setopt($this->ch,CURLOPT_POSTFIELDS, substr($this->data_encode($data), 0, -1) );
                return curl_exec($this->ch);
        }
 
        function get($url){
                curl_setopt($this->ch,CURLOPT_URL,$url);
                curl_setopt($this->ch,CURLOPT_FOLLOWLOCATION,True);
                curl_setopt($this->ch,CURLOPT_MAXREDIRS,10);
                curl_setopt($this->ch,CURLOPT_HEADER,0);
                curl_setopt($this->ch,CURLOPT_RETURNTRANSFER,1);
                curl_setopt($this->ch,CURLOPT_TIMEOUT,30);
                curl_setopt($this->ch,CURLOPT_CONNECTTIMEOUT,10);
                curl_setopt($this->ch,CURLOPT_HTTPGET,1);
                return curl_exec($this->ch);
        }
 
        function __destruct(){
                curl_close($this->ch);
                @unlink($this->$cookie_file);
        }
}
 
function wikiUrl($page, $domain){
	return "http://$domain/wiki/$page";
}
function logged($data, $UserNickName){
    if (stristr($data, "var wgUserName = \"$UserNickName\";")){
    	return True;
    }else{
    	return False;
    }
}
 
 
if (isset($_REQUEST['domain']) and isset($_REQUEST['nickname']) and $_REQUEST['nickname'] != '' and $_REQUEST['password'] != '')
{
    $password = $_REQUEST['password'];
    $UserNickName = $_REQUEST['nickname'];
    $domain = $_REQUEST['domain'];
    $pageWatchlist = 'Special:Watchlist';
    $pageLogIn = 'Special:Userlogin';
    $data["wpName"] = $UserNickName;
    $data["wpPassword"] = $password;
    $data["wpLoginattempt"] = "Aanmelden & Inschrijven"; # dutch button label seems to work for all wikis
    $data["wpRemember"] = 1;
    $http = new http();
    $LogPage = $http->post(wikiUrl($pageLogIn, $domain),$data);
    #echo "<br/><br/><br/><br/><br/><br/><br/><br/>";
    #print_r($LogPage);
    $watchData = $http->get(wikiUrl($pageWatchlist, $domain));
	if (logged($LogPage, $UserNickName) and logged($watchData, $UserNickName)){
		$xlksdo = 1;# Do nothing ---echo "logged";
	}else{
		echo "<center><big>Problem with logging!</big></center>";
	}
 
 
#	</ul>
#	<h4>16 nov 2007</h4>
#	<ul class="special"><li>(<a href="
 
    $regex = "/(<h4>.*?<\/h4>)\n(<ul class=\"special\">.*?<\/ul>)/s";
    preg_match_all($regex, $watchData, $results);	
    #print_r($results['0']);
 
	$textBox = "<input type='checkbox' name=\"checkbox-";
	$textBox2 = "\" value=\"1\" id=\"checkbox-";
	$textBox3 = "\"/>";
   	$cronText = '';
   	$num = 0;
    foreach($results['2'] as $res){
    	$res = str_replace('<a href="/w', '<a href="http://' . $domain . '/w', $res);
 
    	$regex2 = "/(<li>.*?<\/li>)/s";
    	$results2 = array();
    	preg_match_all($regex2, $res, $results2);
 
    	$cronText = $cronText . $results['1'][$num] . '
    			';
    	$num = $num + 1;
    	foreach($results2['0'] as $minires){
    		$minires = preg_replace('/<li>\(<a href="(.*?)\/w\/index.php\?title=(.*?)&amp;/', 
							'<li> '. $textBox . html_entity_decode('\\2') .$textBox2 . html_entity_decode('\\2') . $textBox3 . ' (<a href="\1/w/index.php?title=\\2&amp;',
							$minires);
			$cronText = $cronText . $minires . '
					';
    	}
    }
    echo $cronText;
 
   foreach($_REQUEST as $nome => $valore){
   	if (stristr($nome, 'checkbox-') and $valore == '1'){
   		$page = str_replace('checkbox-', '', $nome);
   		$unwatchURL = "http://$domain/w/index.php?action=unwatch&title=$page";
   		$http->get($unwatchURL);
   		echo "
   		<br/>
   		Deleted: $page";
   	}
   }
 
}
?>
</ul>
</form>
</div><!--content-->
</div><!--column-content-->
<div id="column-one">
<div id="p-logo" class="portlet">
<a title="Hosted by the Wikimedia Toolserver" href="/" style="background-image: url(toolserv.png);"></a>
</div><!--p-logo-->
 
<div id="p-navigation" class="portlet">
<h5>Navigation</h5>
<div class="pBody">
<ul>
  <li><a href="index.php">Main</a></li>
  <li><a href="cancellazioni.php">Logs</a></li>
  <li><a href="newimages.php">New Images.php</a></li>
</ul>
</div>
</div><!--p-navigation-->
 
</div><!--column-one-->
<div class="visualClear" />
<div id="footer">
 
<a href="http://tools.wikimedia.de/"><img
    src="http://tools.wikimedia.de/wikimedia-toolserver-button.png" 
    alt="Hosted on the Toolserver" /></a>
 
<a href="http://validator.w3.org/check?uri=referer"><img
    src="http://www.w3.org/Icons/valid-xhtml10-blue"
    alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
 
</div><!--footer-->
</div><!--globalWrapper-->	
</body>
 
</html>
Personal tools