«1. Обзор

В этой статье мы рассмотрим использование Twitter4J в Java-приложении для связи с Twitter.

2. Twitter4J

Twitter4J — это библиотека Java с открытым исходным кодом, которая предоставляет удобный API для доступа к Twitter API.

Проще говоря, вот как мы можем взаимодействовать с Twitter API; мы можем:

    Опубликовать твит Получить временную шкалу пользователя со списком последних твитов Отправлять и получать прямые сообщения Искать твиты и многое другое

Эта библиотека гарантирует, что мы можем легко выполнять эти операции, а также гарантирует безопасность и конфиденциальность пользователя, для чего нам, естественно, необходимо настроить учетные данные OAuth в нашем приложении.

3. Зависимости Maven

Нам нужно начать с определения зависимости для Twitter4J в нашем pom.xml:

<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 для программной настройки Twitter4J на 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();

Обратите внимание, что мы будем использовать экземпляр 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. Опубликовать твит

Мы начнем с обновления твита в Твиттере:

public String createTweet(String tweet) throws TwitterException {
    Twitter twitter = getTwitterinstance();
    Status status = twitter.updateStatus("creating baeldung 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(), мы получаем все твиты, опубликованные с идентификатором текущей учетной записи.

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: message content

Если получатель не будет найден, sendDirectMessage выдаст исключение с кодом исключения 150.

5.4. Поиск твитов

Мы также можем искать твиты, содержащие некоторый текст. Сделав это, мы получим список твитов с именами пользователей.

Давайте посмотрим, как можно выполнить такой поиск:

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());
}

Понятно, что мы можем перебирать каждый твит, полученный в QueryResult, и извлекать соответствующие данные.

5.5. Streaming 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. Заключение

Эта статья была кратким, но исчерпывающим введением в использование Twitter4J с Java.

Реализацию показанных примеров можно найти на GitHub — это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть. Единственное изменение, которое нам нужно сделать, это вставить наши собственные учетные данные OAuth.