Guía para desarrolladores: PHP

La API de Blogger Data permite que las aplicaciones cliente vean y actualicen el contenido de Blogger en forma de feeds de la API de Google Data.

Tu aplicación cliente puede usar la API de Blogger Data para crear entradas de blog nuevas, editar o borrar entradas de blog existentes, y consultar entradas de blog que coincidan con criterios particulares.

Además de proporcionar información sobre las funciones de la API de datos de Blogger, este documento ofrece ejemplos de interacciones básicas con la API de datos mediante la biblioteca cliente de las APIs de datos de Google de Zend. Si te interesa obtener más información sobre el protocolo subyacente que usa la biblioteca, consulta la sección Protocolo de esta guía para desarrolladores.

Contenido

Público

Este documento está dirigido a programadores que deseen escribir aplicaciones cliente de PHP que puedan interactuar con Blogger.

En este documento, se da por sentado que comprendes las ideas generales detrás del protocolo de las APIs de Google Data.

Para obtener información de referencia sobre las clases y los métodos que proporciona la biblioteca cliente, consulta la referencia de la API de la biblioteca cliente de PHP. Para obtener información general de referencia de la API de Blogger Data, consulta la Guía de referencia del protocolo.

Cómo comenzar

Si necesitas ayuda para configurar la biblioteca cliente, consulta la Guía de introducción.

La biblioteca cliente de Zend requiere PHP 5.1.4 o una versión posterior. Está disponible como parte del Zend Framework y también como una descarga independiente. Para interactuar con Blogger, usa la versión 1.0.0 o una posterior de la biblioteca cliente.

Crea una cuenta de Blogger

Te recomendamos que te registres para obtener una cuenta de Blogger para realizar pruebas. Blogger usa Cuentas de Google, por lo que, si ya tienes una, puedes comenzar a usar el servicio.

Cómo ejecutar el código de muestra

Un cliente de muestra funcional completo, que contiene todo el código de muestra que se muestra en este documento, está disponible en el repositorio de SVN de Zend Framework. La muestra se encuentra en /framework/standard/trunk/demos/Zend/Gdata/Blogger.php. La muestra contiene todas las funciones que se explican en este documento. Solo se puede ejecutar desde la línea de comandos:

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

Antes de ejecutar esta muestra o desarrollar tu propio código con Zend Framework, es posible que debas configurar include_path y cargar las clases adecuadas. La ruta de inclusión se puede establecer con una configuración de php.ini o con el método set_include_path. Este código solicita acceso a la clase principal Zend_Gdata, a la clase Zend_Gdata_Query y a la clase de autenticación 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');

Usa métodos get y set mágicos

En toda la biblioteca cliente de PHP, se agregó compatibilidad con los set/get mágicos para brindar comodidad a los desarrolladores. Estos permiten que se acceda de forma segura a las propiedades de una clase con métodos set/get tradicionales o mediante el acceso a las propiedades. Por ejemplo, si $gdataObject es una instancia de un objeto en esta biblioteca, las siguientes dos líneas de código tienen efectos idénticos:

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

Del mismo modo, estas dos líneas de código también tienen efectos idénticos:

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

Del mismo modo, los métodos de fábrica mágicos facilitan la declaración de objetos nuevos. En lugar de recordar los nombres de clase largos que exige la convención de nombres de Zend, puedes crear un object nuevo llamando a newObject(); en un cliente de servicio de Zend. Por ejemplo, los siguientes dos fragmentos declaran un nuevo objeto de extensión draft. Verás más información sobre drafts en la sección Cómo crear una publicación.

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

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

Los set y get mágicos y las fábricas son opcionales, así que usa el enfoque que mejor te resulte.

Otros recursos

Otros recursos para el componente de las APIs de Google Data de Zend Framework (Zend_Gdata):

Cómo autenticar en el servicio de Blogger

