このsocket.ioとTwitter Streaming APIを組み合わせてAKB48さんのワードが入ったツイートを眺めるアプリを作ってみます。
システム構成
- Node 0.6.7
- socket.io 0.8.7
- express 2.5.5
- Twitter-Node(SSL対応版)
Expressをインストールします。
$ sudo npm install express -g
$
Expressで雛形作成を作成します。
$ express tweets_akb48
$ cd tweets_akb48 && npm install
$
socket.ioをインストールします。
$ npm install socket.io
socket.io@0.8.7 ./node_modules/socket.io
├── policyfile@0.0.4
├── redis@0.6.7
└── socket.io-client@0.8.7
$
Twitter-Nodeの最新版をgithubから取得します。
$ cd node_modules
$ git clone git://github.com/technoweenie/twitter-node.git
$
以上で環境が整いました。
app.jsを編集します。ツイッターのアカウントとパスワードを用意しましょう。
/**
* Module dependencies.
*/
var express = require('express')
, app = express.createServer()
, routes = require('./routes')
, io = require('socket.io').listen(app)
, util = require('util')
, TwitterNode = require('twitter-node').TwitterNode
;
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(require('stylus').middleware({ src: __dirname + '/public' }));
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('/', routes.index);
app.listen(3000);
io.sockets.on('connection', function(socket) {
var twitter = new TwitterNode({
port: 443,
user: 'ツイッターのアカウント',
password: 'パスワード',
track: ['AKB']
});
twitter.addListener('tweet', function(tweet) {
socket.emit('message',tweet.text);
}).stream();
});
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
views/index.jadeを編集します。
#tweets
全部消して一行だけにします。
views/layout.jadeを編集します。
!!! 5
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
script(type='text/javascript', src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js')
script(type='text/javascript', src='/socket.io/socket.io.js')
script(type='text/javascript')
$(document).ready(function(){
var socket = io.connect();
socket.on('connect', function(){
socket.on('message', function(data){
$('<div/>')
.css({
'margin':'4px'
,'padding':'4px'
,'background-color':'#eee'
,'border-radius':'4px'
})
.text(data)
.prependTo($('#tweets'))
// 古い方から消す
if($('#tweets').children().length>100){
console.log('remove');
$('#tweets div:last').remove();
}
});
});
});
body!= body
実行してみましょう。
$ node app.js
info - socket.io started
The "sys" module is now called "util". It should have a similar interface.
Express server listening on port 3000 in development mode
ブラウザからhttp://localhost:3000/ にアクセスすると、、、
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 15161463341759372366
debug - setting request GET /socket.io/1/websocket/15161463341759372366
debug - set heartbeat interval for client 15161463341759372366
debug - client authorized for
debug - websocket writing 1::
(この辺にツイートがたくさん)
コンソールがすごい勢いで流れます。
ブラウザもすごい勢いで流れます。
眺めます。
ほう、春の選抜でカチューシャなのか。おい。
眺めます。
ほう、春の選抜でカチューシャなのか。おい。

0 件のコメント:
コメントを投稿