#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 в режиме реального времени (хотя и примерный), поэтому, когда вы прекращаете обработку потока, вы пропустите все статусы, отправленные с момента остановки до повторного запуска обработки.
Я надеюсь, что это поможет.