!node tanabta 2012
ソースコード飛んじゃった;; ということで今は無きnode tanabataの紹介ページです。
>>
本物はこちら↓
http://inajob.c.node-ninja.com/nodetanabata
<<
ソースコードメモ
!!サーバサイド
思ったより短いでしょ?
>> code javascript
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes');
var app = module.exports = express.createServer();
var io = require('socket.io').listen(app);
io.set( "log level", 1 );
var ntwitter = require('ntwitter');
var twitter = new ntwitter({
consumer_key : 'XXXXX',
consumer_secret: 'XXXXXX',
access_token_key: 'XXXXXX',
access_token_secret:'XXXXXX'
});
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/nodetanabata', function(req,res){
console.log('##ACCESS');
routes.index(req,res);
});
app.listen(80, function(){
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});
io.on('connection', function(client){
for(var i=0; i < buf.length; i++){
client.emit('message',buf[i]);
}
});
var buf = [];
twitter.stream('statuses/filter', {'track': '#天の川にお願い'},function(stream){
try{
stream.on('data', function(data){
buf.push(data);
buf = buf.slice(-6);
console.log(data.text);
io.sockets.emit('message', data);
});
stream.on('end', function(response) {
// shut down
});
stream.on('error',function(e){
console.log("ERROR");
console.log(e);
});
}catch(e){
console.log(e);
}
});
<<
これでぜんぶ。簡単
!気になってる所
- エラーログを握りつぶしてる。
- expressを使ったけどページ1枚だしもっとシンプルに出来なかったか?
- ConsumerSecretなどを外だしにしたい (gitとかに入れにくい)
!メモ
-簡単でいいねー
-左から取ってきたものを右へ流すみたいなシステムは超簡単に書けるね。
-socket.ioのログについて http://d.hatena.ne.jp/stealthinu/20110829/p2
5643382
wiki
1371359565