Puedes acceder a feeds públicos y privados con la API de Blogger Data. Los feeds públicos no requieren ninguna autenticación, pero son de solo lectura. Si quieres modificar blogs, tu cliente debe autenticarse antes de solicitar feeds privados. Puede autenticarse con cualquiera de estos tres enfoques: autenticación de OAuth, autenticación de proxy de AuthSub o autenticación de nombre de usuario y contraseña de ClientLogin.

Para obtener más información sobre la autenticación con las APIs de Google Data en general, consulta la documentación de autenticación.

En la mayoría de los ejemplos de las secciones posteriores de este documento, se supone que tienes un objeto de cliente autenticado llamado $gdClient.

Autenticación de OAuth

Si deseas obtener documentación sobre la autenticación de OAuth con la biblioteca de GData de PHP de Zend, consulta OAuth en las bibliotecas cliente del protocolo de datos de Google.

Autenticación de proxy de AuthSub

Las aplicaciones web que necesitan autenticar a sus usuarios en Cuentas de Google usan la autenticación de proxy de AuthSub. El operador del sitio web y el código cliente no tienen acceso al nombre de usuario ni a la contraseña del usuario de Blogger. En cambio, el cliente obtiene tokens de AuthSub especiales que le permiten actuar en nombre de un usuario en particular. Para obtener información más detallada, consulta la documentación de AuthSub.

Cuando un usuario visita tu aplicación por primera vez, aún no se autenticó. En este caso, debes mostrar información y un vínculo que dirija al usuario a una página de Google para autenticar tu solicitud de acceso a sus blogs. La biblioteca cliente de Zend proporciona una función para generar la URL de la página de Google. El siguiente código recupera la URL de la página AuthSubRequest:

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>';

El método getAuthSubTokenUri toma los siguientes parámetros (que corresponden a los parámetros de consulta que usa el controlador AuthSubRequest):

siguiente
Es la URL de la página a la que Google debe redireccionar al usuario después de la autenticación.
alcance
Indica que la aplicación solicita un token para acceder a los feeds de Blogger. La cadena de alcance que se debe usar es http://www.blogger.com/feeds/ (codificada como URL, por supuesto).
seguro
Indica si el cliente solicita un token seguro.
sesión
Indica si el token que se muestra se puede intercambiar por un token de uso múltiple (sesión).

En el ejemplo anterior, se muestra una llamada que no solicita un token seguro (el valor de secure es false). La URL de solicitud resultante podría verse de la siguiente manera:

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

El usuario sigue el vínculo al sitio de Google y se autentica en su Cuenta de Google.

Después de que el usuario se autentica, el sistema de AuthSub lo redirecciona a la URL que especificaste en el parámetro de consulta next de la URL de AuthSubRequest. El sistema de AuthSub agrega un token de autenticación a esa URL, como el valor del parámetro de consulta token. Por ejemplo:

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

Puedes recuperar el valor del token con $_GET['token'].

Este valor de token representa un token de AuthSub de un solo uso. En este ejemplo, como se especificó $session = true, este token se puede intercambiar por un token de sesión de AuthSub con el método Zend_Gdata_AuthSub::getAuthSubSessionToken, que llama al servicio AuthSubSessionToken:

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

El fragmento de código primero verifica si ya hay un token de sesión de AuthSub. Si no es así, pero se especifica un token de uso único en la URL, el fragmento de código pasa el token de uso único al método getAuthSubSessionToken y la interfaz de AuthSub muestra un token de sesión. Luego, el código coloca el valor del token de sesión en la variable $_SESSION['sessionToken'] de la sesión.

Luego, tu aplicación puede usar el valor del token de sesión en interacciones posteriores con Blogger. Puedes usar el método Zend_Gdata_AuthSub::getHttpClient para obtener un objeto Zend_Http_Client que tenga el encabezado Authorization preconfigurado para incluir credenciales de AuthSub:

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

Autenticación de nombre de usuario o contraseña de ClientLogin

