twitter4j - 从 Streaming API 访问推文信息

标签 twitter twitter4j

我的目标是收集包含“法国”和“德国”一词的所有推文,并收集相关元数据(例如,推文附加的地理坐标)。我知道此元数据可用,但我不知道如何使用我正在使用的 Java 库访问它:“twitter4j”。

好的,到目前为止我所掌握的内容取自 twitter4j 网站上的代码示例。它打印出包含我选择的关键字的所有推文,因为它们是由 Twitter 的 Streaming API 实时提供的。我在 TwitterStream 对象上调用过滤器方法,这提供了流。但我需要更多的控制。也就是说,我希望能够:

1) 将推文写入文件; 2)只打印前1000条推文; 3)访问附加到推文的其他元数据(过滤器方法仅打印出用户名和推文本身)。

这是我到目前为止的代码:

import twitter4j.FilterQuery;
import twitter4j.Status;
import twitter4j.StatusDeletionNotice;
import twitter4j.StatusListener;
import twitter4j.TwitterException;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.conf.ConfigurationBuilder;

public class Stream {
    public static void main(String[] args) throws TwitterException {

    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true);
    cb.setOAuthConsumerKey("bbb");
    cb.setOAuthConsumerSecret("bbb");
    cb.setOAuthAccessToken("bbb");
    cb.setOAuthAccessTokenSecret("bbb");

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

        public void onStatus(Status status) {
            System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
        }

        public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
            System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
        }

        public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
            System.out.println("Got track limitation notice:" + numberOfLimitedStatuses);
        }

        public void onScrubGeo(long userId, long upToStatusId) {
            System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
        }

        public void onException(Exception ex) {
            ex.printStackTrace();
        }
    };

    FilterQuery fq = new FilterQuery();
    String keywords[] = {"France", "Germany"};

    fq.track(keywords);

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

最佳答案

用新的眼光看待这个问题后,我意识到了解决方案(这是非常明显的)。编辑以下部分代码:

public void onStatus(Status status) {
        System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
    }

允许我访问其他元数据。例如,如果我想访问推文的日期,我只需添加以下内容:

System.out.println(status.getCreatedAt());

关于twitter4j - 从 Streaming API 访问推文信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9395999/

相关文章:

api - Twitter API限制

ios - Twitter 与 Twitter 应用程序共享并返回我的应用程序

java - Twitter4j 流 api 调用抛出类未找到异常

javascript - Facebook 和 Twitter 通过 iframe 共享

android - 在 Android 上的 Activity 中添加指向 Twitter 帐户的链接

python - 从 Twython 中的推文搜索获取屏幕名称

java - com.google.appengine.tools.development.agent.runtime.Runtime 类无法访问该类的成员

java - 如何实现 "you might also want to follow"

android - 如何使用 Android Studio 修复 twitter4j 中的 NoClassDefFoundError?

java - twitter4j 未找到身份验证挑战