2013-10-18

socket.ioとTwitter StreamingAPIでツイート垂れ流しタイム

node.js初心者がsocket.io&Twitter Streaming APIを使ってツイートを垂れ流すという、

socket.ioの学習にありがちなサンプルを試してみた。

 

全体の流れは

  1. node.jsインストール

  2. npm install express とか npm install ntwitter とか必要なモジュールをインストール

3. express -e exapp → cd exapp → npm install でexpressアプリのひな形作成

  1. exapp/views/index.ejs, exapp/app.js を下記のように書き換え

 

app.js

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var app = express();
var twitter = require('ntwitter');

// all environments
app.set('port', 8888);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

var server = http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

var io = require("socket.io").listen(server);

app.get('/', function(req, res) {
    var tw = new twitter({
      consumer_key: 'Input your consumer key',
      consumer_secret: 'Input your consumer secret',
      access_token_key: 'Input your access token',
      access_token_secret: 'Input your access token secret'
    });

    io.sockets.on("connection", function(socket) {
        tw.stream('statuses/filter', {'track' : req.query.keyword }, function(stream) {
            stream.on("data", function(data) {
                socket.emit("stream", data);
            });

            stream.on("end", function(res) {
                console.log(res);
            });

            stream.on("destroy", function(res) {
                console.log(res);
            });

        });
    });

    res.render('index', {});
});
app.get('/users', user.list);

 

views/index.ejs

<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:8888');
  socket.on('stream', function (data) {
    $(".TwitterList").append($("<li>").text(data.text));
  });
</script>
</head>
<body>
    <ul class="TwitterList">
    </ul>
</body>
</html>

 

  1. node app.js でhttp://localhost:8888/?keyword=freedomみたいな感じでアクセス

 

ハマることはあんまり無いかな。

そもそも100行以下だし…。

でも出来る事は衝撃的!

 

次は簡単なchatアプリを作ってみます。

 

参考サイトはこちら

http://d.hatena.ne.jp/replication/20120318/1332044327

http://d.hatena.ne.jp/miruto824/20110608/1307526558

 

node.jsの基礎はこちらがおすすめ

http://libro.tuyano.com/index2?id=1115003

 

socket.ioのサイト

http://socket.io/#how-to-use

 

ntwitterのgithub

https://github.com/AvianFlu/ntwitter

 

 

このエントリーをはてなブックマークに追加