Roan Kattouw schreef:
> 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;
> }       
>
>   
As it turns out, you can throw out that function and use 
$snoopy->setCookies(); instead. Snoopy's better than I thought. Improved 
version of the script follows below.

Catrope


== PHP code starts here ==
<?php
require_once('Snoopy.class.php');

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

$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}");

// We're only really interested in the cookies
$snoopy->setcookies();

$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>";


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

Reply via email to