Guia do desenvolvedor: Java

Importante: esta é uma versão antiga desta página. Para usar a versão mais recente, use os links na barra de navegação à esquerda.

A API Data do Blogger permite que os aplicativos clientes acessem e atualizem o conteúdo do Blogger na forma de feeds da API Data do Google.

O aplicativo cliente pode usar a API Blogger Data para criar novas postagens do blog, editar ou excluir postagens existentes e consultar postagens que correspondem a critérios específicos.

Além de fornecer alguns antecedentes sobre os recursos da API Data do Blogger, este documento apresenta exemplos de interações básicas da API Data usando a biblioteca de cliente Java. Se você quiser saber mais sobre o protocolo subjacente usado pela biblioteca, consulte a seção Protocolo deste guia para desenvolvedores.

Conteúdo

Público-alvo

Este documento é destinado a programadores que querem criar aplicativos cliente Java que possam interagir com o Blogger.

Este documento pressupõe que você entenda as ideias gerais por trás do protocolo das APIs Data do Google.

Para informações de referência sobre as classes e os métodos fornecidos pela biblioteca de cliente, consulte a referência da API da biblioteca de cliente do Java. Para informações gerais de referência da API Data do Blogger, consulte o guia de referência do protocolo.

Primeiros passos

Para receber ajuda com a configuração da biblioteca de cliente, consulte o Guia de início.

A biblioteca de cliente Java requer o Java 1.5. Depois de fazer o download da biblioteca de cliente, você vai encontrar as classes necessárias para começar no arquivo java/lib/gdataclient-1.0.jar.

Como criar uma conta do Blogger

Talvez seja melhor criar uma conta do Blogger para fins de teste. O Blogger usa Contas do Google. Se você já tem uma, está tudo pronto.

Como executar o código de amostra

Um cliente de exemplo completo, que contém todo o código de exemplo mostrado neste documento, está disponível na distribuição da biblioteca de cliente Java, no diretório gdata/java/sample/blogger/BloggerClient.java. As instruções de build e execução são incluídas no mesmo diretório no arquivo README.txt.

O cliente de exemplo realiza várias operações no blog fornecido para demonstrar o uso da API Data do Blogger.

Para compilar os exemplos deste documento no seu próprio código, você vai precisar das seguintes instruções import:

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

Como fazer a autenticação no serviço do Blogger

É possível acessar feeds públicos e privados usando a API Data do Blogger. Os feeds públicos não exigem autenticação, mas são somente leitura. Se você quer modificar blogs, seu cliente precisa se autenticar antes de solicitar feeds privados. Ele pode ser autenticado usando uma destas duas abordagens: autenticação de proxy AuthSub ou autenticação de nome de usuário/senha ClientLogin.

Para mais informações sobre a autenticação com as APIs de dados do Google em geral, consulte a documentação de autenticação.

A maioria dos exemplos nas seções seguintes deste documento pressupõe que você tenha um objeto GoogleService autenticado.

Autenticação via proxy do AuthSub

A autenticação de proxy AuthSub é usada por aplicativos da Web que precisam autenticar os usuários nas Contas do Google. O operador do site e o código do cliente não têm acesso ao nome de usuário e à senha do usuário do Blogger. Em vez disso, o cliente recebe tokens AuthSub especiais que permitem que ele aja em nome de um usuário específico. Para mais informações, consulte a documentação do AuthSub.

Quando um usuário visita seu aplicativo pela primeira vez, ele ainda não foi autenticado. Nesse caso, você precisa mostrar algumas informações e um link direcionando o usuário a uma página do Google para autenticar sua solicitação de acesso aos blogs. A biblioteca de cliente Java fornece uma função para gerar o URL da página do Google. O código abaixo recupera o URL da 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);

O método getRequestUrl usa os seguintes parâmetros, correspondentes aos parâmetros de consulta usados pelo gerenciador de AuthSubRequest:

próxima
O URL da página para a qual o Google vai redirecionar o usuário após a autenticação.
escopo
Indica que o aplicativo está solicitando um token para acessar os feeds do Blogger. A string de escopo a ser usada é http://www.blogger.com/feeds/ (codificada por URL, é claro).
seguro
Indica se o cliente está solicitando um token seguro.
sessão
Indica se o token retornado pode ser trocado por um token de uso múltiplo (sessão).

