40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

016-HTTPClient使ってブログ本文を取得する実装考える

あすなろブログは執筆者別にRSSフィード生成してないため執筆者の最初のエントリを基点にして、次のエントリのリンクの有無を確認して・・という実装をもりこまないといけません。

例えば横田さんの場合だと

とりあえずテストコード

まずテストコードとなるtest_crawler.jsというのをこんな感じで書きました。

//
Ti.include('crawler.js');
var _url = 'http://blog.pasonatech.co.jp/yokota/399/1285.html';
var c = new Crawler.parse(_url);
var _obj = typeof c;
module("Crawler test");

test("initialize",
  function(){
    equals(_obj,"object");
  }
);
test("start parse",
  function(){
    var contents = c.start();
    equals(contents,"〜省略〜");
  }
);

本体となるcrawler.jsをこんな感じでまず作ってみました。

var Crawler = {
  each: function(collection, iterator, bind) {
    switch(Crawler.getType(collection)) {
      case "array":
        for(var i = 0, l = collection.length; i < l; i++)
          iterator.call(bind, collection[i], i);
        break;
      case "object":
        for(var property in collection) {
          if(collection.hasOwnProperty(property))
            iterator.call(bind, collection[property], property);
        }
        break;
    }
  },
  isConnected:function(){
    if(Titanium.Network.online == false){
      return false;
    } else {
      return true;
    }
  }
};

Crawler.parse = function(url){
  this.first_url = url;
};
Crawler.parse.prototype = {
  start:function(){
    if(Crawler.isConnected()){
      var xhr = Titanium.Network.createHTTPClient();
      xhr.open('GET',this.first_url,true);
      xhr.onload = function(){
	var row_data = this.responseText;
      };
      xhr.send();
    }
    return this;
  },
  getContens:function(){
    //
  },
  moveNext:function(url){
    //
  }
};

responseTextの結果に対する処理が面倒な気が・・

上記ソースでブログ本文は取得できているけど、必要な箇所だけ抜き出す処理を考えるのがえらく面倒。。

hamasyouさんがTitanium 版 XML2JSONというのを作ったエントリを見つけたのでこれを使おうか、それともこの部分だけはTitanium.Network.createHTTPClientから扱いやすいように、別途Webアプリを作成する方がよいのかな。

ちょっと色々煮詰まってきたのと、これから夜ごはんつくらないといけないので今日はここまで。