
Aujourd’hui, un billet traitant de la plate-forme de blogs TypePad et de son API permettant de récupérer du contenu associé à un utilisateur.
TypePad
TypePad est un service de blogs conçu par la société Six Apart et lancé en octobre 2003.
N’allant pas jusqu’à étaler ici la définition présente sur Wikipedia (lien), j’ajouterai cependant qu’il s’agit d’un service payant et donc peut-être plus orienté professionnel.
L’API
L’API TypePad permet de récupérer des contenus en relation avec l’utilisateur authentifié.
Comme bon nombre d’API de réseau social aujourd’hui, elle se base sur la méthode authentification OAuth avec un système de clé d’accès (token).
TypePad mets à disposition des développeurs une librairie (ou SDK) PHP permettant de faciliter le travail d’intégration de l’API sur un projet.
Bien que fonctionnelle, elle semble dater quelque peu et il y a toutes les raisons de croire qu’elle a d’abord été conçue en PHP 4 puis a subi un portage vers le PHP 5.
Je suis cependant plus réservé quant au portage vers la version 5 de PHP.
Quoi qu’il en soit, la librairie que TypePad propose nécessite de disposer d’une base de donnée MySQL, dont les noms de table et de champs sont déjà définis.
Ma première stupéfaction a été de voir qu’ils n’étaient même pas préfixés !
Ainsi, on trouve la table user pour stocker les utilisateurs s’étant connecté à l’API. Il est vrai que le nom user pour un site web (avec base de donnée bien entendu) n’est que rarement utilisé !
Alors si vous aussi vous avez le malheur d’utiliser des noms logiques pour le nom de vos tables comment faites-vous ?
Trêve de plaisanterie.
Une première solution consisterai à utiliser deux bases de donnée, une pour votre site et l’autre dédié à l’API TypePad.
Avouez tout de même que c’est tiré par les cheveux ! Si l’on devait raisonner ainsi avec toutes les API, nous ne serions pas rendu !
D’autant que bon nombre d’hébergeur standard du web ne propose pas plusieurs bases de donnée !
Autre solution envisagée, aller modifier une par une les lignes du code source du SDK pour remplacer les noms de ces tables, pour correspondre à celles que vous avez choisies, et ajouter des majuscules par la même occasion (parce que c’est plus « POO style »
).
Ces deux solution ne me convenait tout simplement pas !
D’une part parce qu’elle demandait toujours une base de donnée, bien que j’en utilise une. Et d’autre part parce que j’estime que l’on a pas besoin de stocker autant d’informations à propos d’une API (le SDK de TypePad stocke des informations sur l’API, ainsi que les différentes clés échangées avec le serveur).
La contrainte d’une base de donnée est bien trop lourde pour une simple authentification via un réseau.
Il ne restait donc plus qu’une solution : mettre à jour le SDK !
Nouvelle version
J’ai donc entrepris de mettre à jour la librairie PHP pour l’API TypePad en me basant sur ce qui se fait pour d’autres API (LinkedIn, Facebook, etc.).
Sans aller jusqu’à tout revoir sur le SDK (après tout, il fonctionnait correctement), il m’aura fallu 1 journée complète pour le mettre à jour.
Au final, je pense avoir réussi mon pari, non sans pouvoir assurer qu’aucun bug ne persiste.
L’utilisation de la librairie quant à elle ne diffère pas beaucoup du fonctionnement initial ; avec l’utilisation de la base de donnée en moins tout de même et une utilisation un peu plus claire.
Je ne vous parle pas également de l’utilisation de cookie pour stocker les informations sur l’utilisateur dans la précédente version !
Non seulement cela manquait de sécurité, mais en plus cela posait problèmes lors de reconnexion (les modifications apportées à un cookie ne sont en effet prise en compte que lors de la prochaine requête).
Les informations sont dorénavant stockées en session et effacées lorsqu’elles ne sont plus utiles.
Utilisation
Nous allons ici travailler en étape. Voyez cela comme un petit tutoriel pour utiliser la librairie.
1 – Commencez par demander une clé API sur TypePad (lien). Pour cela, vous aurez besoin d’un compte TypePad bien entendu.
Bien que l’accès soit payant, une période d’essai de 15 jours est proposée ; à condition de fournir votre numéro de carte bleue tout de même…
Note : Pensez aux e-cartes bleue, sécurisé et pouvant être détruite ! Vous n’êtes en effet débité qu’au bout des 15 jours d’essais.
Lors de la demande de clé, sachez que le champs « URL du site » n’a pas grande importance pour l’utilisation de l’API.
2 – Une fois votre demande effectuée, vous obtenez 2 séries de valeurs (la clé et la clé secrète) dites consommateur et anonyme.
Vous aurez besoin de toutes ces valeurs.
Renseignez les quelques part sur votre application web et veuillez à ce qu’elles ne soient pas accessible du public.
3 – Intégrer la librairie mise à jour (lien).
4 – Créez une instance de la classe TypePad en fournissant les deux jeux de clés et clés secrètes.
L’obtention de l’autorisation d’accès au compte de l’utilisateur s’effectue en deux étapes.
Bien que cela diffère des méthodes des réseaux actuels, je n’ai pas pu réduire cela à une seule étape (et donc une seule redirection).
Rapide explication : Tout d’abord, nous demandons à l’utilisateur de se connecter sur TypePad depuis le domaine typepad.com.
Une fois connecté, ou s’il l’était déjà, TypePad renvoi l’utilisateur vers une url sur votre site, afin que vous puissiez demander cette fois-ci l’autorisation d’accès à son compte (cette url était anciennement appelée « url de synchronisation »).
L’utilisateur se voit donc rediriger à nouveau vers typepad.com pour cette fois-ci accepter que votre API TypePad accède aux données de son compte.
Enfin, l’utilisateur est redirigé une dernière fois vers votre site où vous pourrez enfin récupérer les clés d’accès finales.
Ci-dessous un schéma représentant le cheminement de l’utilisateur décrit ci-dessus.
-
$url = "http://" . $_SERVER[‘HTTP_HOST’] . $_SERVER[‘PHP_SELF’];
-
$consumer_key = ‘…’;
-
$consumer_secret = ‘…’;
-
$purpose_key = ‘…’;
-
$purpose_secret = ‘…’;
-
-
$typepad = new TypePad($consumer_key, $consumer_secret, $purpose_key, $purpose_secret);
5 – Appelez la méthode login de votre instance de classe TypePad en fournissant l’url d’autorisation ainsi que l’url de retour.
-
$typepad->login(
-
$url . ‘?tpauthorize=1′,
-
$url . ‘?tpfinal=1′
-
);
6 – Une fois authentifié, sur la page correspondant à l’url d’autorisation, appelez la méthode authorize en fournissant les variables session_sync_token et callback_next présente dans l’url.
-
$typepad->authorize(
-
$_GET[’session_sync_token’],
-
$_GET[‘callback_next’]
-
);
7 – Echangez vos clés temporaires contres les finales grâce à la méthode getAccessToken.
-
$tokens = $typepad->getAccessToken($_GET[‘oauth_token’], $_GET[‘oauth_verifier’]);
8 – L’utilisateur étant authentifié, vous pouvez désormais accéder aux informations le concernant par le biais des indications présentent sur cette page : Lien
Ci-dessous un exemple concret de mise en place de l’API.
-
<?php
-
require_once("library/TypePad.php");
-
-
$url = "http://" . $_SERVER[‘HTTP_HOST’] . $_SERVER[‘PHP_SELF’];
-
$consumer_key = ‘…’;
-
$consumer_secret = ‘…’;
-
$purpose_key = ‘…’;
-
$purpose_secret = ‘…’;
-
-
$typepad = new TypePad($consumer_key, $consumer_secret, $purpose_key, $purpose_secret);
-
$typepad->setTokens($_SESSION[‘tptokens’][‘token’], $_SESSION[‘tptokens’][‘token_secret’]);
-
-
//Request process
-
//Check authentification
-
-
$typepad->logout();
-
$typepad->login(
-
$url . ‘?tpauthorize=1′,
-
$url . ‘?tpfinal=1′
-
);
-
-
//Check authorize access
-
-
$typepad->authorize(
-
$_GET[’session_sync_token’],
-
$_GET[‘callback_next’]
-
);
-
-
//Get finals tokens
-
-
$tokens = $typepad->getAccessToken($_GET[‘oauth_token’], $_GET[‘oauth_verifier’]);
-
-
$_SESSION[‘tptokens’] = $tokens;
-
-
-
//Logout
-
-
$typepad->logout();
-
}
-
-
?>
-
-
<!DOCTYPE html>
-
<html>
-
<head>
-
<title></title>
-
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-
</head>
-
<body>
-
<?php
-
if ($typepad->isLoggedIn()) {
-
$me = $typepad->users->get(‘@self’);
-
-
-
Bonjour ‘ . $me->displayName . "
-
-
Voiçi les différents blogs de votre compte :
-
";
-
$blogs = $typepad->users->getBlogs($me->urlId);
-
foreach ($blogs->entries as $blog)
-
‘;
-
-
} else { ?>
-
<a href="<?php echo $url . ‘?tp=1′; ?>">Connexion</a>
-
<?php } ?>
-
</body>
-
</html>
-
Si vous avez des questions concernant la mise en place de l’API TypePad sur votre site, je peux y répondre.
Cependant, sachez que cette librairie n’est pas exempte de bugs. Si vous en rencontrez un, n’hésitez donc pas à me le communiquer.
Il y aura peut-être également certains points à revoir, permettant une utilisation plus souple de l’API.
Ci-après vous trouvez l’archive comportant la librairie mise à jour ainsi que l’exemple d’utilisation présenté ci-dessus.
Comme pour la plupart des éléments que je mets à disposition sur ce blog, vous avez le droit d’utiliser, de redistribuer et de modifier ce code à la seule condition de laisser le nom des auteurs ; à savoir la société Six Apart avant tout, puis mon nom tel qu’il est écrit dans certains fichiers.
Lien de téléchargement
À la prochaine !
