Introdução ao Twitter4J
1. Visão geral
Neste artigo, veremos como usarTwitter4J em um aplicativo Java para se comunicar com o Twitter.
2. Twitter4J
Twitter4J é uma biblioteca Java de software livre, que fornece uma API conveniente para acessarTwitter API.
Simplificando, aqui está como podemos interagir com a API do Twitter; podemos:
-
Postar um tweet
-
Obtenha a linha do tempo de um usuário, com uma lista dos tweets mais recentes
-
Envie e receba mensagens diretas
-
Pesquise tweets e muito mais
Essa biblioteca garante que possamos executar essas operações com facilidade e também garante a segurança e a privacidade de um usuário - para o qual naturalmente precisamos ter credenciais OAuth configuradas em nosso aplicativo.
3. Dependências do Maven
Precisamos começar definindo a dependência para Twitter4J em nossopom.xml:
org.twitter4j
twitter4j-stream
4.0.6
Para verificar se alguma nova versão da biblioteca foi lançada -track the releases here.
4. Configuração
A configuração do Twitter4J é fácil e pode ser feita de várias maneiras - por exemplo, em um arquivo de texto sem formatação ou em uma classe Java ou mesmo usando variáveis de ambiente.
Vejamos cada uma dessas formas, uma de cada vez.
4.1. Arquivo de Texto Simples
Podemos usar um arquivo de texto simples - denominadotwitter4j.properties - para armazenar nossos detalhes de configuração. Vejamos as propriedades que precisam ser fornecidas:
oauth.consumerKey = // your key
oauth.consumerSecret = // your secret
oauth.accessToken = // your token
oauth.accessTokenSecret = // your token secret
Todos esses atributos podem ser obtidos no console do Twitter Developer apósmake a new app.
4.2. Classe Java
Também podemos usar uma classeConfigurationBuilder para configurar o Twitter4J programaticamente em Java:
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("your consumer key")
.setOAuthConsumerSecret("your consumer secret")
.setOAuthAccessToken("your access token")
.setOAuthAccessTokenSecret("your access token secret");
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();
Observe que usaremos a instânciaTwitter na próxima seção - quando começarmos a buscar dados.
4.3. variáveis ambientais
Configurar através de variáveis de ambiente é outra opção que temos. Se fizermos isso, observe que precisaremos de um prefixotwitter4j em nossas variáveis:
$ export twitter4j.oauth.consumerKey = // your key
$ export twitter4j.oauth.consumerSecret = // your secret
$ export twitter4j.oauth.accessToken = // your access token
$ export twitter4j.oauth.accessTokenSecret = // your access token secret
5. Adicionar / recuperar dados de tweet em tempo real
Com um aplicativo totalmente configurado, podemos finalmente interagir com o Twitter.
Vejamos alguns exemplos.
5.1. Postar um tweet
Começaremos atualizando um tweet no Twitter:
public String createTweet(String tweet) throws TwitterException {
Twitter twitter = getTwitterinstance();
Status status = twitter.updateStatus("creating example API");
return status.getText();
}
Usandostatus.getText(),, podemos recuperar o tweet que acabamos de postar.
5.2. Obtenha a linha do tempo
Também podemos obter uma lista de tweets na linha do tempo do usuário:
public List getTimeLine() throws TwitterException {
Twitter twitter = getTwitterinstance();
return twitter.getHomeTimeline().stream()
.map(item -> item.getText())
.collect(Collectors.toList());
}
Usandotwitter.getHomeTimeline(),, obtemos todos os tweets postados pelo ID da conta atual.
5.3. Envie uma mensagem direta
Também é possível enviar e receber uma mensagem direta para os seguidores usando o Twitter4j:
public static String sendDirectMessage(String recipientName, String msg)
throws TwitterException {
Twitter twitter = getTwitterinstance();
DirectMessage message = twitter.sendDirectMessage(recipientName, msg);
return message.getText();
}
O métodosendDirectMessage leva dois parâmetros:
-
RecipientName: o nome de usuário do Twitter de um destinatário da mensagem
-
msg: conteúdo da mensagem
Se o destinatário não for encontrado, osendDirectMessage lançará uma exceção com o código de exceção150.
5.4. Pesquisar Tweets
Também podemos procurar tweets contendo algum texto. Fazendo isso, obteremos uma lista de tweets com o nome de usuário dos usuários.
Vamos ver como essa pesquisa pode ser realizada:
public static List searchtweets() throws TwitterException {
Twitter twitter = getTwitterinstance();
Query query = new Query("source:twitter4j example");
QueryResult result = twitter.search(query);
return result.getTweets().stream()
.map(item -> item.getText())
.collect(Collectors.toList());
}
Claramente, podemos iterar cada tweet recebido em umQueryResulte buscar dados relativos.
5.5. API de streaming
Twitter Streaming API é útil quando as atualizações são necessárias em tempo real; ele lida com a criação de thread e escuta os eventos.
Vamos criar um ouvinte que ouve atualizações de tweet de um usuário:
public static void streamFeed() {
StatusListener listener = new StatusListener() {
@Override
public void onException(Exception e) {
e.printStackTrace();
}
@Override
public void onDeletionNotice(StatusDeletionNotice arg) {
}
@Override
public void onScrubGeo(long userId, long upToStatusId) {
}
@Override
public void onStallWarning(StallWarning warning) {
}
@Override
public void onStatus(Status status) {
}
@Override
public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
}
};
TwitterStream twitterStream = new TwitterStreamFactory().getInstance();
twitterStream.addListener(listener);
twitterStream.sample();
}
Podemos colocar alguma instruçãoprintln() para verificar o fluxo de saída do tweet em todos os métodos. Todos os tweets têm metadados de localização associados a ele.
Observe que todos os dados de tweets buscados pela API estão no formato UTF-8 e, como o Twitter é uma plataforma multilíngue, alguns formatos de dados podem ficar irreconhecíveis com base em sua origem.
6. Conclusão
Este artigo foi uma introdução rápida, mas abrangente, ao uso do Twitter4J com Java.
A implementação dos exemplos mostradoscan be found on GitHub - este é um projeto baseado em Maven, portanto, deve ser fácil de importar e executar como está. The only change we need to do is to insert our own OAuth credentials.