2012年2月5日日曜日

Cloud 9 で node.js 開発 & オレオレ はてなOne 作った。

Cloud9 という IDE 統合開発環境?が人気みたいです。
Web上で開発が出来るっていうスグレモノみたいです。
node.js をいじることが増えたので、ちょっと使ってみることにします。

http://c9.io/#home

ココにアクセスすると、すぐ左に、表示名とメアドを入れる所があるので、
そこを埋めると、入れたメアド宛にアクティベートコードつきURLみたいなのが届きます。

























 ほんで、そのURLをクリックすると、パスワードを設定しろとか言われるので、
パスワードを入れると、ダッシュボードの画面になります。























で、早速適当にプロジェクトなんて作ってみます。
RSSをJSONにするようなやつを造ろうと思うので、
RSSGetterとか名前をつけて、CREATEします。
Git とか FTP とか色々やりかたを選べるみたいですが、
取りあえず Git でやってみる。



















CREATEを押すと、プロジェクトができるので、
START EDITINGを押してみます。


















しばらーくまっていると、こんな画面になります。
Show this quick start on startup のチェックをはずして、
Just the Editor Please を押してみます















NewFileしてみたり、OpenFileしてみたりするけど、
なんか、タブは増えても、書いたり出来ない…




















これはブラウザが悪いな。多分。
ということで、ブラウザをFirefox 3.6.x から Chrome 16 に変えます。























動いた動いた。

node.js で RSS をパースするには、node-feedparser というのを使えばいいみたいです。

node-feedparser

http://stackoverflow.com/questions/5722638/node-js-rss-module


ほうほう。
RSSの更新日付とかのことも考えて、日付のフォーマットを簡単に変えられるやつも使いたい。

node-datetime

var dt = dateformat((new Date),"yyyymmddHHMMSS");
こんな感じなのかなー?まぁ、やってみよう。
























とりあえず、こんな感じになりました。

オレオレ はてなOne ですね。

var XHR        = require("xmlhttprequest").XMLHttpRequest;
var FeedParser = require('feedparser');
var dateFormat = require('dateformat');

var HatenaOne  = function(usr,callback){this.usr = usr;this.callback = callback;this.init();};
    HatenaOne.prototype = {
        hatena     :["b","d","h"],
        myFav      :[],
        getFavList : function(callback){
        // お気に入りに入れているユーザ一覧を取ってくる
            var self = this;
            var url  = "http://www.hatena.ne.jp/" + this.usr + "/favorites.json";
            var xhr  = new XHR();
            try{
                xhr.onreadystatechange = function(){
                    if(this.readyState == 4){
                        var json = this.responseText;
                            json = JSON.parse(json);
                        self.myFav = json.favorites;
                    }
                };
                xhr.open("GET",url);
                xhr.send();
            }catch(e){
            }finally{
                if(typeof(callback) == "function"){callback();}
            }
        },
        getFeed    : function(){
        // お気に入りのユーザのはてダRSSとかはてブRSSとかフォトライフのRSSとか取ってくる
            var name = "";
            var url  = "";
            for(var i = 0,l = this.myFav.length;i < l;i ++){
                name = this.myFav[i].name;
                for(var j = 0,m = this.hatena.length;j < m;j ++){
                    url  = "http://" + this.hatena[i] + ".hatena.ne.jp/" + name + "/rss";
                    (function(self,url,cnt,parser){
                        parser.on("article",function(json){
                            self.myFav[cnt].time = dateFormat(json.pubDate,"yyyymmddHHMMSS");
                            if(typeof(self.callback) == "function"){self.callback(json);}
                        });
                        parser.parseFile(url);
                    })(this,url,i,(new FeedParser()));
                }
            }
        },
        init       : function(){
            var self = this;
            this.getFavList(function(){self.getFeed();});
        }
    };
   
var hoge = new HatenaOne("psychedesire",function(json){console.log(JSON.stringify(json));});

self.myFav[cnt].time = dateFormat()~のあたりが自信ない。書式これでいいのか?つか、
parser.on した json が一個ずつなのか、配列で返されてるのかちゃんとみてないので、
json.length とかやったりとかして、うまく書き換えて、
前回取得日より新しい更新だけを取得する、とか、
そういう処理を書いてください。そんくらい書けよって話しなんだけどね(笑

var dt = dateFormat(json.pubDate,"yyyymmddHHMMSS");
dt -= 0;
if(self.myFav[i].time &&self.myFav[i].time > dt && typeof(self.callback) == "function"){
 self.callback(json);
 self.myFav[i].time = dt;
}

こうですね。IF文長いね。まぁいいか。
てか、これこのままだと1回しか取得しないので、
init のところで setInterval() とかしなきゃだめだね。

ポイントは、(function(){})() してるところです。ああしないと、非同期?にならないはず。
此間、

timeline.js という非同期処理連携用ライブラリを作成

こういうのを見つけたので、こういうのを使えば調子良いのかも知れないですけど。

ご指摘とか、変だよとか、死ねとか、そういうのあったら言って下さい。死にませんけど。

あ、あと、package.json は

    "dependencies" : {
        "xmlhttprequest"  : "1.2.2"
      , "dateformat"      : "1.0.2-1.2.3"
      , "feedparser"      : "0.9.1"
    },

これみたいです。dateformat のヴァージョンがちょっと変わってるねーと思った。

あ、で、cloud9 の使い勝手ですけど、一応!とか×とか出てきたりしてくれるので、
勉強になりました。
for文の中で function 使うなとか言われました。テヘペロ。むしろテヘベロ。

0 件のコメント:

コメントを投稿