超手抜き版 はてなダイアリーライター(ruby版)を作ってみた。

WWW::mechanizeが面白そうだったので作ってみました。
参考サイトはhttp://mono.kmc.gr.jp/~yhara/d/?date=20070205#p01です。というかサンプルコードほとんどそのまんまです。
手元にあるテキストファイルを自分のダイアリーに投稿できます。お気に入りのエディタで書いてスクリプトで投稿みたいなことが簡単にできるわけです。

インストール方法

WWW::mechanizeがひつようです。gemでインストールしましょう。

gem install mechanize

僕もはまったのですがmechanize内部でnet/httpsを使ってるらしくlibopenssl-rubyをインストールする必要があります。
ubuntuなら

sudo apt-get install libopenssl-ruby

もちろん以下のスクリプトもダウンロード:-)

使いかた

ソースを見ればわかりますが
./hatena_diary_writer.rb hogehoge.txt
です。

注意

使ってもらうぶんには構いませんがパスワード平文だしまずいです。

今後

超最低限の機能しか備えていないのでぼちぼち実装します。
htmlの構造が違うのではてなグループに対応していないのも大きな問題です。
なんかおかしかったら教えてください。:-)

ソース

#!/usr/bin/env ruby
# hatena_diary_writer.rb
#

require 'rubygems'
require 'mechanize'
require 'kconv'
$KCONV = 'euc-jp'

class HatenaDiaryWriter
  def initialize(id,password)
    @id = id
    @password = password
    @agent = WWW::Mechanize.new
    @diary = @agent.get("http://d.hatena.ne.jp/#{id}/")
  end

  def login
    login_link = @diary.links.text("ログイン".toeuc)
    login_page = @agent.get(login_link.href)
    login_form = login_page.forms.first
    login_form['key'] = @id
    login_form['password'] = @password
    redirect_page = @agent.submit(login_form)
    @diary_link = redirect_page.links.text("こちら".toutf8)
    @diary_page = @agent.get(@diary_link.href)
  end

  def edit(content)
    edit_link = @diary_page.links.text("日記を書く".toeuc)
    edit_page = @agent.get(edit_link.href)
    edit_form = edit_page.forms.name("edit").first
    edit_form["body"] += content
    ok_button = edit_form.buttons.name("edit")
    @agent.submit(edit_form, ok_button)
  end
end

if __FILE__ == $0
  diary = HatenaDiaryWriter.new('user_id', 'password') #各自書き換えてください。
  content = ''
  while line = ARGF.gets
    content << line
  end
  diary.login
  diary.edit(content.toeuc)
end

ちなみにこのエントリもスクリプトで投稿してみました:-)