mixiに日記投稿するスクリプト

最近mixiに日記とか全然書いてませんでした。そこでふとこの前うじひさのブログならライブドアブログ(livedoor Blog) - 無料・デザイン豊富を思いだし、rubymixi日記投稿スクリプトでも書いてみっかと思いたった。で、書いた。習作。習作以外のプログラム書いたこと無い気もするけど。いちおう自分では使うか。

これ書いた数時間後にUI変更で使えなくなるとかなんだそれ。

修正した。

開いたエディタに書いた1行目がタイトル、2行目以降が本文になる。

#!/usr/bin/env ruby

require 'tempfile'
require 'rubygems'
require 'mechanize'
require 'kconv'

USER = 'hoge@hoge.com'
PASS = 'password'
EDITOR = 'C:/your/editor/path/editor.exe'
def login
  agent = WWW::Mechanize.new
  page = agent.get('http://mixi.jp/')
  login_form = page.forms.first
  login_form['email'] = USER
  login_form['password'] = PASS
  login_form['next_url'] = '/home.pl'

  agent.submit(login_form)
  return agent
end
def add_diary(agent, title, body)
  home_page = agent.get('/home.pl')
  add_href = ''
  home_page.links.each do |link|
    if link.href =~ /^add_diary/
      add_href = link.href
    end
  end
  add_page = agent.get(add_href)
  add_form = add_page.forms[1]
  add_form['diary_title'] = title
  add_form['diary_body'] = body
  confirm_page = agent.submit(add_form)

  confirm_form = confirm_page.forms[1]
  agent.submit(confirm_form)
end
def edit_txt
  tmppath = ''
  Tempfile.open('mixi'){|file|
    tmppath = file.path
  }
  system(EDITOR, tmppath)
  texts = IO.readlines(tmppath)
  return texts
end
texts = edit_txt
title = texts[0].toeuc
body = texts[1..-1].join.toeuc
agent = login
add_diary(agent, title, body)

しかしこの程度なのにmechanizeの使い方わからなかったりで随分時間かかった。

一時ファイル作ってそれをエディタに開かせて、書いた内容を受け取っている部分の

  Tempfile.open('mixi'){|file|
    tmppath = file.path
  }
  system(EDITOR, tmppath)
  texts = IO.readlines(tmppath)

がなんかこう、openブロック閉じるときにclose(false)になり、GC.startが実行されるまでファイルを削除はせず、その隙にエディタにそのファイル渡して編集、その内容を受け取る、とかなんかこれいいのだろうか。

test