Guide du développeur: PHP

L'API Blogger Data permet aux applications clientes d'afficher et de mettre à jour le contenu Blogger sous la forme de flux de l'API Google Data.

Votre application cliente peut utiliser l'API Blogger Data pour créer des articles de blog, modifier ou supprimer des articles de blog existants, et rechercher des articles de blog qui répondent à des critères particuliers.

En plus de fournir des informations générales sur les fonctionnalités de l'API Blogger Data, ce document fournit des exemples d'interactions de base de l'API Data à l'aide de la bibliothèque cliente des API Google Data Zend. Si vous souhaitez en savoir plus sur le protocole sous-jacent de la bibliothèque, consultez la section Protocole de ce guide du développeur.

Sommaire

Audience

Ce document est destiné aux programmeurs qui souhaitent écrire des applications clientes PHP pouvant interagir avec Blogger.

Ce document part du principe que vous comprenez les concepts généraux sous-jacents au protocole des API Google Data.

Pour plus d'informations sur les classes et les méthodes fournies par la bibliothèque cliente, consultez la documentation de référence de l'API de la bibliothèque cliente PHP. Pour obtenir des informations générales de référence sur l'API Blogger Data, consultez le guide de référence du protocole.

Premiers pas

Si vous avez besoin d'aide pour configurer la bibliothèque cliente, consultez le guide de démarrage.

La bibliothèque cliente Zend nécessite PHP 5.1.4 ou version ultérieure. Il est disponible dans le cadre du framework Zend et en téléchargement distinct. Pour interagir avec Blogger, utilisez la version 1.0.0 ou une version ultérieure de la bibliothèque cliente.

Création d'un compte Blogger

Vous pouvez créer un compte Blogger à des fins de test. Blogger utilise un compte Google. Si vous en avez déjà un, vous n'avez rien à faire.

Exécuter l'exemple de code

Un exemple de client fonctionnel complet, contenant tous les exemples de code présentés dans ce document, est disponible dans le dépôt SVN du framework Zend. Vous trouverez l'exemple de code dans /framework/standard/trunk/demos/Zend/Gdata/Blogger.php. L'exemple contient toutes les fonctions expliquées dans ce document. Elle ne peut être exécutée qu'à partir de la ligne de commande:

php Blogger.php -- --user=[email_address] --pass=[password]

Avant d'exécuter cet exemple ou de développer votre propre code à l'aide du framework Zend, vous devrez peut-être définir include_path et charger les classes appropriées. Le chemin d'inclusion peut être défini à l'aide d'un paramètre php.ini ou de la méthode set_include_path. Ce code demande l'accès à la classe principale Zend_Gdata, à la classe Zend_Gdata_Query et à la classe d'authentification Zend_Gdata_ClientLogin.

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');

Utiliser des getters et des setters magiques

Tout au long de la bibliothèque cliente PHP, la prise en charge des setters/getters magiques a été ajoutée pour plus de commodité pour les développeurs. Celles-ci permettent d'accéder en toute sécurité aux propriétés d'une classe à l'aide de méthodes setter/getter traditionnelles ou en accédant aux propriétés. Par exemple, si $gdataObject est une instance d'un objet de cette bibliothèque, les deux lignes de code suivantes ont des effets identiques:

$gdataObject->setFoo("bar");
$gdataObject->foo = "bar";

De même, ces deux lignes de code ont des effets identiques:

$baz = $gdataObject->getFoo();
$baz = $gdataObject->foo;

De même, les méthodes de fabrique magiques facilitent la déclaration de nouveaux objets. Au lieu de mémoriser les longs noms de classe imposés par la convention de dénomination Zend, vous pouvez créer un object en appelant newObject(); sur un client de service Zend. Par exemple, les deux extraits de code suivants déclarent tous deux un nouvel objet d'extension draft. Pour en savoir plus sur drafts, consultez la section Créer un post.

// Traditional instantiation
$gdClient = new Zend_Gdata();
$draft = new Zend_Gdata_App_Extension_Draft();

// Magic factory instantiation
$gdClient = new Zend_Gdata();
$draft = $gdClient->newDraft();

Les setters/getters magiques et les fabriques sont facultatifs. Utilisez donc l'approche qui vous convient le mieux.

Autres ressources

Autres ressources pour le composant Google Data APIs du Zend Framework (Zend_Gdata):

S'authentifier sur le service Blogger

