« MacPortsのmacfuse関連がfuse4xに置き換わった模様 | メイン | JavaScript+Smalltalk(ObjectiveC)=JSTalkをいじってみる »

greasemonkey+websocket+node.js+prowlでブラウザからiPhoneに通知してみる

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側:スクリプト内に適当に通信部分を追加

  var socket = MozWebSocket("http://localhost:8080");
  socket.onopen = function() {
      socket.send("HogeHoge");
      socket.onclose = function() {
          // alert("Socket has been closed!");
          socket = null;
      }
  }

サーバ側:(Firefox6は少し古いdraft対応なので以下のようにdraft07対応のwebsocketをインストール)

  git clone https://github.com/Worlize/WebSocket-Node.git -b draft-07  

落としてきたWebSocket-NodeをNODE_PATHの通った所にコピー

  cp -p  WebSocket-Node /opt/local/lib/node_modules/websocket-draft07

Firefox7以降では対応するdraftが新しくなっているのでnpmで入れたものやgitの先頭で使えます。

 sudo npm install websocket -g

サーバスクリプト: websocketのサンプルを適当に弄ったモノ
  ProwlのAPI KeyはProwlサイトにアカウントを作れば取得できます。

var WebSocketServer = require('websocket-draft07').server; // firefox7以降なら-draft07は不要
var http = require('http');
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でも試してみようと思いつつ。ただ思い切りクロスサイトで通信出来てしまうようなので、かなり注意が必要だと思います。

トラックバック

このエントリーのトラックバックURL:
http://blog.browncat.org/cgi-bin/mt/mt-tb-abc.cgi/939


コメントを投稿

(お書きになったコメントはすぐには表示されません。ご了承ください。)


About

2011年09月27日 16:05に投稿されたエントリーのページです。

ひとつ前の投稿は「MacPortsのmacfuse関連がfuse4xに置き換わった模様」です。

次の投稿は「JavaScript+Smalltalk(ObjectiveC)=JSTalkをいじってみる」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

           

カテゴリー

Powered by
Movable Type 3.36

Twitter


最近のエントリー

デル株式会社ads

注目エントリー