Подсчитывать отфильтрованные статусы из Twitter

#java #twitter4j

#java #twitter4j

Вопрос:

Какой самый простой способ подсчитать количество отфильтрованных статусов, поступающих из потока Twitter? Я знаю, что могу фильтровать статусы с помощью FilterQuery следующим образом:

 FilterQuery fq = new FilterQuery();
    String[] array = { "twitter" };
    fq.track(array);

    twitterStream.filter(fq);
  

Но как бы я мог подсчитать количество статусов, которые приходят, содержащих слово twitter? Я перепробовал множество различных способов, которые практически завершились неудачей и привели только к отображению всех статусов. Я даже пытался проанализировать json, чтобы отфильтровать «текстовую» часть для подсчета, но это стало слишком запутанным и не сработало.

Комментарии:

1. Разве вы не ищете это? dev.twitter.com/docs/streaming-apis/parameters#count

2. Извините, мой вопрос был плохо сформулирован. Я не говорю о параметре count, но вместо этого я говорю о буквальном подсчете каждого поступающего твита. Например, я хочу запустить стример и попросить его сообщить мне, что с момента запуска стримера пришло 7 твитов или что-то еще с моим отфильтрованным словом в них.

Ответ №1:

Поскольку вы уже выполняете фильтрацию статусов, содержащих ‘twitter’, все, что вам нужно сделать, это увеличить a count в StatusListener#onStatus(Status) методе, например:

 final AtomicInteger count = new AtomicInteger();

StatusListener listener = new StatusListener() {
    @Override
    public void onStatus(Status status) {
        count.getAndIncrement();
    }

    // omitted...
}

twitterStream.addListener(listener);
twitterStream.filter(fq);

// wait (to allow statuses to be received) then halt the steam...

System.out.println("received "   count.get()   "statuses in total");
  

В качестве альтернативы вы могли бы создать CountingStatusListener , который предоставлял бы вам подсчет, когда вы заканчивали обработку потока.

Что касается вашего комментария:

Например, я хочу запустить стример и попросить его сообщить мне, что с момента запуска стримера пришло 7 твитов или что-то еще с моим отфильтрованным словом в них.

Вы, вероятно, уже знаете это, но streaming-api предоставляет просмотр статусов, проходящих через Twitter в режиме реального времени (хотя и примерный), поэтому, когда вы прекращаете обработку потока, вы пропустите все статусы, отправленные с момента остановки до повторного запуска обработки.

Я надеюсь, что это поможет.