gist

ラベル jQuery の投稿を表示しています。 すべての投稿を表示
ラベル jQuery の投稿を表示しています。 すべての投稿を表示

2012年1月18日水曜日

socket.ioでAKB48のツイートを眺めるアプリをつくる

socket.ioはサーバーとクライアント間でソケット通信できるパッケージです。個人的にはHTML5、Nodeで最もアツい技術かと思います。

このsocket.ioとTwitter Streaming APIを組み合わせてAKB48さんのワードが入ったツイートを眺めるアプリを作ってみます。

システム構成
  • Node 0.6.7
  • socket.io 0.8.7
  • express 2.5.5
  • Twitter-Node(SSL対応版)
HTMLテンプレートはjadeです。

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::
(この辺にツイートがたくさん)

コンソールがすごい勢いで流れます。

ブラウザもすごい勢いで流れます。

眺めます。
ほう、春の選抜でカチューシャなのか。おい。


2012年1月2日月曜日

QUnitの文字化けを解消する

QUnitで日本語を表示できるようにしてみます。といってもたった一行追加するだけです。前回のエントリーのqunit.htmlのヘッダに以下を追加します。

<head>
  <meta charset="utf-8" />
  ...
</head>

実行結果

2012年1月1日日曜日

QUnitでJavaScriptのユニットテストを始める

JavaScriptでユニットテストを実行するには、QUnitを使うのが良いかと思います。QUnitはもともとjQuery用のユニットテストでしたが、今ではjQueryに依存しないように作られていますので、JavaScriptをテストできます。JavaScriptの特徴でもある非同期のテストにも対応していますので、オススメです。

ここではQUnitのインストールと実行までやってみます。

まず、テストを実行するためのHTMLファイルを用意します。

qunit.html

<!DOCTYPE html>
<html>
<head>
    <title>QUnit Test Suite</title>
    <link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-git.css" type="text/css" media="screen">
    <script type="text/javascript" src="http://code.jquery.com/qunit/qunit-git.js"></script>
    <script type="text/javascript" src="myTests.js"></script>
</head>
<body>
    <h1 id="qunit-header">QUnit Test Suite</h1>
    <h2 id="qunit-banner"></h2>
    <div id="qunit-testrunner-toolbar"></div>
    <h2 id="qunit-userAgent"></h2>
    <ol id="qunit-tests"></ol>
    <div id="qunit-fixture">test markup, will be hidden</div>
</body>
</html>

次に、テストコードを記述するためのmyTests.jsを用意します。先ほどのqunit.htmlと同じ階層に配置します。必ずOKになるテストです。

myTests.js

test('a test', function() {
    ok(true, 'Happy New Year!');
});

では実行してみます。index.htmlをブラウザで開きます。

実行結果

グリーンになりました。

実行結果のデザインが見やすくカッコイイのでモチベーションが保てそうです。デザインの良さもQUnitを選択する理由かもしれません。

詳しい使い方は、公式のqunit(英語)をご覧いただければと思います。日本語ですとNodeで活躍されているJxckさんのサイトがとても詳しいです。