I've drawn up a simple script that logs in and fetches information using 
the Snoopy class. Snoopy is available at http://snoopy.sourceforge.net/ 
Simply download the tarball and extract the Snoopy.class.php file in the 
same directory as your script. Most important is the getCookieHeaders() 
function, which sets up the cookies correctly.

Hope this helps,

Catrope

== PHP code starts here ==

<?php
require_once('Snoopy.class.php');

$wikiPath = "http://en.wikipedia.org/w";;
$apiPath = "$wikiPath/api.php";

function getCookieHeaders($headers)
{
        // This function parses Snoopy's header array and returns a nice 
array of cookies
        $cookies = array();
        foreach($headers as $header)
                if(preg_match("/Set-Cookie: ([^=]*)=([^;]*)/", $header, 
$matches))
                        $cookies[$matches[1]] = $matches[2];
        return $cookies;
}       

$snoopy = new Snoopy;

// Example 1: Build a table of namespaces
$request_vars = array(
        'action' => 'query',
        'meta' => 'siteinfo',
        'siprop' => 'namespaces',
        'sishowalldb' => '',
        'format' => 'php' // NEVER, EVER, forget this one
);

if(!$snoopy->submit($apiPath, $request_vars))
        die("Snoopy error: {$snoopy->error}");

$array = unserialize($snoopy->results);
$namespaceArr = $array['query']['namespaces'];
echo "<table border>\n<tr><th>ID</th><th>Name</th></tr>\n";
foreach($namespaceArr as $ns)
        echo "<tr><td>{$ns['id']}</td><td>{$ns['*']}</td></tr>\n";
echo "</table>\n";


// Example 2: Get userinfo before and after login
$request_vars = array('action' => 'query', 'meta' => 'userinfo', 
'format' => 'php');
if(!$snoopy->submit($apiPath, $request_vars))
        die("Snoopy error: {$snoopy->error}");
$array = unserialize($snoopy->results);
$userinfo = $array['userinfo'];
if(isset($userinfo['anon']))
        echo "Anonymous user {$userinfo['name']}<br>";
else
        echo "Registered user {$userinfo['name']}<br>";

echo "Logging in...<br>";

$request_vars = array('action' => 'login', 'lgname' => 'yourusername', 
'lgpassword' => 'yourpassword', 'format' => 'php');
if(!$snoopy->submit($apiPath, $request_vars))
        die("Snoopy error: {$snoopy->error}");

// Fetch the cookies from the login request and tell Snoopy to use them 
from now on
// This only has to be done once
$snoopy->cookies = getCookieHeaders($snoopy->headers);

$request_vars = array('action' => 'query', 'meta' => 'userinfo', 
'format' => 'php');
if(!$snoopy->submit($apiPath, $request_vars))
        die("Snoopy error: {$snoopy->error}");
$array = unserialize($snoopy->results);
$userinfo = $array['userinfo'];
if(isset($userinfo['anon']))
        echo "Anonymous user {$userinfo['name']}<br>";
else
        echo "Registered user {$userinfo['name']}<br>";


== PHP code ends here ==

_______________________________________________
Mediawiki-api mailing list
[email protected]
http://lists.wikimedia.org/mailman/listinfo/mediawiki-api

Reply via email to