Twitter4j Search 使用

来源:互联网 发布:林建岳王祖贤 知乎 编辑:程序博客网 时间:2024/04/28 11:24
package Twitter;import twitter4j.*;import twitter4j.Twitter;import twitter4j.conf.ConfigurationBuilder;import twitter4j.Query;import twitter4j.QueryResult;import twitter4j.json.DataObjectFactory;//import twitter4j.Tweet;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBObject;import com.mongodb.Mongo;import java.util.Iterator;import java.util.List;import java.util.ArrayList;import com.mongodb.util.JSON;/** * <p>This is a code example of Twitter4J Streaming API - sample method support.<br> * Usage: java twitter4j.examples.PrintSampleStream<br> * </p> * * @author Yusuke Yamamoto - yusuke at mac.com */public final class TwitterSearch {    /**     * Main entry of this application.     *     * @param args     */public DBCollection collection;public Mongo mongo;public int count = 1;public void LinkMongodb() throws Exception {/* * Link Mongodb  * build a data named FourS2 * build a collection named Foursquare *   */mongo = new Mongo("localhost", 27017);    DB db = mongo.getDB("TwitterMe");    collection = db.getCollection("DreamD");    System.out.println("Link Mongodb!");}    public static void main(String[] args) throws TwitterException {        final TwitterSearch pr = new TwitterSearch();        try {    pr.LinkMongodb();    }  catch (Exception e) {e.printStackTrace();}          ConfigurationBuilder cb = new ConfigurationBuilder();     cb.setDebugEnabled(true)       .setOAuthConsumerKey("7ZVgfKiOvBDcDFpytRWSA")       .setOAuthConsumerSecret("JmeJVeym78arzmGthrDUshQyhkq6nWA9tWLUKxc")       .setOAuthAccessToken("321341780-Zy7LptVYBZBVvAeQ5GFJ4aKFw8sdqhWBnvA3pDuO")       .setOAuthAccessTokenSecret("foi8FnQCeN0J5cdwad05Q6d7dbytFayQn1ZOvmhF6Qc");     cb.setJSONStoreEnabled(true);          //TwitterStreamFactory tf = new TwitterStreamFactory(cb.build());     TwitterFactory tf = new TwitterFactory(cb.build());     //TwitterStream twitterStream = tf.getInstance();     Twitter twitter = tf.getInstance();          Query q = new Query("BarackObama");          QueryResult result = twitter.search(q);     List<Status> tweets = result.getTweets();     for (Status tweet : tweets) {          //System.out.println(tweet);     String str = DataObjectFactory.getRawJSON(tweet);     System.out.println(str);     try {            DBObject dbObject =(DBObject)JSON.parse(str);            pr.collection.save(dbObject);            } catch (Exception e) {    e.printStackTrace();    }      }     /*Paging paging = new Paging(15, 200);     List<Status> statuses = twitter.getUserTimeline("BarackObama", paging);          Iterator it=statuses.iterator();        while(it.hasNext())        {          Status value=(Status)it.next();          String str = DataObjectFactory.getRawJSON(value);          try {          DBObject dbObject =(DBObject)JSON.parse(str);          pr.collection.save(dbObject);          } catch (Exception e) {  e.printStackTrace();  }           System.out.println(str);        }  */        pr.mongo.close();         }   }


这个search的方法更宽泛些,也就是一个tweet的数据中凡是有的都可以作为query中的string去搜索。

但我仅仅可以拿到15个tweets,不知道为什么,网上的方法试了下,都没有达到要求。

研究twitter4j这段时间,感觉抓取twitter的数据主要就是三种方法:

1 streaming

2 timeline

3 query

如果要看一段时间内twitter的热点是什么,可以放入关键字用streaming去抓取,这个很快,一天大概就有100万条。

如果要抓某一个用户的数据,那么可以用timeline的方法。但是只有200条。

如果需要抓key word相关的所有tweet就用query了。query跟streaming相似,

但搜索的更广泛,同样也有缺陷。返回的结果太少。

twitter为什么限制这么多呢!烦人啊!


原创粉丝点击