Vous pouvez accéder aux flux publics et privés à l'aide de l'API Blogger Data. Les flux publics ne nécessitent aucune authentification, mais sont en lecture seule. Si vous souhaitez modifier des blogs, votre client doit s'authentifier avant de demander des flux privés. Il peut s'authentifier à l'aide de l'une des trois approches suivantes: authentification OAuth, authentification par proxy AuthSub ou authentification par nom d'utilisateur/mot de passe ClientLogin.

Pour en savoir plus sur l'authentification avec les API Google Data en général, consultez la documentation sur l'authentification.

La plupart des exemples des sections suivantes de ce document supposent que vous disposez d'un objet client authentifié appelé $gdClient.

Authentification OAuth

Pour obtenir de la documentation sur l'authentification OAuth à l'aide de la bibliothèque PHP GData Zend, consultez la page OAuth dans les bibliothèques clientes du protocole Google Data.

Authentification du proxy AuthSub

L'authentification par proxy AuthSub est utilisée par les applications Web qui doivent authentifier leurs utilisateurs auprès des comptes Google. L'opérateur du site Web et le code client n'ont pas accès au nom d'utilisateur et au mot de passe de l'utilisateur Blogger. Le client obtient à la place des jetons AuthSub spéciaux qui lui permettent d'agir au nom d'un utilisateur particulier. Pour en savoir plus, consultez la documentation sur AuthSub.

Lorsqu'un utilisateur accède à votre application pour la première fois, il n'a pas encore été authentifié. Dans ce cas, vous devez afficher certaines informations et un lien redirigeant l'utilisateur vers une page Google afin d'authentifier votre demande d'accès à ses blogs. La bibliothèque cliente Zend fournit une fonction permettant de générer l'URL de la page Google. Le code ci-dessous récupère l'URL de la page de requête AuthSub:

function getAuthSubUrl()
{
  $next = getCurrentUrl();
  $scope = 'http://www.google.com/blogger/feeds/';
  $secure = false;
  $session = true;
  return Zend_Gdata_AuthSub::getAuthSubTokenUri($next, $scope, $secure, $session);
}

$authSubUrl = getAuthSubUrl();
echo '<a href=\"$authSubUrl\">login to your Google account</a>';

La méthode getAuthSubTokenUri utilise les paramètres suivants (correspondant aux paramètres de requête utilisés par le gestionnaire AuthSubRequest):

suivant
URL de la page vers laquelle Google doit rediriger l'utilisateur après l'authentification.
champ d'application
Indique que l'application demande un jeton pour accéder aux flux Blogger. La chaîne de champ d'application à utiliser est http://www.blogger.com/feeds/ (elle doit être encodée au format URL).
sécurisé
Indique si le client demande un jeton sécurisé.
session
Indique si le jeton renvoyé peut être échangé contre un jeton à usages multiples (session).

L'exemple ci-dessus montre un appel qui ne demande pas de jeton sécurisé (la valeur de secure est false). L'URL de requête résultante peut se présenter comme suit:

https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fwelcome.php

L'utilisateur suit le lien vers le site de Google et s'authentifie sur son compte Google.

Une fois l'utilisateur authentifié, le système AuthSub le redirige vers l'URL que vous avez spécifiée dans le paramètre de requête next de l'URL AuthSubRequest. Le système AuthSub ajoute un jeton d'authentification à cette URL en tant que valeur du paramètre de requête token. Exemple :

http://www.example.com/welcome.php?token=yourAuthToken

Vous pouvez récupérer la valeur du jeton à l'aide de $_GET['token'].

Cette valeur de jeton représente un jeton AuthSub à usage unique. Dans cet exemple, puisque $session = true a été spécifié, ce jeton peut être échangé contre un jeton de session AuthSub à l'aide de la méthode Zend_Gdata_AuthSub::getAuthSubSessionToken, qui appelle le service AuthSubSessionToken:

if(! isset($_SESSION['sessionToken']) && isset($_GET['token'])) {
  $_SESSION['sessionToken'] =
      Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
}

L'extrait de code vérifie d'abord si un jeton de session AuthSub est déjà présent. Si ce n'est pas le cas, mais qu'un jeton à usage unique est spécifié dans l'URL, l'extrait de code le transmet à la méthode getAuthSubSessionToken, et l'interface AuthSub renvoie un jeton de session. Le code place ensuite la valeur du jeton de session dans la variable de session $_SESSION['sessionToken'].

