This Document is also available in English
GET & Authentification
GET
Pour parcourir les liens public postés sur Blogmarks.net, il suffit juste de rapatrier cette url :
Par défaut, les 30 derniers liens publiques postés sur Blogmarks.net sont envoyés.
Ce qui correspond aux paramètres suivant :
- last : 30
- order_type : DESC
- order_by : created
Ainsi qu'à l'URL suivante :
http://api.blogmarks.net/marks?last=30&order_type=DESC&order_by=created
On peut donc récupérer les 10 liens les plus populaires, en rapatriant cette URL :
Ecrivons notre première requête HTTP et récupérons le dernier lien ajouté :
GET /marks?last=1 HTTP/1.0 Host: api.blogmarks.net Accept: application/atom+xml
Réponse du serveur :
HTTP/1.1 200 OK Date: Mon, 07 Mar 2005 19:32:10 GMT Server: Apache/1.3.26 (Unix) Debian GNU/Linux PHP/4.3.9-1.dotdeb.3 X-Powered-By: PHP/4.3.9-1.dotdeb.3 Content-length: 1293 Connection: close Content-Type: text/xml; charset=utf-8 <?xml version="1.0" encoding="UTF-8"?> <feed version="draft-ietf-atompub-format-05:do not deploy" xmlns="http://purl.org/atom/ns#draft-ietf-atompub-format-05" xmlns:bm="http://api.blogmarks.net/ns#"> <head> <title>Last public marks</title> <link rel="alternate" type="application/xhtml+xml" href="?last=1"/> <link rel="next" type="application/atom+xml" href="http://api.blogmarks.net/marks?last=1&offset=1&order_type=DESC&order_by=created"/> <updated>2005-03-07T20:23:04Z</updated> </head> <entry> <id>tag:blogmarks.net,2005:marks,31171</id> <title type="TEXT">Kevin Kelly -- Cool Tools:Wall Full of Whiteboard</title> <link rel="related" href="http://www.kk.org/cooltools/archives/000679.php" type="text/html"/> <link rel="alternate" href="http://blogmarks.net/user/delicious.popular/archives/2005/03/#mark31171" type="application/xhtml+xml" title="Kevin Kelly -- Cool Tools:Wall Full of Whiteboard"/> <link rel="image" href="http://www.blogmarks.net/screenshots/2005/03/07/2d3eb782512a6aff2540f74a0a32bd3d.png" type="image/png"/> <updated>2005-03-07T20:23:04Z</updated> <published>2005-03-07T20:23:04Z</published> <author><name>delicious.popular</name></author> <edit>http://api.blogmarks.net/atom/marks/31171</edit> <bm:created>2005-03-07T20:23:04Z</bm:created> </entry> </feed>
Si vous voulez écrire tout ceci dans un script, nous recommandons d'utiliser une librairie HTTP comme par exemple Pear HTTP:Request (dans le cas ou vous utilisez php bien sûr ;)
<?php
require_once "HTTP/Request.php";
$req =& new HTTP_Request("http://api.blogmarks.net/marks?last=1");
$req->addHeader("Accept", 'application/atom+xml');
$response = $req->sendRequest();
if (PEAR::isError($response)) {
echo $response->getMessage();
} else {
$code = $req->getResponseCode();
switch ( $code ) {
case 200:
$xml = $req->getResponseBody();
// Handle the resulting Atom response here
echo $xml;
break;
default:
echo $code . " Error\n";
break;
}
}
?>
Pour votre curiosité, dans vanilla PHP, vous pouvez écrire ce code (pas de gestion d'erreur)
<?php
$request = 'GET /marks?last=1 HTTP/1.0' . "\n";
$request .= 'Host: api.blogmarks.net' . "\n";
$request .= 'Accept: application/atom+xml' . "\n";
$request .= "\n";
$fp = fsockopen('api.blogmarks.net', 80, $errno, $errstr, 30);
fputs($fp,$request);
$response = '';
while ( !feof ( $fp ) ) {
$line = fgets ($fp, 128);
$response .= $line;
}
fclose($fp);
echo $response;
?>
Authentification
Maintenant, imaginons que vous vouliez récupérer vos liens et tags privés. Ceci nécessite une authentification. Comme expliqué par le Atom authentication tutorial de Mark Pilgrim, nous utilisons l'authentification WSSE Username Token.
Commençons avec ces 4 variables :
- $Username : znarf
- $Password : foo
- $Nonce (a cryptographically random string ) : 15253654
- $CreationTimestamp (the current time in W3CDTF format) : 2004-03-08T17:11:42Z
Dans notre implémentation, nous utilisons le hash md5 sur le password. Si vous avez le password original, hashé le, sinon utilisé celui déjà hashé.
Donc, éventuellement :
- $PasswordHash = md5( $Password );
Créons le "digest" password :
- $PasswordDigest = Base64 ( SHA1 ( $Nonce + $CreationTimestamp + $PasswordHash ) )
Il suffit donc d'ajouter deux lignes à l'en-tête HTTP et nous voilà authentifier. A noter le paramètre private est mis à TRUE pour pouvoir rapatrier les liens et tags privés.
GET /marks?last=30&private=true HTTP/1.0 Host: api.blogmarks.net Accept: application/atom+xml Authorization: WSSE profile="UsernameToken" X-WSSE: UsernameToken Username="$Username", PasswordDigest="$PasswordDigest", Nonce="$Nonce", Created="$CreationTimestamp"
Le code PHP correspond est le suivant:
<?php
$Username = 'znarf';
$Password = 'foo';
$Nonce = rand( 1 , 100000000000000 );
$CreationTimestamp = date('Y-m-d\Th:i:s\Z');
$PasswordHash = md5( $Password );
$PasswordDigest = base64_encode( sha1( $Nonce . $CreationTimestamp . $PasswordHash ) );
require_once "HTTP/Request.php";
$req =& new HTTP_Request("http://api.blogmarks.net/marks?last=1&private=true");
$req->addHeader("Accept", 'application/atom+xml');
$req->addHeader('Authorization', 'WSSE profile="UsernameToken"');
$req->addHeader('X-WSSE', 'UsernameToken Username="' . $Username . '",
PasswordDigest="' . $PasswordDigest . '", Nonce="' . $Nonce . '", Created="' . $CreationTimestamp . '"');
$response = $req->sendRequest();
if (PEAR::isError($response)) {
echo $response->getMessage();
} else {
$code = $req->getResponseCode();
switch ( $code ) {
case 200:
$xml = $req->getResponseBody();
// Handle the resulting Atom response here
echo $xml;
break;
default:
echo $code . " Error\n";
break;
}
}
?>
Nous avons pris partis de traiter la gestion d'erreur avec le module PEAR mais le mieux est d'utiliser les composants prévus par le framework de votre choix.
voir aussi : Fr/AtomApiTutorial/Post, Fr/AtomApiTutorial/Put, AtomApiTutorial/Delete
