2014-04-28 54 views
1

特定主題標籤的微博我能夠提取使用搜索方法特定主題標籤的鳴叫像下面提取使用twitter4j

 twitter4j.Twitter twitter = TwitterFactory.getSingleton(); 
     Query query = new Query("ipl7"); 
     QueryResult result = twitter.search(query); 
     for (Status status : result.getTweets()) { 
      System.out.println("@" + status.getUser().getScreenName() + " : " + status.getText() + " : " + status.getGeoLocation()); 
     } 

但是,我用上面的方法鳴叫的數量非常有限。我應該改變什麼來獲取特定標籤的所有推文?

+0

可能重複的[如何使用Twitter4j檢索多於100個結果](http://stackoverflow.com/questions/18800610/how-to-retrieve -more-than-100-results-using-twitter4j) – Jonathan

回答

0

使用count(int resultCount)方法:

Query query = new Query("ipl7"); 
    query.count(100); //100 is the max allowed 
    QueryResult result = twitter.search(query); 
+0

如果我使用方法maxId(long maxId)或sinceId(long sinceId),我可以獲得更多推文嗎? – yAsH

+0

不需要傳遞'#ipl7'作爲查詢嗎? –

3

您可以使用流式API由一組給定的關鍵字,以獲得最新的鳴叫。在你的情況下,你只有一個關鍵字是一個hashtag,對嗎?我發佈了一個簡短的示例代碼,用Streaming API通過關鍵字搜索推文。您可以將Streaming和Search API用於不同的目的。大多數情況下,您可以在有限的時間內使用Search API進行主機推文。它允許你給一個日期間隔。但是,您可以使用Streamin API將最近發佈的推文捕獲爲包含您提供的關鍵字的推文流。

例straming以下代碼:

private static void GetTweetStreamForKeywords() 
     { 
     TwitterStream twitterStream = new TwitterStreamFactory(config).getInstance(); 

     StatusListener statusListener = new StatusListener() { 

     @Override 
     public void onStatus(Status status) { 
      // The main section that you get the tweet. You can access it by status object. 
      // You can save it in a database table. 
     } 


       @Override 
       public void onDeletionNotice(StatusDeletionNotice sdn) { 
        throw new UnsupportedOperationException("Not supported yet."); 
       } 

       @Override 
       public void onTrackLimitationNotice(int i) { 
        throw new UnsupportedOperationException("Not supported yet."); 
       } 

       @Override 
       public void onScrubGeo(long l, long l1) { 
        throw new UnsupportedOperationException("Not supported yet."); 
       } 

       @Override 
       public void onStallWarning(StallWarning sw) { 
        throw new UnsupportedOperationException("Not supported yet."); 
       } 

       @Override 
       public void onException(Exception ex) { 
        logWriter.WriteErrorLog(ex, "onException()"); 
       } 
      }; 

      FilterQuery fq = new FilterQuery();   

      String keywords[] = {"sport", "politics", "health"}; 

      fq.track(keywords);   

      twitterStream.addListener(statusListener); 
      twitterStream.filter(fq);   
     } 
1
package twiter; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.List; 
import twitter4j.GeoLocation; 
import twitter4j.Query; 
import twitter4j.QueryResult; 
import twitter4j.Status; 
import twitter4j.Twitter; 
import twitter4j.TwitterException; 
import twitter4j.TwitterFactory; 
import twitter4j.conf.ConfigurationBuilder; 

public class tweets 
{ 
    public static void main(String[] args) throws Exception 
    { 

    ConfigurationBuilder cb = new ConfigurationBuilder(); 
    cb.setDebugEnabled(true) 
     .setOAuthConsumerKey("") 
     .setOAuthConsumerSecret("") 
     .setOAuthAccessToken("") 
     .setOAuthAccessTokenSecret(""); 
    Twitter twitter = new TwitterFactory(cb.build()).getInstance(); 
    Query query = new Query("#world"); 
    int numberOfTweets = 5000; 
    long lastID = Long.MAX_VALUE; 
    ArrayList<Status> tweets = new ArrayList<Status>(); 
    while (tweets.size() < numberOfTweets) { 
     if (numberOfTweets - tweets.size() > 100) 
     query.setCount(100); 
     else 
     query.setCount(numberOfTweets - tweets.size()); 
     try { 
     QueryResult result = twitter.search(query); 
     tweets.addAll(result.getTweets()); 
     System.out.println("Gathered " + tweets.size() + " tweets"+"\n"); 
     for (Status t: tweets) 
      if(t.getId() < lastID) 
       lastID = t.getId(); 

     } 

     catch (TwitterException te) { 
     System.out.println("Couldn't connect: " + te); 
     }; 
     query.setMaxId(lastID-1); 
    } 

    for (int i = 0; i < tweets.size(); i++) { 
     Status t = (Status) tweets.get(i); 

    // GeoLocation loc = t.getGeoLocation(); 

     String user = t.getUser().getScreenName(); 
     String msg = t.getText(); 
     //String time = ""; 
     //if (loc!=null) { 
     //Double lat = t.getGeoLocation().getLatitude(); 
     //Double lon = t.getGeoLocation().getLongitude();*/ 
     System.out. println(i + " USER: " + user + " wrote: " + msg + "\n"); 
     } 
     //else 
     //System.out.println(i + " USER: " + user + " wrote: " + msg+"\n"); 
    } 
    }