自分のTwitter全ステータスを保存

コマンドライン引数にユーザ名とパスワードを指定すること。

#!/usr/bin/ruby -Ku

require 'rexml/document'
require 'net/http'
require 'date'

Net::HTTP.version_1_2
user, pass = ARGV
hr = '-' * 100

open('twitter.txt', 'w') do |out|
  Net::HTTP.start('twitter.com', 80) do |http|
    i = 1
    loop do
      path = "/account/archive.xml?page=#{i}"
      puts path
      req = Net::HTTP::Get.new(path)
      req.basic_auth(user, pass)
      responce = http.request(req)
      break unless responce.kind_of?(Net::HTTPSuccess)
      xml = REXML::Document.new(responce.body)
      break unless xml.root.name == 'statuses'
      xml.elements.each('/statuses/status') do |e|
        id = e.elements['id'].text
        created_at = e.elements['created_at'].text
        text = e.elements['text'].text.gsub('&lt;', '<').gsub('&gt;', '>')
        screen_name = e.elements['user/screen_name'].text
        datetime = DateTime.parse(created_at)
        uri = "http://twitter.com/#{screen_name}/statuses/#{id}"
        puts uri
        out.puts uri
        out.puts '( %d年%d月%d日 %02d:%02d )' % [datetime.year, datetime.month, datetime.day, datetime.hour, datetime.min]
        out.puts text
        out.puts hr
      end
      i += 1
      sleep 3
    end
  end
end