Hatena::ブログ(Diary)

hogeなlog

プロフィール

hogelog

hogelog

小室 直(こむろ すなお)。電気通信大学2003年入学。2010年修士卒業。プログラミングとかしてます。

カレンダー
1984 | 01 |
2006 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2010 | 01 | 06 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 12 |
2012 | 01 | 04 | 06 |

July 07(Mon), 2008

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

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

これ書いた数時間後に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が実行されるまでファイルを削除はせず、その隙にエディタにそのファイル渡して編集、その内容を受け取る、とかなんかこれいいのだろうか。

最近のコメント