凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

node.js で Twitter Streaming API につないでみた

はじめに

node.js を触り始めてみました。Twitter Streaming API を色々と弄りたいなと思い導入しようとしたのですが、色々と躓いて時間がかかってしまいました。今は何とか安定して使える環境になったのでメモを残しておきます。

環境

  • Ubuntu 10.04
  • node 0.6.9
  • npm 1.1.15

導入

ここを参考にさせて頂きました。
基本的にはこの流れでやれば良いのですが、2点躓いたのでメモ。

バージョン
./nave.sh use latest

とやると 2012/04/04 時点で、0.7.7 が入りますが、後々色々と困ったので 0.6.9 を入れました。

./nave.sh use 0.6.9
zsh

zshを使っていると次のように怒られてしまいます。

/bin/zsh: no such option: rcfile

これは nave.sh 内で $SHELL --rcfile といった感じでコマンドを実行しているのですが、zsh には rcfile オプションが無いので怒られているみたいです。そこで仕方ないですが一旦 SHELL を bash に変更して nave.sh を実行します。

export SHELL=/bin/bash
./nave.sh use 0.6.9
export SHELL=/bin/zsh

これで OK です。

Twitter Streaming API につなげる

ここを参考にすれば色々なツイートを取得することができます。
例えば、以下の URL では Basic 認証すればランダムに選ばれたツイートが垂れ流されてきます。

試しにここに繋いでみましょう。
https での Basic 認証については以下のサイトを参考にしました。

app.js
var util     = require('util');
var https    = require('https');
var host     = 'stream.twitter.com';
var request  = https.get(
	{
		host : host,
		port : 443,
		path : '/1/statuses/sample.json',
		auth : 'USERNAME:PASSWORD'
	},
	function(response) {
		console.log('Response: ' + response.statusCode);
	}
);

request.on('error', function(e){
	console.log(e);
});

request.on('response', function(response) {
	response.on('data', function(chunk) {
		var tweet = JSON.parse(chunk);
		if ('user' in tweet && 'name' in tweet.user) {
			util.puts('[' + tweet.user['name'] + ']\n' + tweet.text);
		}
	});
});

process.on('uncaughtException', function (err) {
	console.log('uncaughtException => ' + err);
});

USERNAME と PASSWORD は自分のものに置き換えて下さい。これで以下のコマンドを実行するとずらーっとツイートが出力されます。

node app.js

おわりに

こっから WebSocket でブラウザの方にデータを送ってほげほげしていこうかな、と思います。
TwitterAPI もどんどん改定されていくので、この内容も先人方のちょっと古い Twitter Streaming API 使ってみたエントリと同様に、そのうち動かなくなってしまうかもしれませんねー…。