Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save tokunami/36460f372f8cc359a71e to your computer and use it in GitHub Desktop.
Save tokunami/36460f372f8cc359a71e to your computer and use it in GitHub Desktop.

Node.js + express + socket.io でtwitterのストリーミング-その1

  • Node.js v0.10.28
  • express v3.8.1
  • socket.io v0.9.17

今回はntwitterを使用。 https://github.com/AvianFlu/ntwitter ntwitterの中身については別途確認します

事前準備
$ express sample-tweet-streaming
$ cd sample-tweet-streaming
$ npm install
$ npm install socket.io
$ npm install ntwitter
1. app.js
  • ntwitter関連
var twitter = require('ntwitter');
var twit = new twitter({
  //各keyは事前に取得したもの
  consumer_key: 'aaaaa',
  consumer_secret: 'aaaaa',
  access_token_key:'aaaaa',
  access_token_secret:'aaaaa',
});
  • app.get('/', function(req, res){})の部分
app.get('/', function(req, res){
  res.render('index',{
    keyword: keyword, //別途指定する
    title: 'tokunamiの部屋'
  });
});
  • socket.io部分を追加
io.sockets.on('connection', function(socket){
  socket.on('keyword post', function(keyword){
  
    //ここからntwitter
    twit.stream('statuses/filter', {'track': keyword},function(stream){
      stream.on('data', function(data){
        io.sockets.emit('message', data.text);
      });
      //Disconnect stream after five seconds
      setTimeout(stream.destroy, 5000);
    });
    
  });
});
2. public > javascripts > client.js
  • キーワード送信
$('#keyword_form').on('submit', function(){
  var keyword = $('#keyword').val();
  if(keyword){
    socket.emit('keyword post', keyword);
  }
});
  • ツイッター情報を受信、画面書換え
socket.on('message', function(t){
  $('<div></div>')
    .html('<li>' + t + '</li>')
    .prependTo('#tweets');
});
3. views > index.jade

省略

ソースコードはここ

https://github.com/tokunami/sample-tweet-streaming

  • プロキシ経由しない環境では動作確認できた。
  • 会社でも動くようにするにはOAuthのところでプロキシ設定する必要がある模様。ntwitterの中を書き換えないといけないようなので、他のAPI利用も含めて解決策を調べます。
@stoshiya
Copy link

node-oauthにProxy機能を拡張したものは,私のリポジトリ(https://github.com/stoshiya/node-oauth)にあります.

npmにはGitHubのリポジトリを参照する機能があります.これとGitHubを活用すると,独自拡張をパッケージングしたモジュールをnpm installするだけで環境をセットアップできます.基本的な手順としては,まずサードパーティのモジュールをforkして拡張します.つぎに自分のリポジトリの中のモジュールをインストールするように,参照元のpackage.jsonを書き換えます.

@stoshiya
Copy link

APIキーなどをソースにハードコードしたまま,リポジトリを公開してはいけません.この鍵をつかって,他者がtokunamiさんが登録したアプリになりすまし,TwitterのAPIにアクセスできてしまいます.

@stoshiya
Copy link

機能単位かWebAPI単位で,簡単な仕様を決めてみましょう.入力と出力を決めることで,内部の処理を決定できます.これは〇〇APIがどのような機能を提供するのかを,イメージしながら設計と実装する練習です.

@tokunami
Copy link
Author

コメントありがとうございます。
キーは廃棄して、ソースコードも直しました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment