User:Plrk/Watchlist RSS feed in PHP
From Meta, a Wikimedia project coordination wiki
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.
[edit] Installation
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!
[edit] The code
<? //////////////////////////////////////////////////////////// // 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; ?>