Help us understand the problem. What is going on with this article?

Node.js + StreamingAPIで取得したTweetをMongoDBに流し込む

More than 5 years have passed since last update.

前々からやってるTweet取得をMongoDBに流し込みます。
モジュールはMongooseを使います

http://mongoosejs.com/

mongoose

Node.jsでMongoDBを使うときに使うモジュールです。MongoDB公式モジュールよりも人気があります。

Mongooseを使ってNode.jsとMongoDBの接続サンプル

とりあえずミニマムっぽいものを書いてみます。

$ npm install mongoose
mongoose.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/n0bisuke');

var Project = mongoose.model('Project', { name: String });

var project = new Project({ name: 'ligblog' });
project.save(function (err) {
  if (err) //失敗時
  console.log('保存成功');
});

QuickStartを参考にして
http://mongoosejs.com/docs/guide.html

mongoose.js
var DB_NAME = 'myapp';

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/'+DB_NAME);

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
  console.log('connection success');
});

var Schema   = mongoose.Schema;

var TwitterSchema = new Schema({
    body:  {
        text: String,
        url: String,
        image: String,
        location: {
            lat: String,
            lon: String
        }
    },
    user: {
        twitter_id: String,
        name: String,
        screen_name: String,
        description: String,
        images: String,
        location: {
            lat: String,
            lon: String
        }
    },
    create_at: { type: Date, default: Date.now }
});

mongoose.model('TwModel', TwitterSchema);
var TwModel = mongoose.model('TwModel');
var twmodel = new TwModel();

twmodel.user.name = 'n0bisuke';
twmodel.save(function (err, data) {
  if (err) return console.error(err);
  console.log(data);
});

実行

$ node mongoose.js
connection success
{ __v: 0,
  _id: 547c5e89993ef9e1cd5f7c39,
  create_at: Mon Dec 01 2014 21:26:49 GMT+0900 (JST),
  user: { name: 'n0bisuke', location: {} },
  body: { location: {} } }

TwitterStreamingAPIから流し込み

例によって、サンプルを試している感じなのでファイル分けとかは無しです。苦笑

mongoose.js
var DB_NAME = 'myapp';
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/'+DB_NAME);

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
  console.log('connection success');
});

var Schema   = mongoose.Schema;

var TwitterSchema = new Schema({
    content:  {
        text: String,
        url: String,
        image: String,
        location: {
            lat: String,
            lon: String
        }
    },
    user: {
        twitter_id: String,
        name: String,
        screen_name: String,
        description: String,
        images: String,
        location: {
            lat: String,
            lon: String
        }
    },
    create_at: { type: Date, default: Date.now }
});

mongoose.model('TwModel', TwitterSchema);

/*twitter設定*/
var twitter = require('twitter');

var twit = new twitter({
  consumer_key: 'xx',
  consumer_secret: 'xx',
  access_token_key: 'xx',
  access_token_secret: 'xx'
});

/**/

var TwModel = mongoose.model('TwModel');
var keyword = process.argv[2]; //第一引数
var option = {'track': keyword};

console.log(keyword+'を含むツイートを取得します。');

twit.stream('statuses/filter', option, function(stream) {
    stream.on('data', function (data){
        if(data.lang === 'ja'){

            var twmodel = new TwModel();
            twmodel.content = {
                text: data.text
            };

            twmodel.user = {
                screen_name: data.user.screen_name
            };

            twmodel.save(function (err, data) {
              if (err) return console.error(err);
              console.log(data);
            });

        }
  });
});

同じように実行してみます。tweetを取得するたびにMongoDBに流し込んでくれます。

MongoShellで確認するとちゃんと保存されています。

n0bisuke
プロトタイピング専門スクール「プロトアウトスタジオ」で教えたりしてます。 プロフ -> https://dotstud.io/members/n0bisuke
https://protoout.studio
dotstudio
全ての人がモノづくりを楽しむ世界を目指して活動しています。
https://dotstud.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away