对于我目前正在处理的项目,我需要从一个国家/地区的流中收集推文。 虽然Twitter4j流API允许按语言过滤,但结果不够准确。所以我想通过检查推文的country属性是否填充来在过滤器顶部放置一个过滤器。当我检查是否有值时,这可以正常工作:
if(status.getPlace().getCountry() != null) {
System.out.println("User: " + status.getUser().getName());
System.out.println("Text: : " + status.getText());
System.out.println("Country: " + status.getPlace().getCountry());
System.out.println("Language: " + status.getLang());
}
}
TwitterStream ts = new TwitterStreamFactory(cb.build()).getInstance();
ts.addListener(listener);
FilterQuery filter = new FilterQuery();
String[] language = {"country"};
String[] keywords = {"some keywords"};
filter.track(keywords);
filter.language(language);
ts.filter(filter);
但如果我检查某个国家,例如德国我没有收到任何推文:
if(status.getPlace().getCountry() != "germany") {
System.out.println("User: " + status.getUser().getName());
System.out.println("Text: : " + status.getText());
System.out.println("Country: " + status.getPlace().getCountry());
System.out.println("Language: " + status.getLang());
}
}
如果有人可以帮助我,那将会很棒。
答案 0 :(得分:0)
filter.track(keywords);
filter.language(language);
请注意,上述代码的含义为track(keywords)
或language(language)
。
这不符合逻辑。
如果您只需要来自一个国家和某些关键字的推文,请移除filter.language(language)
并在获得状态后查看该国家/地区。
if(status.getPlace().getCountry().equalsIgnoreCase("germany")) {}
//字符串比较
如果德国没有人发布你指定过滤器的推文,你就不会收到来自德国的推文。