Votre application peut ensuite utiliser la valeur du jeton de session dans des interactions ultérieures avec Blogger. Vous pouvez utiliser la méthode Zend_Gdata_AuthSub::getHttpClient pour obtenir un objet Zend_Http_Client dont l'en-tête Authorization est prédéfini pour inclure les identifiants AuthSub:

$client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['sessionToken']);

Authentification par nom d'utilisateur/mot de passe ClientLogin

Utilisez l'authentification ClientLogin si votre client est un client autonome et "installé" mono-utilisateur (comme une application de bureau).

Le code suivant utilise la méthode Zend_Gdata_ClientLogin::getHttpClient pour envoyer une requête au service ClientLogin, récupérer un jeton d'authentification et créer un objet Zend_Http_Client avec l'en-tête d'authentification approprié. La valeur HttpClient renvoyée par cette méthode est ensuite utilisée pour créer un objet de service Zend_Gdata.

Notez que $accountType est explicitement défini sur GOOGLE. Si ce paramètre n'est pas défini, les utilisateurs de G Suite ne pourront pas se servir de l'API Blogger.

$user = 'user@example.com';
$pass = 'secretPasswd';
$service = 'blogger';

$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service, null,
        Zend_Gdata_ClientLogin::DEFAULT_SOURCE, null, null,
        Zend_Gdata_ClientLogin::CLIENTLOGIN_URI, 'GOOGLE');
$gdClient = new Zend_Gdata($client);

Pour en savoir plus sur l'authentification ClientLogin, y compris des exemples de requêtes et de réponses, consultez la documentation Authentification pour les applications installées.

Remarque: Utilisez le même jeton pour toutes les requêtes d'une session donnée. N'obtenez pas de nouveau jeton pour chaque requête Blogger.

