java - 使用 twitter4j 形成流,搜索具有特定主题标签的新 Twitter

标签 java twitter twitter4j

我需要使用 twitter4j 针对具有特定主题标签(假设为 #test)的所有新推文更新我的 Java 应用程序。由于避免在 Twitter REST API 上进行连续轮询,我将使用 Twitter Stream API。

运行此代码我期望:

  1. 运行代码
  2. 打开浏览器,转到 Twitter 并发布包含 #test 的推文
  3. 仅在我的应用上查看具有特定哈希码的推文的打印内容

但是..我在我的应用程序中没有看到任何内容..(查看编辑)

有人可以给我一些建议吗?

ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
  .setOAuthConsumerKey(CONSUMER_KEY)
  .setOAuthConsumerSecret(CONSUMER_SECRET)
  .setOAuthAccessToken(ACCESS_TOKEN)
  .setOAuthAccessTokenSecret(ACCESS_TOKEN_SECRET);

TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();

StatusListener listener = new StatusListener() {
    @Override
    public void onStatus(Status status) {
        System.out.println("@" + status.getUser().getScreenName() + " - " + status.getUser().getId() + " - " + status.getText());
    }
    @Override
    public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
        System.out.println("Post Deletado:" + statusDeletionNotice.getStatusId());
    }
    @Override
    public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
        System.err.println("Limitação:" + numberOfLimitedStatuses);
    }
    @Override
    public void onScrubGeo(long userId, long upToStatusId) {
        System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
    }
    @Override
    public void onStallWarning(StallWarning warning) {
        System.out.println("Got stall warning:" + warning);
    }
    @Override
    public void onException(Exception ex) {
        ex.printStackTrace();
    }
};

List<String> queries = new ArrayList<String>();
queries.add("#test");

twitterStream.addListener(listener);
twitterStream.firehose(20);

String[] trackQueries = (String[]) queries.toArray(new String[queries.size()]);

FilterQuery filterQuery = new FilterQuery();
twitterStream.filter(filterQuery.track(trackQueries));

编辑:

修复一些错误后,我正在 sys.out 中读取一些内容,但是......在一些错误之后,它似乎是随机的:

[Tue Jul 02 14:58:30 CEST 2013]Establishing connection.
[Tue Jul 02 14:58:30 CEST 2013]Establishing connection.
[Tue Jul 02 14:58:31 CEST 2013]Connection established.
[Tue Jul 02 14:58:31 CEST 2013]Receiving status stream.
[Tue Jul 02 14:58:31 CEST 2013]Connection established.
[Tue Jul 02 14:58:31 CEST 2013]Receiving status stream.
[Tue Jul 02 14:58:31 CEST 2013]Stream closed.
[Tue Jul 02 14:58:31 CEST 2013]Stream closed.
[Tue Jul 02 14:58:31 CEST 2013]Waiting for 250 milliseconds
Stream closed.
Relevant discussions can be found on the Internet at:
    http://www.google.co.jp/search?q=a8fd061d or
    http://www.google.co.jp/search?q=00070a0c
TwitterException{exceptionCode=[a8fd061d-00070a0c a8fd061d-0007099d], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.3}
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:199)
    at twitter4j.StatusStreamImpl.next(StatusStreamImpl.java:57)
    at twitter4j.TwitterStreamImpl$TwitterStreamConsumer.run(TwitterStreamImpl.java:478)
Caused by: java.io.IOException: the end of the stream has been reached
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:88)
    ... 2 more
Stream closed.
Relevant discussions can be found on the Internet at:
    http://www.google.co.jp/search?q=a8fd061d or
    http://www.google.co.jp/search?q=00070a0c
TwitterException{exceptionCode=[a8fd061d-00070a0c a8fd061d-0007099d], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.3}
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:199)
    at twitter4j.StatusStreamImpl.next(StatusStreamImpl.java:57)
    at twitter4j.TwitterStreamImpl$TwitterStreamConsumer.run(TwitterStreamImpl.java:478)
Caused by: java.io.IOException: the end of the stream has been reached
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:88)
    ... 2 more
[Tue Jul 02 14:58:31 CEST 2013]Unhandled event: {"disconnect":{"code":7,"stream_name":"urbanspirit5-statuses1734930","reason":"admin logout"}}
[Tue Jul 02 14:58:32 CEST 2013]Establishing connection.
[Tue Jul 02 14:58:33 CEST 2013]Connection established.
[Tue Jul 02 14:58:33 CEST 2013]Receiving status stream.

然后是一些像这样的随机推文:

@markinhos_jm - 300044892 - CRAZY PARTY AGUARDEM!!!
@bindibba7 - 511548205 - ??????? .. ??????? = ?? ??? ????
@Tamirmdty - 1521605059 - Salah ngetik
@PAOLOves_you - 222755754 - Hirap ah. Text, Chat FB at Tweet? SIYET! #MedyoAZARitu
@agokichi_mmmm - 793252368 - ???DVD??????

最佳答案

仅通过经销商向选定的公司授予对 Twitter Firehose 的访问权限。因此,除非您是这些公司之一,否则您应该使用 sample() 而不是 firehose。不过您应该会看到一些日志。您确定您的记录器设置正确吗?

编辑:阅读 this section文档并添加有效的 twitter4j.properties 文件。请注意,您必须注册 Twitter 才能获取访问 token 。一旦您拥有 token 并填充了配置文件,您就可以将其包含在类路径中。

关于java - 使用 twitter4j 形成流,搜索具有特定主题标签的新 Twitter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17424927/

相关文章:

java - 需要有关流程的帮助

java - 尝试在空对象引用上调用 ScrollView.removeAllViews()

css - 它是如何完成的 - Tweet-Button 计数器的缩放

java - 如何创建自定义 JUnit5 扩展

javascript - 将 html 嵌入到另一个站点的技巧

iphone - 使用 ObjectiveC/iPhone 中的 TwitPic API

java - 推特搜索 API 始终返回空地理位置

java - 是否可以将推文存储在 csv 文件中?

java - 根据两个条件 twitter API 过滤推文

java - Spring Boot API返回不带标签的json