Guía para desarrolladores: Java

Importante: Esta es una versión antigua de esta página. Para obtener la versión más reciente, usa los vínculos de la barra de navegación de la izquierda.

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

Tu aplicación cliente puede usar la API de datos de Blogger para crear entradas de blog nuevas, editar o borrar entradas de blog existentes y buscar entradas de blog que coincidan con criterios específicos.

Además de proporcionar información general sobre las capacidades de la API de datos de Blogger, en este documento se proporcionan ejemplos de interacciones básicas de la API de datos con la biblioteca cliente de Java. 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 los programadores que desean escribir aplicaciones cliente de Java que pueden interactuar con Blogger.

En este documento, se asume que comprendes las ideas generales detrás del protocolo de las APIs de datos de Google.

Para obtener información de referencia sobre las clases y los métodos proporcionados por la biblioteca cliente, consulta la referencia de API de la biblioteca cliente de Java. Si deseas obtener información general de referencia de la API de datos de Blogger, consulta la guía de referencia del protocolo.

Primeros pasos

Para obtener ayuda con la configuración de la biblioteca cliente, consulta la guía de introducción.

La biblioteca cliente de Java requiere Java 1.5. Después de descargar la biblioteca cliente, encontrarás las clases que necesitas para comenzar en el archivo java/lib/gdataclient-1.0.jar.

Cómo crear una cuenta de Blogger

Te recomendamos que te registres para obtener una cuenta de Blogger a fin de realizar pruebas. Blogger usa Cuentas de Google. Si ya tienes una, no necesitas hacer nada más.

Cómo ejecutar el código de muestra

En la distribución de la biblioteca cliente de Java, en el directorio gdata/java/sample/blogger/BloggerClient.java, se encuentra disponible un cliente de muestra en funcionamiento completo, que contiene todo el código de muestra que aparece en este documento. Las instrucciones de compilación y ejecución se incluyen en el mismo directorio del archivo README.txt.

El cliente de muestra realiza varias operaciones en el blog proporcionado para demostrar el uso de la API de datos de Blogger.

Para compilar los ejemplos de este documento en tu propio código, necesitarás las siguientes declaraciones import:

import com.google.gdata.client.*;
import com.google.gdata.data.*;
import com.google.gdata.util.*;
import java.io.IOException;
import java.net.URL;

Autenticación en el servicio de Blogger

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

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

En la mayoría de las muestras de las secciones posteriores de este documento, se supone que tienes un objeto GoogleService autenticado.

Autenticación del proxy de AuthSub

Las aplicaciones web que necesitan autenticar a sus usuarios en las Cuentas de Google usan la autenticación del proxy de AuthSub. El operador del sitio web y el código del cliente no tienen acceso al nombre de usuario y la contraseña del usuario de Blogger. En su lugar, el cliente obtiene tokens 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 ha autenticado. 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 Java 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:

String next = "http://www.example.com/welcome.html";
String scope = "http://www.blogger.com/feeds/";
boolean secure = false;
boolean session = true;
String authSubLogin = AuthSubUtil.getRequestUrl(next, scope, secure, session);

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

siguiente
Es la URL de la página a la que Google debe redireccionar al usuario después de la autenticación.
permiso
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 así:

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.html

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 AuthSub lo redirecciona a la URL que especificaste en el parámetro de consulta next de la URL de AuthSubRequest. El sistema 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.html?token=yourAuthToken

Este valor de token representa un token 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 si llamas al servicio AuthSubSessionToken, de la siguiente manera, en la que urlFromAuthSub es la URL a la que AuthSub agregó el token:

String token = AuthSubUtil.getTokenFromReply(urlFromAuthSub);
String sessionToken = AuthSubUtil.exchangeForSessionToken(token, null);

Es decir, debes pasar tu token de un solo uso al método exchangeForSessionToken, junto con null (para el modo no registrado) o una clave privada (para el modo registrado), y la interfaz AuthSub muestra un token de sesión. Para obtener más información sobre las aplicaciones registradas y las claves privadas, consulta la sección “Firma de solicitudes” de la documentación de AuthSub.

Luego, tu aplicación puede usar el token de sesión en interacciones posteriores con Blogger. Para indicarle a la biblioteca cliente de Java que envíe automáticamente el token de sesión con cada solicitud, llama al método setAuthSubToken del objeto GoogleService:

GoogleService.setAuthSubToken(sessionToken, null);