Usa la autenticación de ClientLogin si tu cliente es un cliente "instalado" independiente para un solo usuario (como una aplicación para computadoras de escritorio).

En el siguiente código, se usa el método Zend_Gdata_ClientLogin::getHttpClient para realizar una solicitud al servicio ClientLogin, recuperar un token de autenticación y crear un objeto Zend_Http_Client con el encabezado de autenticación adecuado. Luego, el HttpClient que muestra este método se usa para construir un objeto de servicio Zend_Gdata.

Observa que $accountType se configura de forma explícita como GOOGLE. Si no configuras este parámetro, los usuarios de G Suite no podrán usar correctamente la API de 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);

Para obtener más información sobre la autenticación de ClientLogin, incluidas las solicitudes y respuestas de muestra, consulta la documentación Autenticación para aplicaciones instaladas.

Nota: Usa el mismo token para todas las solicitudes en una sesión determinada. No adquieras un token nuevo para cada solicitud de Blogger.

Nota: Como se describe en la documentación de ClientLogin, es posible que la solicitud de autenticación falle y solicite un desafío de CAPTCHA. Si deseas que Google emita y controle el desafío de CAPTCHA, envía al usuario a https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (en lugar de a la URL de control de CAPTCHA que se proporciona en la documentación de ClientLogin).

Cómo recuperar una lista de blogs

La API de Blogger Data proporciona un feed que enumera los blogs de un usuario en particular. Ese feed se conoce como “metafeed”.

En el siguiente código de muestra, se usa un objeto $gdClient autenticado para recuperar el metafeed y, luego, se imprime el título de cada blog.

La clase Zend_Gdata_Query se encarga de crear la URL de consulta. En este caso, no se necesita realizar ningún trabajo adicional, pero la utilidad de la clase Query se hará evidente en la sección Cómo recuperar publicaciones por parámetros de consulta de este documento.

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++;
  }
}

Anota la URL que usa el método getFeed. Esta es la URL predeterminada del metafeed, que muestra una lista de blogs para el usuario autenticado actualmente. Para acceder a un feed de otro usuario, puedes colocar el ID del usuario en lugar de default en la URL del metafeed. El ID del usuario es la cadena de dígitos que aparece al final de la URL de su perfil.

En el siguiente fragmento de código, se muestra cómo extraer un ID de blog del feed. Necesitarás el ID del blog para realizar operaciones de creación, actualización y eliminación en las publicaciones y los comentarios. La variable $index representa el blog que se usa en el feed de blogs del usuario. El campo id tiene el formato tag:blogger.com,1999:user-userID.blog-blogID, por lo que un split en el carácter "-" coloca el ID del blog en el último elemento del array resultante.

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

Cómo crear publicaciones

La API de Blogger Data te permite crear y publicar entradas de blog nuevas, así como crear borradores de entradas.

Nota: Por el momento, no se admite configurar un autor personalizado para las publicaciones. Todas las publicaciones nuevas aparecerán como si las hubiera creado el usuario autenticado actualmente.

Publica una entrada de blog

Puedes usar la biblioteca cliente de PHP para publicar nuevas entradas de blog.

Primero, crea una instancia de entrada para representar la entrada de blog. Luego, puedes establecer el título, el contenido y otros atributos de la entrada de blog. Por último, llama al método insertEntry para insertar la publicación. Puedes ver las instancias de la fábrica mágica en acción aquí con los nuevos objetos Zend_Gdata_Entry, Zend_Gdata_App_Extension_Title y 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;
}

Cómo crear un borrador de entrada de blog

Las publicaciones de borrador se crean de la misma manera que las publicaciones públicas, pero debes configurar el atributo borrador del objeto de entrada. Para crear una entrada de blog como la anterior como borrador, agrega las líneas destacadas:

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 misma manera que configuras el título o el contenido de una publicación, creas objetos Zend_Gdata_App_Extension_Control y Zend_Gdata_App_Extension_Draft nuevos y los asignas al atributo de control de la entrada.

