TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

026-ブログ巡回のためのCrawler作成中

タイトルそのままなものを現在作っています。

RSpec使えるといいんだけど自分のスキルだとわからないことだらけなので、まずはTest::Unit 使ってこんなテストを書きました

# test_crawler.rb
require 'test/unit'
require 'crawler.rb'

class TestCase_Crawler < Test::Unit::TestCase
  def setup
    @url1 = "http://blog.pasonatech.co.jp/counselor/career_blog/399/15369.html"
    @crawler = Crawler.new(@url1)
    
    @url2 = "http://blog.pasonatech.co.jp/counselor/career_blog/399/15321.html"
    @crawler2 = Crawler.new(@url2)
  end

  def test_set_next_link
    assert_equal(nil,@crawler.set_next_link)
    assert_equal("http://blog.pasonatech.co.jp/counselor/career_blog/399/15369.html",@crawler2.set_next_link)
  end
  
  def test_set_title
    assert_equal("育児:003 ベビーサイン",@crawler.set_title)
    assert_equal("Lifestyle:002 ベジーな食生活に切り替え中",@crawler2.set_title)
  end
  
  def test_next_page?
    assert_equal(false,@crawler.next_link?)
    assert_equal(true,@crawler2.next_link?)
  end
end

crawler.rbの方はこんな感じ。

Rubyっぽい書き方かどうか自信がなかったり、クラスのインスタンス変数とかこうやってコード書いているうちに理解が曖昧っていうことに気づいた。

require 'rubygems'
require 'nokogiri'
require 'open-uri'

class Crawler
  def initialize(start_url)
    @doc = Nokogiri::HTML(open(start_url))
  end
  attr_accessor :html_body, :next_link, :title

  def set_next_link
    # 最新エントリ以外は次のエントリがないのでそれを判定基準にする
    result = @doc.search('//p[@class="entrylink"]')
    @next_link = result.search("a")[1]['href'] if result.text.include?("次のエントリー&#187;")
    return @next_link
  end
  
  def set_title
    @title = @doc.search('//div[@class="entry"]').search("h1").text
    return @title
  end

  def set_html_body
    @html_body = @doc.search('//div[@class="entryText"]').inner_html
    return @html_body
  end
  
  def next_link?
    if self.set_next_link === nil then
      false
    else
      true
    end
    
  end
end

しかし、毎日初期型MacbookAir持ち歩いて最近ちょっとかばんが重たいと感じることが増えてきたからMacBook Air 11インチ欲しい!なぁ