以前Postfixでメール受信をトリガーにTwitterの画像をImageMagickで動的に生成しました。
ただちょっとpostfixを自前で用意するのは…というコメントを頂いたので、imapで新着メールを監視する方式に乗り換えました。inboxライブラリがかなり便利で良いですね。。
依存するライブラリは下記のとおりです。すべてnpm installでは入ります。
var gm = require('gm').subClass({ imageMagick: true }); var inbox = require("inbox"); var client = inbox.createConnection(false, "imap.gmail.com", { secureConnection: true, auth:{ user: "your-gmail-account@gmail.com", pass: "your-password" } }); client.connect(); client.on("connect", function(){ console.log("successfullly connected to server"); client.openMailbox("INBOX", function(error, info){ if(error) throw error; // client.listMessages(10, function(err, messages){ // messages.forEach(function(message){ // console.log(message.UID + ": " + message.title); // }); // }); }); }); client.on('close', function (){ console.log('DISCONNECTED!'); }); client.on("new", function(message){ console.log("New incoming message " + message.title); if(message.from["address"] == "allowed-address") { GenerateImage(message.title); } }); var twitterAPI = require('node-twitter-api'); var twitter = new twitterAPI({ consumerKey: 'xxxxx', consumerSecret: 'xxxxx', callback: 'http://yoururl.tld/something' }); var accessToken = 'xxxxx'; var accessTokenSecret = 'xxxxx'; function GenerateImage(text) { text = text || ''; var x, y; if(text.length < 5) { x = 140; y = 160; } else if(text.length < 9){ x = 140; y = 120; text = text.substr(0, 4) + "\n" + text.substr(4); } gm('pic/jonki.png') .font('font/setofont.ttf', 90) .drawText(x, y, text) .write("pic/jonki-out.png", function (err) { if(err) { console.log(err); } else { console.log("GenerateImage succeeded"); console.log(text); twitter.updateProfileImage({'image' : 'pic/jonki-out.png'}, accessToken, accessTokenSecret, function(error, data, response) { if(error) { console.log("failed updateProfileImage"); } else { console.log("update profileImage succeed"); } } ); } }); }