Para convertir un borrador de entrada de blog existente en una entrada publicada, recupera la entrada de borrador, establece el atributo de borrador en no y, luego, actualízala. En las siguientes dos secciones, veremos cómo recuperar y actualizar publicaciones.

Cómo recuperar publicaciones

En las siguientes secciones, se describe cómo recuperar una lista de publicaciones de blog, con y sin parámetros de consulta.

Puedes consultar un feed público de Blogger sin autenticación. Por lo tanto, no necesitas configurar credenciales ni realizar la autenticación de AuthSub antes de recuperar publicaciones de un blog público.

Cómo recuperar todas las entradas de blog

Para recuperar las publicaciones del usuario, llama al mismo método getFeed que se usa para recuperar el metafeed de los blogs, pero esta vez envía la URL del feed de publicaciones 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);
}

Cómo recuperar publicaciones con parámetros de consulta

La API de Blogger Data te permite solicitar un conjunto de entradas que coincidan con criterios especificados, como solicitar publicaciones de blog publicadas o actualizadas en un período determinado. Para ello, creas un objeto de consulta y lo pasas al método getFeed.

Por ejemplo, para enviar una consulta de período, establece los parámetros published-min y published-max del objeto de consulta. El siguiente fragmento de código imprime el título y el contenido de cada entrada de blog publicada entre la hora de inicio y la hora de finalización determinadas:

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

Un método de depuración útil para la clase Zend_Gdata_Query es getQueryUrl(), que te mostrará la URL codificada que se construyó.

Nota: Actualmente, no hay set de valores mágicos para los parámetros de consulta published-min y published-max. Sin embargo, puedes usar setStartIndex y setMaxResults.

La API de Blogger Data admite los siguientes parámetros de consulta:

categorías
Especifica categorías (también conocidas como etiquetas) para filtrar los resultados del feed. Por ejemplo, http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie muestra entradas con las etiquetas Fritz y Laurie.
max-results
Es la cantidad máxima de entradas que se mostrarán.
published-min, published-max
Los límites de las fechas de publicación de las entradas.
start-index
Es el índice basado en 1 del primer resultado que se recuperará (para paginación).

Para obtener más información sobre los parámetros de consulta, consulta la Guía de referencia de la API de datos de Blogger y la Guía de referencia de las APIs de datos de Google.

Actualiza publicaciones

Para actualizar una entrada de blog existente, primero recupera la entrada que deseas actualizar, luego modifícala y, luego, envíala a Blogger con el método save. El siguiente fragmento de código modifica el título y el contenido de una entrada de blog, siempre y cuando ya hayas recuperado la entrada del servidor.

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;
}

Nota: Actualmente, no se admite la modificación de los datos del autor asociados con las publicaciones.

Cómo borrar publicaciones

Para borrar una publicación, pasa la URL de edición de la publicación al método delete en tu objeto $gdClient, de la siguiente manera:

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

Comentarios

La API de Blogger Data permite crear, recuperar y borrar comentarios. No se pueden actualizar los comentarios (ni están disponibles en la interfaz web).

Cómo crear comentarios

Para publicar un comentario, crea un objeto de entrada y, luego, insértalo de la siguiente manera:

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; 
}

Nota: Actualmente, solo puedes publicar comentarios en un blog que pertenezca al usuario autenticado.

Nota: Por el momento, no se admite configurar un autor personalizado para los comentarios. Todos los comentarios nuevos aparecerán como si los hubiera creado el usuario autenticado actualmente.

Cómo recuperar comentarios

Puedes recuperar los comentarios de una publicación en particular desde la URL del feed de comentarios de la publicación:

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

También puedes obtener los comentarios de todas las publicaciones con la URL del feed de comentarios del blog:

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

Cómo borrar comentarios

Para borrar un comentario, pasa la URL de edición del comentario al método delete de tu objeto $gdClient de la siguiente manera:

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

Volver al principio