O exemplo acima mostra uma chamada que não solicita um token seguro (o valor de secure é false). O URL de solicitação resultante pode ser parecido com este:

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

O usuário segue o link para o site do Google e faz a autenticação na Conta do Google.

Depois que o usuário é autenticado, o sistema AuthSub redireciona ele para o URL especificado no parâmetro de consulta next do URL AuthSubRequest. O sistema AuthSub anexa um token de autenticação a esse URL como o valor do parâmetro de consulta token. Exemplo:

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

Esse valor de token representa um token AuthSub de um único uso. Neste exemplo, como session = true foi especificado, esse token pode ser trocado por um token de sessão do AuthSub chamando o serviço AuthSubSessionToken, conforme mostrado abaixo, em que urlFromAuthSub é o URL em que o AuthSub adicionou o token:

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

Ou seja, você transmite seu token de uso único para o método exchangeForSessionToken, junto com null (para o modo não registrado) ou uma chave privada (para o modo registrado), e a interface AuthSub retorna um token de sessão. Para mais informações sobre aplicativos registrados e chaves privadas, consulte a seção Solicitações de assinatura da documentação do AuthSub.

Seu aplicativo poderá usar o token de sessão em interações posteriores com o Blogger. Para informar à biblioteca de cliente Java que o token de sessão será enviado automaticamente a cada solicitação, chame o método setAuthSubToken do objeto GoogleService:

GoogleService.setAuthSubToken(sessionToken, null);

Depois disso, a biblioteca de cliente envia automaticamente o token com cada solicitação.

Autenticação por nome de usuário/senha do ClientLogin

Use a autenticação ClientLogin se o cliente for um cliente "instalado" independente para um único usuário, como um aplicativo de computador. Basta chamar o método setUserCredentials no objeto GoogleService e todas as interações subsequentes com o Blogger serão autenticadas:

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

No snippet acima, transmitimos dois parâmetros para o construtor GoogleService. O primeiro parâmetro é o nome do serviço com que queremos interagir. O segundo parâmetro é o nome do app no formato companyName-applicationName-versionID.

Para mais informações sobre a autenticação do ClientLogin, incluindo solicitações e respostas de exemplo, consulte a documentação Autenticação para aplicativos instalados.

Observação: use o mesmo token para todas as solicitações em uma determinada sessão. Não adquira um novo token para cada solicitação do Blogger.

Observação: conforme descrito na documentação do ClientLogin, a solicitação de autenticação pode falhar e solicitar um desafio do CAPTCHA. Se você quiser que o Google emita e processe o desafio do CAPTCHA, envie o usuário para https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (em vez do URL de processamento do CAPTCHA fornecido na documentação do ClientLogin).

Como extrair uma lista de blogs

A API Data do Blogger fornece um feed que lista os blogs de um usuário específico. Esse feed é conhecido como "metafeed".

O exemplo de código abaixo usa um objeto GoogleService autenticado para extrair o metafeed e imprimir o 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());
  }
}

Anote o URL usado pelo método getFeed. Esse é o URL de metafeed padrão. Ele retorna uma lista de blogs do usuário autenticado. Para acessar um feed de outro usuário, coloque o ID dele no lugar de default no URL do metafeed. O ID do usuário é a string de dígitos no final do URL do perfil do usuário.

Como criar postagens

A API Data do Blogger permite criar e publicar novas entradas de blog, além de criar rascunhos de entradas.

Observação: no momento, não é possível definir um autor personalizado para as postagens. Todas as novas postagens vão aparecer como se tivessem sido criadas pelo usuário autenticado no momento.

Publicar uma postagem do blog

Você pode usar a biblioteca de cliente Java para publicar novas entradas de blog.

Primeiro, crie um objeto Entry para representar a postagem do blog. Em seguida, você pode definir o título, o conteúdo e outros atributos da postagem do blog. Por fim, use o objeto GoogleService para inserir a postagem. Confira um exemplo de como publicar uma nova postagem do 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);
}

O método insert usa o URL de postagem do serviço como parâmetro. Em seguida, o método retorna a entrada conforme ela foi armazenada pelo Blogger. A entrada retornada é a mesma que você enviou, mas também contém vários elementos adicionados pelo Blogger, como um ID de postagem.

