Twitter のページから JSON を生成する

API 制限かかりまくりで Tween みたいに HTML 解析するクライアントじゃないとまともに使えない。Tweenもいいんだけど、、、自分で作った firefox アドオンの方がしっくりくる。てことで、Mechanize と ruby-json を使って HTML から json を起こす script を書いてみた。

require 'rubygems'
require 'mechanize'
require 'json/lexer'

class TwitterJSON
  def initialize(user_name , password)
    @user_name = user_name
    @password  = password
    @agent = WWW::Mechanize.new
  end
  def json
    login
    request
  end
  private
  def login
    page = @agent.get('http://twitter.com')
    form = page.forms[1]
    form["username_or_email"] = @user_name
    form["password"] = @password
    page = @agent.submit(form)
  end
  def request
    table = nil
    0.upto(5){|i|
      page = @agent.get('http://twitter.com/home')
      table = page.root.get_element_by_id("timeline")
      break if table
    }
    list = []
    table.each_child {|tr|
      next unless tr.elem?
      screen_name = $1 if tr.find_element("a")[:href] =~ /.*\/(.*)$/
      name = tr.find_element("img")[:alt]
      img  = tr.find_element("img")[:src]
      text = tr.find_element("span").innerHTML.strip
      date = tr.at("abbr.published")[:title]
      id   = tr[:id].split("_")[1]

      user = {"name" => name , "screen_name" => screen_name , "profile_image_url" => img}
      list << {"user" => user , "text" => text , "created_at" => date , "id" => id}
    }
    list.to_json
  end
end

相変わらず名前がイケてない。使い方↓

  json = TwitterJSON.new(username , password).json

画面から拾える情報は少ないので仕方ない?
あと Ruby で有名な JSON ライブラリが良く分からなかった。

追記

テキスト中のアンカータグは消さないといけないのか・・・明日だな・・・。