Twitter4J简介

2025/04/24

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。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章