Después de eso, la biblioteca cliente envía automáticamente el token junto con cada solicitud.

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

Usa la autenticación ClientLogin si tu cliente es un cliente “instalado” independiente de un solo usuario (como una aplicación de escritorio). Solo llama al método setUserCredentials en tu objeto GoogleService y se autenticarán todas las interacciones posteriores con Blogger:

GoogleService myService = new GoogleService("blogger", "exampleCo-exampleApp-1");
myService.setUserCredentials("user@example.com", "secretPassword");

En el fragmento anterior, pasamos dos parámetros al constructor GoogleService. El primer parámetro es el nombre del servicio con el que queremos interactuar. El segundo parámetro es el nombre de nuestra aplicación en el formato companyName-applicationName-versionID.

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

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

Nota: Como se describe en la documentación de ClientLogin, la solicitud de autenticación puede fallar y solicitar 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 indica en la documentación de ClientLogin).

Cómo recuperar una lista de blogs

La API de datos de Blogger proporciona un feed en el que se enumeran los blogs de un usuario en particular; ese feed se conoce como "metafeed".

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

public static void printUserBlogs(GoogleService myService)
    throws ServiceException, IOException {

  // Request the feed
  final URL feedUrl = new URL("http://www.blogger.com/feeds/default/blogs");
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
  }
}

Ten en cuenta la URL que usa el método getFeed. Esta es la URL del metafeed predeterminada; muestra una lista de blogs para el usuario autenticado actualmente. Para acceder al feed de un usuario diferente, 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 del perfil del usuario.

Creando publicaciones

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

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

Publicar una entrada de blog

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

Primero, crea un objeto Entry para representar la entrada de blog. Luego, puedes configurar el título, el contenido y otros atributos de la entrada de blog. Por último, usa el objeto GoogleService para insertar la entrada. Este es un ejemplo de cómo publicar una nueva entrada de blog:

public static Entry createPost(
    GoogleService myService, String blogID, String title,
    String content, String userName)
    throws ServiceException, IOException {
  // Create the entry to insert
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));

  // Ask the service to insert the new entry
  URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  return myService.insert(postUrl, myEntry);
}

El método insert toma la URL de la publicación del servicio como parámetro. Luego, el método mostrará la entrada tal como la almacenó Blogger. La entrada que se muestra es la misma que enviaste, pero también contiene varios elementos que Blogger agregó, como el ID de una entrada.

Si por algún motivo tu solicitud falla, Blogger podría mostrar un código de estado diferente. Para obtener información sobre los códigos de estado, consulta el documento de referencia del protocolo de la API de datos de Google.

Creando el borrador de la entrada de blog

Las entradas en borrador se crean de la misma manera que las entradas públicas, pero debes configurar el atributo draft del objeto Entry. Puedes crear una entrada de blog como la anterior como borrador agregando la línea destacada:

public static Entry createPost(GoogleService myService, String blogId,
    String title, String content, String userName,
    Boolean isDraft)
    throws ServiceException, IOException {
  // Create the entry to insert
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));
  myEntry.setDraft(isDraft);

  // Ask the service to insert the new entry
  URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  return myService.insert(postUrl, myEntry);
}

Puedes convertir un borrador de una entrada de blog existente en una entrada publicada si recuperas la entrada en borrador, configuras el atributo borrador como falso y, luego, actualizas la entrada. Abordaremos la recuperación y la actualización de publicaciones en las siguientes dos secciones.

Cómo recuperar publicaciones

En las siguientes secciones, se describe cómo recuperar una lista de entradas 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 llamar al método setUserCredentials ni realizar la autenticación de AuthSub antes de recuperar las entradas de un blog público.

Recuperando todas las entradas del blog

Para recuperar las entradas 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 las entradas de blog:

public static void printAllPosts(
    GoogleService myService, String blogId)
    throws ServiceException, IOException {
  // Request the feed
  URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
  }
  System.out.println();
}

Cómo recuperar publicaciones mediante parámetros de consulta

La API de datos de Blogger te permite solicitar un conjunto de entradas que coincidan con criterios específicos, como solicitar entradas de blog publicadas o actualizadas en un período determinado. Para ello, crea un objeto Query y pásalo al método GoogleService.getQuery.

Por ejemplo, para enviar una consulta por período, usa los métodos setPublishedMin y setPublishedMax del objeto Query. En el siguiente fragmento de código, se imprime el título de cada entrada de blog que se publica entre la hora de inicio y la hora de finalización determinadas:

public static void printDateRangeQueryResults(
    GoogleService myService, String blogId,
    DateTime startTime, DateTime endTime)
    throws ServiceException, IOException {
  // Create query and submit a request
  URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  Query myQuery = new Query(feedUrl);
  myQuery.setPublishedMin(startTime);
  myQuery.setPublishedMax(endTime);
  Feed resultFeed = myService.query(myQuery, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText() +
      " posts between " + startTime + " and " + endTime);
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
    System.out.println("\t" + entry.getUpdated().toStringRfc822());
  }
  System.out.println();
}

Ten en cuenta que el objeto Query se construye con la misma URL del feed de entradas que se usó para recuperar publicaciones.

La API de datos de Blogger admite los siguientes métodos Query:

addCategoryFilter
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.
setMaxResults
Establece la cantidad máxima de entradas que se mostrarán.
setPublishedMin y setPublishedMax
Establece los límites en las fechas de publicación de entrada.
setStartIndex
Configura el índice basado en 1 del primer resultado que se recuperará (para la paginación).
setUpdatedMin y setUpdatedMax
Establece los límites en las fechas de actualización de entradas. Estos parámetros de consulta se ignoran, a menos que el parámetro orderby se establezca en updated.

Nota: Por el momento, no hay métodos set para el parámetro de consulta orderby. Sin embargo, puedes usar el método Query.addCustomParameter() si necesitas configurar esto.

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.

Actualizando publicaciones

Para actualizar una entrada de blog existente, primero recupera la entrada que deseas actualizar, luego, modifícala y, luego, envíala a Blogger mediante el método update. Con el siguiente fragmento de código, se modifica el título de una entrada de blog, suponiendo que ya la recuperaste del servidor.

public static Entry updatePostTitle(
    GoogleService myService, Entry entryToUpdate, String newTitle)
    throws ServiceException, IOException {
  entryToUpdate.setTitle(new PlainTextConstruct(newTitle));
  URL editUrl = new URL(entryToUpdate.getEditLink().getHref());
  return myService.update(editUrl, entryToUpdate);
}

El código anterior muestra un Entry que contiene toda la entrada actualizada. Para actualizar otras propiedades, solo debes establecerlas en el objeto Entry antes de llamar a update.

Nota: Por el momento, no se pueden modificar los datos del autor asociados con las publicaciones.

Borrando publicaciones

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

public static void deletePost(
    GoogleService myService, String editLinkHref)
    throws ServiceException, IOException {
  URL deleteUrl = new URL(editLinkHref);
  myService.delete(deleteUrl);
}

Comentarios

La API de datos de Blogger permite crear, recuperar y borrar comentarios. No se admite la actualización de comentarios (tampoco está disponible en la interfaz web).

Creación de comentarios

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

public static Entry createComment(
    GoogleService myService, String blogID, String postId,
    String commentText)
    throws ServiceException, IOException {
  // Build the comment feed URI
  String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
  URL feedUrl = new URL(commentsFeedUri);

  // Create a new entry for the comment and submit it to the GoogleService
  Entry myEntry = new Entry();
  myEntry.setContent(new PlainTextConstruct(commentText));
  return myService.insert(feedUrl, myEntry);
}

Nota: Por el momento, solo puedes publicar comentarios en blogs que pertenecen al usuario autenticado.

Nota: Por el momento, no se admite la configuración de 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 específica desde la URL del feed de comentarios de la entrada:

public static void printAllComments(
    GoogleService myService, String blogID, String postId)
    throws ServiceException, IOException {
  // Build comment feed URI and request comments on the specified post
  String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
  URL feedUrl = new URL(commentsFeedUri);
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Display the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" +
        ((TextContent) entry.getContent()).getContent().getPlainText());
    System.out.println("\t" + entry.getUpdated().toStringRfc822());
  }
  System.out.println();
}

O puedes ver los comentarios de todas las entradas a través de la URL del feed de comentarios del blog:

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

Borrando comentarios

Para borrar un comentario, pasa su URL de edición al método delete en tu objeto GoogleService de la siguiente manera:

public static void deleteComment(GoogleService myService, String editLinkHref)
    throws ServiceException, IOException {
  URL deleteUrl = new URL(editLinkHref);
  myService.delete(deleteUrl);
}

Volver al principio