【问题标题】:how to store data received from Twitter into MongoDb?如何将从 Twitter 接收到的数据存储到 MongoDb 中?
【发布时间】:2017-08-08 23:13:01
【问题描述】:

我正在从 twitter 检索数据并将其存储在 List 中。尝试将其存储到 MongoDb 时,我收到了错误消息。 “主”线程 twitter4j.ResponseListImpl 中的异常无法转换为 com.mongodb.BasicDBObject

import java.net.UnknownHostException;
import java.util.List;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;

public class SampleTwitter_data {
    public static void main(String[] args) throws TwitterException, UnknownHostException, MongoException {
    ConfigurationBuilder cofigurationBuilder =new ConfigurationBuilder();
    cofigurationBuilder.setDebugEnabled(true)
        .setOAuthConsumerKey("----------")
        .setOAuthConsumerSecret("----------")
        .setOAuthAccessToken("----------")
        .setOAuthAccessTokenSecret("----------");

     /**** Connect to MongoDB ****/
    Mongo mongo = new Mongo("localhost", 27017);


    /**** Get database ****/
    // if database doesn't exists, MongoDB will create it for you
    DB db = mongo.getDB("mydb");

    /**** Get collection / table from 'sample' ****/
    // if collection doesn't exists, MongoDB will create it for you
    DBCollection table = db.getCollection("sample");

    /**** Getting Data From Twitter time line ****/
    TwitterFactory tf = new TwitterFactory(cofigurationBuilder.build());
    twitter4j.Twitter twitter=tf.getInstance();
      ResponseList<Status> status= twitter.getHomeTimeline();
      for(Status s:status)
      {
          /**** here i'm getting error****/

          BasicDBObject document = new BasicDBObject();
          document=(BasicDBObject) status;
            table.insert(document);

            /**** just to make sure that i'm retrieving data from Twitter ****/
     System.out.println(s.getId()+s.getUser().getName()+"      "+s.getText());

      }
    }

}

【问题讨论】:

    标签: java mongodb twitter4j


    【解决方案1】:

    来自 Twitter4j 的Status 不是 Json,你应该先转换它。

    在您的cofigurationBuilder 上,您必须将 JSONStorEnabled 设置为 true

            cb.setDebugEnabled(true).setOAuthConsumerKey(consumer_key")
                    .setOAuthConsumerSecret("consumer_key_secret")
                    .setOAuthAccessToken("access_token")
                    .setOAuthAccessTokenSecret("access_token_secret")
                    .setJSONStoreEnabled(true);
    

    并插入

     BasicDBObject document = new BasicDBObject();
     document=(BasicDBObject) status;
    

    你需要从 status 创建 Json 并用 mongo 解析它

                    String json = TwitterObjectFactory.getRawJSON(status);
                    DBObject dbObject = (DBObject) JSON.parse(json);
                    collection.insert(dbObject);
    

    【讨论】:

    • 编辑configurationBuilder 后出现错误BasicBSONList 只能使用数字键,不能使用:[_id]
    • String json = TwitterObjectFactory.getRawJSON(status); DBObject dbObject = (DBObject) JSON.parse(json); collection.insert(dbObject); _here 插入集合时出现错误。
    • collection 是一个 DBCollection ,你必须初始化它。看这个页面coolprof.wordpress.com/2014/11/19/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2018-04-15
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多