Se a solicitação falhar por algum motivo, o Blogger poderá retornar um código de status diferente. Para informações sobre os códigos de status, consulte o documento de referência do protocolo da API Google Data.

Criar um rascunho de postagem do blog

As postagens pendentes são criadas da mesma forma que as postagens públicas, mas você precisa definir o atributo draft do objeto Entry. É possível criar uma postagem do blog como a acima como rascunho adicionando a linha 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);
}

Para transformar um rascunho de postagem do blog em uma postagem publicada, recupere o rascunho, defina o atributo de rascunho como falso e atualize a postagem. Vamos abordar a recuperação e a atualização de posts nas próximas duas seções.

Como recuperar postagens

As seções a seguir descrevem como recuperar uma lista de postagens do blog, com e sem parâmetros de consulta.

É possível consultar um feed público do Blogger sem autenticação. Portanto, não é necessário chamar o método setUserCredentials ou fazer a autenticação AuthSub antes de extrair postagens de um blog público.

Recuperação de todas as postagens do blog

Para recuperar as postagens do usuário, chame o mesmo método getFeed usado para recuperar o metafeed dos blogs, mas envie o URL do feed de postagens do 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();
}

Como recuperar postagens usando parâmetros de consulta

A API Blogger Data permite solicitar um conjunto de entradas que correspondem a critérios especificados, como solicitar postagens do blog publicadas ou atualizadas em um determinado período. Para fazer isso, crie um objeto Query e transmita-o ao método GoogleService.getQuery.

Por exemplo, para enviar uma consulta de período, use os métodos setPublishedMin e setPublishedMax do objeto Query. O snippet de código a seguir mostra o título de cada postagem do blog publicada entre o horário de início e o horário de término:

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

O objeto Query é criado usando o mesmo URL do feed de postagens usado para extrair postagens.

A API Data do Blogger oferece suporte aos seguintes métodos Query:

addCategoryFilter
Especifique categorias (também conhecidas como rótulos) para filtrar os resultados do feed. Por exemplo, http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie retorna entradas com os rótulos Fritz e Laurie.
setMaxResults
Define o número máximo de entradas a serem retornadas.
setPublishedMin, setPublishedMax
Defina os limites nas datas de publicação da entrada.
setStartIndex
Define o índice com base em 1 do primeiro resultado a ser recuperado (para paginação).
setUpdatedMin, setUpdatedMax
Defina os limites nas datas de atualização da entrada. Esses parâmetros de consulta são ignorados, a menos que o parâmetro orderby seja definido como updated.

Observação: no momento, não há setters para o parâmetro de consulta orderby. No entanto, você ainda pode usar o método Query.addCustomParameter() se precisar definir isso.

Para mais informações sobre parâmetros de consulta, consulte o Guia de referência da API Data do Blogger e o Guia de referência das APIs Data do Google.

Como atualizar postagens

Para atualizar uma postagem do blog, primeiro recupere a entrada que você quer atualizar, modifique-a e envie para o Blogger usando o método update. O snippet de código a seguir modifica o título de uma entrada de blog, presumindo que você já tenha extraído a entrada do 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);
}

O código acima retorna um Entry contendo toda a postagem recém-atualizada. Para atualizar outras propriedades, basta defini-las no objeto Entry antes de chamar update.

Observação: no momento, não é possível modificar os dados do autor associados às postagens.

Como excluir postagens

Para excluir uma postagem, transmita o URL de edição da postagem para o método delete no objeto GoogleService, desta forma:

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

Comentários

A API Data do Blogger permite criar, recuperar e excluir comentários. Não é possível atualizar comentários nem usar esse recurso na interface da Web.

Como criar comentários

Para postar um comentário, crie um objeto Entry e insira-o da seguinte maneira:

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

Observação: no momento, só é possível postar comentários em um blog que pertence ao usuário autenticado.

Observação: no momento, não é possível definir um autor personalizado para comentários. Todos os novos comentários vão aparecer como se tivessem sido criados pelo usuário autenticado no momento.

Como recuperar comentários

É possível recuperar os comentários de uma postagem específica no URL do feed de comentários:

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

Ou você pode receber os comentários de todas as postagens usando o URL do feed de comentários do blog:

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

Excluir comentários

Para excluir um comentário, transmita o URL de edição do comentário para o método delete do objeto GoogleService, como este:

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

Voltar ao início