Twitterにログインして「みんなのつぶやき」をとってきてDBに入れる

昨日作ったやつ(http://d.hatena.ne.jp/koki-h/20080528/1211978415
だと非公開の人の発言が取れないので直した。

#!/usr/local/bin/ruby
require 'rss'
require 'rubygems'
require_gem 'activerecord'

ActiveRecord::Base.establish_connection(
   :adapter  => "sqlite3",
   :dbfile   => "#{File.dirname(__FILE__)}/twitter_rom.db"
)
class Item < ActiveRecord::Base
end

def get_rss_items
  items = []
  begin
    uri  = 'http://twitter.com/statuses/friends_timeline.rss'
    user = 'username' #自分のユーザ名 or メールアドレス
    pass = 'password' #自分のパスワード
    rss_str = open(uri, :http_basic_authentication=>[user, pass]).read
    rss = RSS::Parser.parse(rss_str)
  rescue
    return items
  end
  rss.items.each do |i|
    items.push(i)
  end
  items
end

def store_items(items)
  items.each do |i|
    next if Item.find(:first,:conditions => ["pubdate=? and link=?",i.pubDate,i.link])
    item_rec = Item.new
    item_rec.title       = i.title
    item_rec.pubdate     = i.pubDate
    item_rec.description = i.description
    item_rec.link        = i.link
    item_rec.save
  end
end

items = get_rss_items
exit if items.length == 0
store_items(items)

Twitter4Rのようなライブラリもあるようだけどドキュメント読むのがめんどくさそうなので(それに大したことはしていないので)API仕様書の日本語訳を拾い読みして自前でやった。仕様書の人には感謝。