そろそろOAuth認証にしておかないとまずいので書きなおすことにした。
■環境構築
必要なパッケージのインストール等をする。
sudo yum -y install openssl-devel gcc-c++ git make git clone https://github.com/isaacs/nave.git ~/.nave ~/.nave/nave.sh install stable ~/.nave/nave.sh use stable echo "~/.nave/nave.sh use stable" >> ~/.bash_profile sudo curl https://npmjs.org/install.sh --insecure | sh npm -g install forever npm install twitter npm install websocket
■実装
以下のようにした。
const PORT = 8080; const FOLLOWING_ID = 16052553; const CONSUMER_KEY = "CONSUMER_KEY"; const CONSUMER_SECRET = "CONSUMER_SECRET"; const TOKEN_KEY = "TOKEN_KEY"; const TOKEN_SECRET = "TOKEN_SECRET"; var util = require('util') , http = require('http') , twitter = require('twitter') , WebSocketServer = require('websocket').server ; // build server var server = http.createServer(function(request, response) { util.puts('[' + new Date() + ']Received request for ' + request.url); response.writeHead(404); response.end(); }); server.listen(PORT, function() { util.puts('[' + new Date() + ']Server is listening on port ' + PORT); }); var wsServer = new WebSocketServer({ "httpServer" : server, "autoAcceptConnections" : true }); wsServer.on( 'connect', function(connection){ util.puts('[' + new Date() + ']Connection accepted.'); connection.sendUTF('{"status" : "accepted"}'); } ); setInterval(function () {wsServer.broadcastUTF("");}, 30 * 1000); // build twitter connection var twit = new twitter({ "consumer_key" : CONSUMER_KEY, "consumer_secret" : CONSUMER_SECRET, "access_token_key" : TOKEN_KEY, "access_token_secret" : TOKEN_SECRET }); twit.stream('statuses/filter', {"follow" : FOLLOWING_ID}, function(stream) { stream.on('data', function(data) { if (data['user']['id'] === FOLLOWING_ID) { delete data['source']; delete data['contributors']; delete data['entities']; delete data['favorited']; delete data['lang']; delete data['truncated']; delete data['in_reply_to_status_id']; delete data['in_reply_to_status_id_str']; delete data['in_reply_to_user_id']; delete data['in_reply_to_user_id_str']; delete data['in_reply_to_screen_name']; delete data['user']['name']; delete data['user']['screen_name']; delete data['user']['url']; delete data['user']['description']; delete data['user']['protected']; delete data['user']['followers_count']; delete data['user']['friends_count']; delete data['user']['listed_count']; delete data['user']['created_at']; delete data['user']['favourites_count']; delete data['user']['utc_offset']; delete data['user']['time_zone']; delete data['user']['geo_enabled']; delete data['user']['verified']; delete data['user']['statuses_count']; delete data['user']['lang']; delete data['user']['contributors_enabled']; delete data['user']['is_translator']; delete data['user']['profile_background_color']; delete data['user']['profile_background_image_url']; delete data['user']['profile_background_image_url_https']; delete data['user']['profile_background_tile']; delete data['user']['profile_image_url']; delete data['user']['profile_image_url_https']; delete data['user']['profile_link_color']; delete data['user']['profile_sidebar_border_color']; delete data['user']['profile_sidebar_fill_color']; delete data['user']['profile_text_color']; delete data['user']['profile_use_background_image']; delete data['user']['default_profile']; delete data['user']['default_profile_image']; delete data['user']['following']; delete data['user']['follow_request_sent']; delete data['user']['notifications']; util.puts('[' + new Date() + ']EEW ' + data); wsServer.broadcastUTF(JSON.stringify(data)); } }); stream.on('error' , function(err) { util.puts('[' + new Date() + ']Error::Stream' + err); }); }); setTimeout( function () { throw new Error('[' + new Date() + ']Error::for reboot'); }, 1000 * 60 * 60// 1 hour );
■起動
以前はnohupとか使ってたが、ちゃんとforeverを使うようにする。
ulimit -n 32768 forever start -a --spinSleepTime=10000 -w --watchDirectory=./ -l /home/hoge/.forever/eew.log server.js
これでしばらくテストして上手く行けばリリースする。