Remarque: Comme décrit dans la documentation ClientLogin, la requête d'authentification peut échouer et demander un test CAPTCHA. Si vous souhaitez que Google émet et gère le test CAPTCHA, redirigez l'utilisateur vers https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (plutôt que vers l'URL de gestion du CAPTCHA indiquée dans la documentation ClientLogin).

Récupérer une liste de blogs

L'API Blogger Data fournit un flux qui répertorie les blogs d'un utilisateur particulier. Ce flux est appelé "metafeed".

L'exemple de code suivant utilise un objet $gdClient authentifié pour récupérer le métaflux, puis imprime le titre de chaque blog.

La classe Zend_Gdata_Query se charge de créer l'URL de la requête. Dans ce cas, aucune action supplémentaire n'est requise, mais l'utilité de la classe Query sera mise en évidence dans la section Récupérer des posts par paramètres de requête de ce document.

function printAllBlogs()
{
  $query = new Zend_Gdata_Query('http://www.blogger.com/feeds/default/blogs');
  $feed = $gdClient->getFeed($query);
  printFeed($feed);
}

function printFeed($feed)
{
  $i = 0;
  foreach($feed->entries as $entry) {
    print $i ." ". $entry->title->text . "\n";
    $i++;
  }
}

Notez l'URL utilisée par la méthode getFeed. Il s'agit de l'URL de métaflux par défaut, qui renvoie la liste des blogs de l'utilisateur actuellement authentifié. Pour accéder au flux d'un autre utilisateur, vous pouvez indiquer l'ID de cet utilisateur à la place de default dans l'URL de métaflux. L'ID utilisateur est la chaîne de chiffres indiquée à la fin de l'URL du profil utilisateur.

L'extrait de code ci-dessous montre comment extraire un ID de blog du flux. Vous en aurez besoin pour effectuer des opérations de création, de mise à jour et de suppression d'articles et de commentaires. La variable $index représente le blog utilisé dans le flux de blog de l'utilisateur. Le champ id prend la forme tag:blogger.com,1999:user-userID.blog-blogID. Par conséquent, un split placé sur le caractère "-" place l'ID de blog dans le dernier élément du tableau obtenu.

$idText = split('-', $feed->entries[$index]->id->text);
$blogID = $idText[2];

Créer des posts

L'API Blogger Data vous permet de créer et de publier des articles de blog, ainsi que de créer des brouillons d'entrées.

Remarque: Il n'est actuellement pas possible de définir un auteur personnalisé pour les posts. Tous les nouveaux posts apparaîtront comme s'ils avaient été créés par l'utilisateur actuellement authentifié.

Publication d'un article de blog

Vous pouvez utiliser la bibliothèque cliente PHP pour publier de nouveaux articles de blog.

Commencez par créer une instance d'entrée pour représenter l'article de blog. Vous pouvez ensuite définir le titre, le contenu et d'autres attributs de l'article de blog. Enfin, appelez la méthode insertEntry pour insérer la publication. Vous pouvez voir ici les instanciations de la fabrique magique avec les nouveaux objets Zend_Gdata_Entry, Zend_Gdata_App_Extension_Title et Zend_Gdata_App_Extension_Content.

function createPublishedPost($title='Hello, world!', $content='I am blogging on the internet.')
{
  $uri = 'http://www.blogger.com/feeds/' . $blogID . '/posts/default';
  $entry = $gdClient->newEntry();
  $entry->title = $gdClient->newTitle($title);
  $entry->content = $gdClient->newContent($content);
  $entry->content->setType('text');

  $createdPost = $gdClient->insertEntry($entry, $uri);
  $idText = split('-', $createdPost->id->text);
  $newPostID = $idText[2];

  return $newPostID;
}

Créer un brouillon d'article de blog

Les brouillons sont créés de la même manière que les posts publics, à la différence que vous devez définir l'attribut brouillon de l'objet d'entrée. Vous pouvez créer un brouillon d'article de blog comme celui ci-dessus en ajoutant les lignes surlignées:

function createDraftPost($title='Salutations, world!', $content='Hmm ... not quite right, must rework the title later.')
{
  $uri = 'http://www.blogger.com/feeds/' . $blogID . '/posts/default';
  $entry = $gdClient->newEntry();

  $entry->title = $gdClient->newTitle(trim($title));
  $entry->content = $gdClient->newContent($content);
  $entry->content->setType('text');

  $control = $gdClient->newControl();
  $draft = $gdClient->newDraft('yes');
  $control->setDraft($draft);
  $entry->control = $control;

  $createdPost = $gdClient->insertEntry($entry, $uri);
  $idText = split('-', $createdPost->id->text);
  return $idText[2];
}

De la même manière que pour définir le titre ou le contenu d'un article, vous créez des objets Zend_Gdata_App_Extension_Control et Zend_Gdata_App_Extension_Draft, puis vous les attribuez à l'attribut de commande de l'entrée.

Pour transformer un brouillon d'article de blog existant en article publié, récupérez le brouillon, définissez l'attribut brouillon sur no, puis mettez à jour l'article. Nous aborderons la récupération et la mise à jour des posts dans les deux sections suivantes.

Récupérer des posts

Les sections suivantes décrivent comment récupérer une liste d'articles de blog, avec et sans paramètres de requête.

Vous pouvez interroger un flux public Blogger sans vous authentifier. Par conséquent, vous n'avez pas besoin de définir des identifiants ni de vous authentifier AuthSub avant de récupérer les articles d'un blog public.

Récupération de tous les articles de blog

Pour récupérer les articles de l'utilisateur, appelez la même méthode getFeed que celle utilisée pour récupérer le métaflux des blogs, mais envoyez cette fois l'URL du flux d'articles de blog:

function printAllPosts($gdClient, $blogID)
{
  $query = new Zend_Gdata_Query('http://www.blogger.com/feeds/' . $blogID . '/posts/default');
  $feed = $gdClient->getFeed($query);
  printFeed($feed);
}

Récupérer des posts à l'aide de paramètres de requête

L'API Blogger Data vous permet de demander un ensemble d'entrées correspondant à des critères spécifiés, par exemple des articles de blog publiés ou mis à jour au cours d'une période donnée. Pour ce faire, vous devez créer un objet de requête et le transmettre à la méthode getFeed.

Par exemple, pour envoyer une requête de plage de dates, définissez les paramètres published-min et published-max de l'objet de requête. L'extrait de code suivant imprime le titre et le contenu de chaque article de blog publié entre les heures de début et de fin indiquées:

function printPostsInDateRange($gdClient, $blogID, $startDate='2007-04-01', $endDate='2007-04-25')
{
  $query = new Zend_Gdata_Query('http://www.blogger.com/feeds/' . $blogID . '/posts/default');
  $query->setParam('published-min', $startDate);
  $query->setParam('published-max', $endDate);

  $feed = $gdClient->getFeed($query);
  printFeed($feed);
}

getQueryUrl() est une méthode de débogage utile pour la classe Zend_Gdata_Query, qui permet d'afficher l'URL encodée qui a été construite.

Remarque: Il n'existe actuellement aucun setter magique pour les paramètres de requête published-min et published-max. Toutefois, vous pouvez utiliser setStartIndex et setMaxResults.

L'API Blogger Data prend en charge les paramètres de requête suivants:

catégories
Spécifie des catégories (également appelées "libellés") pour filtrer les résultats du flux. Par exemple, http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie renvoie des entrées avec les étiquettes Fritz et Laurie.
max-results
Nombre maximal d'entrées à renvoyer.
publiée-min, publiée-max
Les limites des dates de publication des entrées.
start-index
Index en base 1 du premier résultat à récupérer (pour la pagination).

Pour en savoir plus sur les paramètres de requête, consultez le guide de référence de l'API Blogger Data et le guide de référence des API Google Data.

Mise à jour des posts...

Pour mettre à jour un article de blog existant, vous devez d'abord récupérer l'entrée que vous souhaitez mettre à jour, puis la modifier, puis l'envoyer à Blogger à l'aide de la méthode save. L'extrait de code suivant modifie le titre et le contenu d'un article de blog, en supposant que vous l'avez déjà récupérée sur le serveur.

public function updatePost($postID, $updatedTitle='Hello, World?',
                           $updatedContent='UPDATE: Still blogging',
                           $isDraft=False)
{
  $query = new Zend_Gdata_Query('http://www.blogger.com/feeds/' . $blogID . '/posts/default/' . $postID);
  $postToUpdate = $dClient->getEntry($query);
  $postToUpdate->title->text = $this->gdClient->newTitle($updatedTitle);
  $postToUpdate->content->text = $this->gdClient->newContent($updatedContent);

  if ($isDraft) {
    $draft = $gdClient->newDraft('yes');
  } else {
    $draft = $gdClient->newDraft('no');
  }

  $control = $gdClient->newControl();
  $control->setDraft($draft);
  $postToUpdate->control = $control;

  $updatedPost = $postToUpdate->save();
  return $updatedPost;
}

Remarque: Il n'est actuellement pas possible de modifier les données d'auteur associées aux posts.

Suppression des posts

Pour supprimer un article, transmettez son URL de modification à la méthode delete de votre objet $gdClient, comme suit:

public function deletePost($gdClient, $blogID, $postID)
{
  $uri = 'http://www.blogger.com/feeds/' . $blogID . '/posts/default/' . $postID;
  $gdClient->delete($uri);
}

Commentaires

L'API Blogger Data permet de créer, de récupérer et de supprimer des commentaires. La mise à jour des commentaires n'est pas disponible (elle n'est pas non plus disponible dans l'interface Web).

Création de commentaires

Pour publier un commentaire, créez un objet d'entrée et insérez-le comme suit:

function createComment($gdClient, $blogID, $postID, $commentText)
{
  $uri = 'http://www.blogger.com/feeds/' . $blogID . '/' . $postID . '/comments/default';

  $newComment = $gdClient->newEntry();
  $newComment->content = $gdClient->newContent($commentText);
  $newComment->content->setType('text');
  $createdComment = $gdClient->insertEntry($newComment, $uri);

  $editLink = split('/', $createdComment->getEditLink()->href);
  $newCommentID = $editLink[8];

  return $newCommentID; 
}

Remarque: Actuellement, vous ne pouvez publier des commentaires que sur un blog appartenant à l'utilisateur authentifié.

Remarque: Il n'est actuellement pas possible de définir un auteur personnalisé pour les commentaires. Tous les nouveaux commentaires apparaîtront comme s'ils avaient été créés par l'utilisateur actuellement authentifié.

Récupérer des commentaires

Vous pouvez récupérer les commentaires d'un article donné à partir de son URL du flux de commentaires:

public function printPostComments($gdClient, $blogID, $postID)
{
  $query = new Zend_Gdata_Query('http://www.blogger.com/feeds/' . $blogID . '/' . $postID . '/comments/default');
  $feed = $gdClient->getFeed($query);
  $printFeed($feed);
}

Vous pouvez également récupérer les commentaires de tous les messages à l'aide de l'URL du flux de commentaires du blog:

http://www.blogger.com/feeds/blogID/comments/default

Suppression des commentaires

Pour supprimer un commentaire, transmettez l'URL de modification du commentaire à la méthode delete de votre objet $gdClient, comme suit:

public function deleteComment($gdClient, $blogID, $postID, $commentID)
{
  $uri = 'http://www.blogger.com/feeds/' . $blogID . '/' . $postID . '/comments/default/' . $commentID;
  $gdClient->delete($uri);
}

Haut de page