ATNDのリマインダーをNodeで書いてみた
Node.jsの正式名称はNodeということらしいので、これからはNodeと表記しますね。
今日、「Node.jsの飲み会」というイベントをやるんですが、信頼のドタキャン率を誇るATNDで募集していたので、ATNDのアカウントをTwitterとひもづけてる人に対してTwitter経由でリマインダーを送るプログラムをNodeで書いてみました。
var request = require('request'), qs = require('querystring'), OAuth = require('oauth').OAuth, settings = require('./settings'), oauth = new OAuth( 'https://api.twitter.com/oauth/request_token', 'https://api.twitter.com/oauth/access_token', settings.oauth.consumer_key, settings.oauth.consumer_secret, '1.0a', null, 'HMAC-SHA1' ); function getUsers(eventId, callback) { var params = { format: 'json', event_id: eventId } var url = 'http://api.atnd.org/events/users/?' + qs.stringify(params); request({uri: url}, function(err, res, body) { if (err) throw err; if (res.statusCode !== 200) throw new Error('ATND API returns NG'); var event = JSON.parse(body).events[0]; event.users.forEach(function(element, index, array) { callback(event, element); }); }); } function update(message) { oauth.post( 'http://api.twitter.com/1/statuses/update.json', settings.oauth.access_token, settings.oauth.access_token_secret, { status: message }, function(err, data) { err && console.log(err); } ); } getUsers(13366, function(event, user) { if (user.status === 1 && user.twitter_id) { update('@' + user.twitter_id + ' 今日は「' + event.title + '」の日です!あなたは参加人数にカウントされておりますので、もし参加できない場合は今すぐキャンセルをお願いします。お会いできるのを楽しみにしています!' + event.event_url); } });
これをapp.jsという名前で保存します。同じディレクトリにsettings.jsという名前で
module.exports.oauth = { consumer_key: 'your consumer key here', consumer_secret: 'your consumer secret here', access_token: 'your access token here', access_token_secret: 'your access token secret here' }
という内容のファイル(それぞれのキーはTwitterのAPIのページで取得してね)を作成して、あとは
$ node app.js
で、リマインダーをスパムのようにつぶやきます。
Github: https://github.com/meso/ATND-Reminder
もし要望があれば、これにWebインタフェースつけてこういったリマインダーを送るサービスでも作ろうかしら。