title: twitter4j - access tweet information from Streaming API
body: <p>My goal is to collect all tweets containing the words "France" and "Germany" and to also collect associated metadata (e.g., the geo coordinates attached to the tweet). I know that this metadata is available, but I can't figure out how to access it with the Java library I'm using : "twitter4j".</p>
  
  <p>Ok, so what I have so far is taken from code samples on the twitter4j site. It prints out all tweets containing my chosen keywords, as they are provided in real-time by Twitter's Streaming API. I call the filter method on my TwitterStream object, and this provides the stream. But I need more control. Namely, I would like to be able to:</p>
  
  <p>1) write the tweets to a file;
  2) only print out the first 1000 tweets;
  3) access other metadata attached to the tweet (the filter method just prints out the username and the tweet itself).</p>
  
  <p>Here is the code I have so far:</p>
  
  <pre><code>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);      
  }
  }
  </code></pre>