016-HTTPClient使ってブログ本文を取得する実装考える
あすなろブログは執筆者別にRSSフィード生成してないため執筆者の最初のエントリを基点にして、次のエントリのリンクの有無を確認して・・という実装をもりこまないといけません。
例えば横田さんの場合だと
- 最初のエントリである「さあ、はじめよう」のURLはhttp://blog.pasonatech.co.jp/yokota/399/1285.html
- 上記URL本文中にある次のエントリのURLであるhttp://blog.pasonatech.co.jp/yokota/399/1285.htmlを取得
- 以下、本文中に次のエントリのURLが無くなるまで繰り返す
とりあえずテストコード
まずテストコードとなる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アプリを作成する方がよいのかな。
ちょっと色々煮詰まってきたのと、これから夜ごはんつくらないといけないので今日はここまで。