User:Plrk/Watchlist RSS feed in PHP

From Meta, a Wikimedia project coordination wiki
Jump to: navigation, search

As User:Sylvain Schmitz/Watchlist RSS feed in PHP is quite outdated, I hacked together a PHP script which uses the API to login, and then fetch the watchlist feed.

There is also a slightly more complicated version that includes diff links.

Installation[edit]

Copy this code into a .php file on your PHP-running web server, after editing your username/password/preferred wiki accordingly. Point your feed aggregator to the PHP script. That's it!

The code[edit]

<?
////////////////////////////////////////////////////////////
// CONFIGURATION ///////////////////////////////////////////
////////////////////////////////////////////////////////////
 
// Variables you should edit
$mediawiki_url = "http://en.wikipedia.org/"; // the wiki you want to fetch from. do not forget the trailing slash.
$credentials = array();
$credentials['lgname'] = ""; // your username
$credentials['lgpassword'] = ""; // your password
$allrev = TRUE; // whether or not you want to display all revisions (set to TRUE if you do, FALSE if you don't)
 
// Variables you should not edit
$login_url = "w/api.php?format=php&action=login";
 
$watchlistfeed_url = "w/api.php?action=feedwatchlist";
if($allrev){
	$watchlistfeed_url .= "&allrev=yes";
}
 
////////////////////////////////////////////////////////////
// LOGIN ///////////////////////////////////////////////////
////////////////////////////////////////////////////////////
$ch = curl_init(); // initializing curl, creating a curl resource
curl_setopt($ch, CURLOPT_URL, $mediawiki_url . $login_url); // set URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // we want the transfer to return a string
curl_setopt($ch, CURLOPT_POST, TRUE); // we are going to post something
curl_setopt($ch, CURLOPT_POSTFIELDS, $credentials); // we are going to post the array "credentials"
$output = curl_exec($ch); // $output now contains the output string
curl_close($ch); // we close curl resource to free up system resources
 
// if everything has been done right, $output now contains a serialized array with the
// information we need when we post the request for the watchlist.
 
$cookie = unserialize($output); // unserialize the output
 
////////////////////////////////////////////////////////////
// WATCHLIST ///////////////////////////////////////////////
////////////////////////////////////////////////////////////
$wl = curl_init(); // initializing curl, creating a curl resource
curl_setopt($wl, CURLOPT_URL, $mediawiki_url . $watchlistfeed_url); // set URL
curl_setopt($wl, CURLOPT_COOKIE,	$cookie['login']['cookieprefix'] . "UserName=" . $cookie['login']['lgusername'] . "; " .
	$cookie['login']['cookieprefix'] . "UserID=" . $cookie['login']['lguserid'] . "; " .
	$cookie['login']['cookieprefix'] . "Token=" . $cookie['login']['lgtoken'] . "; " .
	$cookie['login']['cookieprefix'] . "_session=" . $cookie['login']['sessionid']); // set the cookies to be used in the request
 
curl_setopt($wl, CURLOPT_RETURNTRANSFER, 1); // we want the transfer to return a string
$output = curl_exec($wl); // $output now contains the output string
curl_close($wl); // we close curl resource to free up system resources
 
echo $output;
?>