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