package br.com.livro.rest; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.Context; import javax.ws.rs.core.Feature; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.glassfish.jersey.client.oauth1.AccessToken; import org.glassfish.jersey.client.oauth1.ConsumerCredentials; import org.glassfish.jersey.client.oauth1.OAuth1ClientSupport; import twitter.TwitterStatus; import br.com.livro.rest.oauth.TwitterOAuthFilter; @Path("/twitterv2") public class TwitterResourceV2 { @Context private HttpServletRequest request; @GET @Produces(MediaType.TEXT_PLAIN+";charset=utf-8") public String get() { return "Olá Twitter"; } @GET @Path("/timeline") @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") public String timeline() { // Cria o cliente da API REST Client client = getClient(); // Utiliza a API REST para ler a timeline do Twitter Response response = client .target("https://api.twitter.com/1.1/statuses/user_timeline.json") .request().get(); // Lê uma lista de TwitterStatus String json = response.readEntity(String.class); // Retorna o json return json; } @GET @Path("/ultimoTweet") @Produces(MediaType.TEXT_PLAIN + ";charset=utf-8") public String ultimoTweet(@QueryParam("token") String token, @QueryParam("tokenSecret") String tokenSecret) { // Demonstra como criar um Token informando os códigos manualmente. Client client = getClient(); // Utiliza a API REST para ler a timeline do Twitter Response response = client .target("https://api.twitter.com/1.1/statuses/user_timeline.json") .request().get(); // Lê uma lista de TwitterStatus final List<TwitterStatus> list = response .readEntity(new GenericType<List<TwitterStatus>>() { }); // Retorna o primeiro tweet da lista TwitterStatus s = list.get(0); return s.getUser().getName() + " >> " + s.getText(); } // Cria o objeto Client da API REST do Jersey private Client getClient() { // Recupera o Token da sessão AccessToken accessToken = (AccessToken) request.getSession() .getAttribute("accessToken"); // Utiliza as credenciais de acesso OAuth do provedor (Twitter) ConsumerCredentials credentials = new ConsumerCredentials( TwitterOAuthFilter.CONSUMER_KEY, TwitterOAuthFilter.CONSUMER_SECRET); Feature feature = OAuth1ClientSupport.builder(credentials).feature() .accessToken(accessToken).build(); Client client = ClientBuilder.newClient(); client.register(feature); // Habilita o Google-GSON client.register(GsonMessageBodyHandler.class); return client; } }