node.js初心者がsocket.io&Twitter Streaming APIを使ってツイートを垂れ流すという、
socket.ioの学習にありがちなサンプルを試してみた。
全体の流れは
node.jsインストール
npm install express とか npm install ntwitter とか必要なモジュールをインストール
3. express -e exapp → cd exapp → npm install でexpressアプリのひな形作成
- 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>
- 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のサイト
ntwitterのgithub
https://github.com/AvianFlu/ntwitter