マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

はてなメッセージ一覧を取得してみる

Rubyはてなメッセージ一覧を取得するスクリプトを書いてみた。フォーム情報の取得、送信にはMechanizeを使ってる。

require 'rubygems'
require 'mechanize'

username = 'hoge'
password = 'password'

class HatenaMessage
    def initialize()
        @agent = WWW::Mechanize.new
    end

    def login(username, password)
        page = @agent.get('https://www.hatena.ne.jp/login')
        form = page.forms[0]
        form['name'] = username
        form['password'] = password
        form.submit
    end

    def get_message()
        page = @agent.get('http://m.hatena.ne.jp/')
        body = page.body

        from_list = Array.new
        title_list = Array.new
        timestamp_list = Array.new

        body.scan(/<td class="from" nowrap><img.*?>(.*?)<\/td>/){|from|
            from_list << from[0]
        }

        body.scan(/<a href="\/tree\?\d+" class="message-title">(.*?)\n/){|title|
            title_list << title[0]
        }

        body.scan(/<td class="timestamp">(.*?)<\/td>/){|timestamp|
            timestamp_list << timestamp[0]
        }

        message_list = Array.new(from_list.size());

        for i in 0..message_list.size() - 1
            message_list[i] = Message.new(from_list[i], title_list[i], timestamp_list[i])
        end

        return message_list
    end

    class Message
        attr_reader :from
        attr_reader :title
        attr_reader :timestamp

        def initialize(from, title, timestamp)
            @from = from
            @title = title
            @timestamp = timestamp
        end
    end
end

message = HatenaMessage.new
message.login(username, password)
message.get_message().each{|message|
    puts message.from
    puts message.title
    puts message.timestamp
    puts
}