2014-04-28 4 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

возможно дубликат [Как получить более 100 результатов, используя Twitter4j] (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, чтобы получить последние твиты с помощью данного набора ключевых слов. В вашем случае у вас есть только одно ключевое слово, которое является хэштегом, не так ли? Я отправил короткий пример кода для поиска твитов по ключевому слову с помощью 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"); 
    } 
    } 
Смежные вопросы