1. Overview
1.概述。
In this article, we will have a look at using Twitter4J in a Java application to communicate with Twitter.
在这篇文章中,我们将看看如何在Java应用程序中使用Twitter4J来与Twitter通信。
2. Twitter4J
2.Twitter4J
Twitter4J is an open source Java library, which provides a convenient API for accessing the Twitter API.
Twitter4J是一个开源的Java库,它为访问Twitter API提供了方便的API。
Simply put, here’s how we can interact with the Twitter API; we can:
简单地说,这里我们可以与Twitter的API进行互动;我们可以。
- Post a tweet
- Get timeline of a user, with a list of latest tweets
- Send and receive direct messages
- Search for tweets and much more
This library ensures that we can easily do these operations, and it also ensures the security and privacy of a user – for which we naturally need to have OAuth credentials configured in our app.
这个库确保我们可以很容易地进行这些操作,它也确保了用户的安全和隐私–为此我们自然需要在我们的应用程序中配置OAuth凭证。
3. Maven Dependencies
3.Maven的依赖性。
We need to start by defining the dependency for Twitter4J in our pom.xml:
我们需要先在pom.xml中定义Twitter4J的依赖关系。
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-stream</artifactId>
<version>4.0.6</version>
</dependency>
To check if any new version of the library has been released – track the releases here.
要检查库的任何新版本是否已经发布–跟踪这里的发布情况。
4. Configuration
4.配置。
Configuring Twitter4J is easy and can be done in various ways – for example in a plain text file or a Java class or even using environment variables.
配置Twitter4J很简单,可以通过各种方式进行–例如在一个纯文本文件或一个Java类中,甚至使用环境变量。
Let’s look at each of these ways, one at a time.
让我们逐一看一下这些方式。
4.1. Plain Text File
4.1.纯文本文件。
We can use a plain text file – named twitter4j.properties – to hold our configuration details. Let’s look at the properties which need to be provided:
我们可以使用一个纯文本文件–名为twitter4j.properties–来保存我们的配置细节。让我们来看看需要提供的属性。
oauth.consumerKey = // your key
oauth.consumerSecret = // your secret
oauth.accessToken = // your token
oauth.accessTokenSecret = // your token secret
All these attributes can be obtained from Twitter Developer console after you make a new app.
所有这些属性都可以在你制作一个新的应用程序之后从Twitter开发者控制台获得。
4.2. Java Class
4.2. Java类
We can also use a ConfigurationBuilder class to configure Twitter4J programmatically in 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();
Note that we’ll be using the Twitter instance in next section – when we start to fetch data.
注意,我们将在下一节使用Twitter实例–当我们开始获取数据时。
4.3. Environment Variables
4.3.环境变量。
Configuring through environment variables is another choice we have. If we do that, note that we’ll need a twitter4j prefix in our variables:
通过环境变量进行配置是我们的另一个选择。如果我们这样做,请注意我们的变量中需要有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. Adding / Retrieving Real-Time Tweet Data
5.添加/检索实时推特数据。
With a fully configured application, we can finally interact with Twitter.
有了一个完全配置好的应用程序,我们终于可以与Twitter互动了。
Let’s look at few examples.
让我们看看几个例子。
5.1. Post a Tweet
5.1.发布推文。
We’ll start by updating a tweet on Twitter:
我们先在推特上更新一条推文。
public String createTweet(String tweet) throws TwitterException {
Twitter twitter = getTwitterinstance();
Status status = twitter.updateStatus("creating baeldung API");
return status.getText();
}
By using status.getText(), we can retrieve the tweet just posted.
通过使用status.getText(),我们可以检索到刚刚发布的tweet。
5.2. Get the Timeline
5.2.获取时间线。
We can also fetch a list of tweets from the user’s timeline:
我们还可以从用户的时间轴上获取推文列表。
public List<String> getTimeLine() throws TwitterException {
Twitter twitter = getTwitterinstance();
return twitter.getHomeTimeline().stream()
.map(item -> item.getText())
.collect(Collectors.toList());
}
By using twitter.getHomeTimeline(), we get all tweets posted by the current account ID.
通过使用twitter.getHomeTimeline(),我们得到了当前账户ID发布的所有推文。
5.3. Send a Direct Message
5.3.发送直接信息。
Sending and receiving a direct message to followers is also possible using the Twitter4j:
使用Twitter4j也可以向追随者发送和接收直接信息。
public static String sendDirectMessage(String recipientName, String msg)
throws TwitterException {
Twitter twitter = getTwitterinstance();
DirectMessage message = twitter.sendDirectMessage(recipientName, msg);
return message.getText();
}
The sendDirectMessage method takes two parameters:
sendDirectMessage方法需要两个参数。
- RecipientName: the twitter username of a message recipient
- msg: message content
If recipient will not be found, the sendDirectMessage will throw an exception with exception code 150.
如果找不到收件人,sendDirectMessage将抛出一个异常代码150。
5.4. Search for Tweets
5.4.搜索推文</strong
We can also search for tweets containing some text. By doing this, we’ll get a list of tweets with the username of users.
我们还可以搜索包含一些文字的推文。通过这样做,我们会得到一个带有用户用户名的推文列表。
Let’s see how such a search can be performed:
让我们看看如何进行这样的搜索。
public static List<String> searchtweets() throws TwitterException {
Twitter twitter = getTwitterinstance();
Query query = new Query("source:twitter4j baeldung");
QueryResult result = twitter.search(query);
return result.getTweets().stream()
.map(item -> item.getText())
.collect(Collectors.toList());
}
Clearly, we can iterate over each tweet received in a QueryResult and fetch relative data.
显然,我们可以在QueryResult中迭代收到的每条tweet,并获取相对数据。
5.5. The Streaming API
5.5.流媒体API</strong
Twitter Streaming API is useful when updates are required in real-time; it handles thread creation and listens to events.
Twitter Streaming API在需要实时更新时非常有用;它可以处理线程创建和监听事件。
Let’s create a listener which listens to tweet updates from a user:
让我们创建一个监听器,监听来自用户的推特更新。
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();
}
We can put some println() statement to check the output tweet stream in all of the methods. All tweets have location metadata associated with it.
我们可以在所有的方法中放入一些println()语句来检查输出的tweet流。所有推文都有与之相关的位置元数据。
Please note that all the tweets data fetched by the API are in the UTF-8 format and since Twitter is a multi-language platform, some data format may be unrecognizable based upon its origin.
请注意,由API获取的所有推文数据都是UTF-8格式,由于Twitter是一个多语言平台,一些数据格式可能根据其来源而无法识别。
6. Conclusion
6.结论。
This article was a quick but comprehensive introduction to using Twitter4J with Java.
这篇文章是对用Java使用Twitter4J的快速但全面的介绍。
The implementation of shown examples can be found on GitHub – this is a Maven based project, so it should be easy to import and run as it is. The only change we need to do is to insert our own OAuth credentials.
所示示例的实现可以在GitHub上找到 – 这是一个基于Maven的项目,所以应该很容易导入并按原样运行。我们需要做的唯一改变是插入我们自己的OAuth凭证。