1. 概述
在本文中,我们将研究如何在Java应用程序中使用Twitter4J与Twitter进行通信。
2. Twitter4J
Twitter4J是一个开源Java库,它提供了方便的API来访问Twitter API。
简而言之,以下是我们如何与Twitter API进行交互;我们可以:
- 发布推文
- 获取用户的时间线,包含最新推文列表
- 发送和接收直接消息
- 搜索推文及更多内容
这个库确保我们可以轻松地完成这些操作,并且还确保用户的安全和隐私-为此我们自然需要在我们的应用程序中配置OAuth凭据。
3. Maven依赖
我们需要首先在pom.xml中定义Twitter4J的依赖:
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-stream</artifactId>
<version>4.0.6</version>
</dependency>
4. 配置
配置Twitter4J很容易,并且可以通过多种方式完成-例如在纯文本文件或Java类中,甚至使用环境变量。
让我们逐一看一下这些方法。
4.1 纯文本文件
我们可以使用一个名为twitter4j.properties的纯文本文件来保存配置详细信息,让我们看看需要提供的属性:
oauth.consumerKey = // your key
oauth.consumerSecret = // your secret
oauth.accessToken = // your token
oauth.accessTokenSecret = // your token secret
创建新应用程序后,可以从Twitter开发者控制台获取所有这些属性。
4.2 Java类
我们还可以使用ConfigurationBuilder类以Java编程方式配置Twitter4J:
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();
请注意,我们将在下一节中使用Twitter实例-当我们开始获取数据时。
4.3 环境变量
通过环境变量进行配置是我们的另一种选择,如果这样做,请注意,变量中需要添加twitter4j前缀:
$ 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. 添加/检索实时推文数据
通过完全配置的应用程序,我们现在可以与Twitter进行交互。
让我们看几个例子。
5.1 发布推文
我们首先在Twitter上更新一条推文:
public String createTweet(String tweet) throws TwitterException {
Twitter twitter = getTwitterinstance();
Status status = twitter.updateStatus("creating tuyucheng API");
return status.getText();
}
通过使用status.getText(),我们可以检索刚刚发布的推文。
5.2 获取时间线
我们还可以从用户的时间线中获取推文列表:
public List<String> getTimeLine() throws TwitterException {
Twitter twitter = getTwitterinstance();
return twitter.getHomeTimeline().stream()
.map(item -> item.getText())
.collect(Collectors.toList());
}
通过使用twitter.getHomeTimeline(),我们可以获取当前帐户ID发布的所有推文。
5.3 发送直接消息
使用Twitter4j也可以向关注者发送和接收直接消息:
public static String sendDirectMessage(String recipientName, String msg) throws TwitterException {
Twitter twitter = getTwitterinstance();
DirectMessage message = twitter.sendDirectMessage(recipientName, msg);
return message.getText();
}
sendDirectMessage方法接收两个参数:
- RecipientName:消息接收者的Twitter用户名
- msg:消息内容
如果找不到收件人,sendDirectMessage将抛出异常,异常代码为150。
5.4 搜索推文
我们还可以搜索包含某些文本的推文,这样,我们将获得包含用户名的推文列表。
让我们看看如何执行这样的搜索:
public static List<String> searchtweets() throws TwitterException {
Twitter twitter = getTwitterinstance();
Query query = new Query("source:twitter4j tuyucheng");
QueryResult result = twitter.search(query);
return result.getTweets().stream()
.map(item -> item.getText())
.collect(Collectors.toList());
}
显然,我们可以遍历QueryResult中收到的每条推文并获取相关数据。
5.5 流API
当需要实时更新时,Twitter Streaming API很有用;它处理线程创建并监听事件。
让我们创建一个监听器来监听用户的推文更新:
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();
}
我们可以在所有方法中添加一些println()语句来检查输出推文流,所有推文都具有与其关联的位置元数据。
请注意,API获取的所有推文数据均为UTF-8格式,并且由于Twitter是一个多语言平台,因此某些数据格式可能无法根据其来源识别。
6. 总结
本文简要但全面地介绍了如何使用Java来使用Twitter4J。
Post Directory
