Firefoxのgreasemonkey(scriptish)からwebsocketでnode.jsのサーバと通信して、ブラウザでチェックしたWebサイトの変更やアクションなどをgrowlでローカル通知したりProwl経由でiPhoneに通知を送りつけてみたのでメモ。
承前。webサイト毎に独自のjavascriptを走らせて色々なことが出来る便利なgreasemonkey(scriptish)ですが、なにかと制限がキツく外部との連携は結構大変でした。でWebSocketは使えるかどうか試してみると無事node.jsのwebsocketと通信出来ました。
環境:- MacOSX 10.7.1 Lion
- Firefox 6/7
- Scriptish (greasemonkey互換のスクリプト環境)
- node.js (0.4.12 = macportsで入るもの)
- websocket (firefox6はdraft07 branch, 7は最新版)
Greasemonkey側:スクリプト内に適当に通信部分を追加
socket.onopen = function() {
socket.send("HogeHoge");
socket.onclose = function() {
// alert("Socket has been closed!");
socket = null;
}
}
サーバ側:(Firefox6は少し古いdraft対応なので以下のようにdraft07対応のwebsocketをインストール)
落としてきたWebSocket-NodeをNODE_PATHの通った所にコピー
Firefox7以降では対応するdraftが新しくなっているのでnpmで入れたものやgitの先頭で使えます。
サーバスクリプト: websocketのサンプルを適当に弄ったモノ
ProwlのAPI KeyはProwlサイトにアカウントを作れば取得できます。
var growl = require('growl'); // 要growlnotifyコマンド
var Prowl = require('prowl').Prowl;
var prowl = new Prowl('<YOUR PROWL API KEY>');
var server = http.createServer(function(request, response) {
console.log((new Date()) + " Received request for " + request.url);
response.writeHead(404);
response.end();
});
server.listen(8080, function() {
console.log((new Date()) + " Server is listening on port 8080");
});
webSocket_server = new WebSocketServer({
httpServer: server,
autoAcceptConnections: true
});
webSocket_server.on('connect', function(connection) {
connection.on('message', function(message) {
if (message.type === 'utf8') {
msg = message.utf8Data;
growl.notify("XXX"+msg);
var data = { priorify: Prowl.NORMAL, application: 'prowl-test',
event: 'Hoge', description: msg };
prowl.add(data, function(status) { console.log("msg: "+msg); };
}
}
}
結構簡単に通信できるのでマッシュアップ的な使い方やページの更新や機能追加等に便利そうです。本家GreasemonkeyとChromeでも試してみようと思いつつ。ただ思い切りクロスサイトで通信出来てしまうようなので、かなり注意が必要だと思います。