バリケンのRuby日記 RSSフィード

2007-02-11

[] GREEダイアリーライター  GREEダイアリーライター - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  GREEダイアリーライター - バリケンのRuby日記  GREEダイアリーライター - バリケンのRuby日記 のブックマークコメント

mechanizeの練習として、テキストファイルで書いた文章をGREE日記に書き込む「GREEダイアリーライター」を作ってみたよ(Windows版)。もちろんRubyインストールされていないと使えないから、こちらからruby185-22.exeをダウンロードしてインストールしておいてね。

Ruby本体以外にも、hpricotライブラリとmechanizeライブラリ、あとWindows版のImageMagickが必要だよ。

> gem install hpricot
> gem install mechanize

でhpricotとmechanizeをインストールして、さらにここからImageMagick-6.3.2-4-Q16-windows-static.exeをダウンロードしてインストールしておいてね。

$KCODE = 's'

USERNAME = "(ユーザ名)"
PASSWORD = "(パスワード)"
PHOTORESIZE = true

require 'mechanize'
require 'kconv'
require 'fileutils'

body = open("up.txt").read.to_a
title = body.shift.chomp
body = body.join

raise if File.exist?('orig_images') and not File.directory?('orig_images')
raise if File.exist?('uploaded') and not File.directory?('uploaded')

FileUtils.mkdir('orig_images') unless File.exist?('orig_images')
FileUtils.mkdir('uploaded') unless File.exist?('uploaded')

agent = WWW::Mechanize.new
gree_page = agent.get("http://gree.jp/")

login_form = gree_page.forms.first
login_form['user_mail'] = USERNAME
login_form['user_password'] = PASSWORD
agent.submit(login_form)

edit_page = agent.get("http://gree.jp/?mode=blog&act=entry_edit")

edit_form = edit_page.forms.first
edit_form["title"] = title.toeuc
edit_form["description"] = body.toeuc

Dir.entries('.').select {|i|
  i.downcase.match(/.*\.jpg/)
}[0..2].sort.each_with_index{|item, index|
  if PHOTORESIZE
    system("convert -geometry 640x640 -quality 80 #{item} up#{index}.jpg")
  else
    FileUtils.cp(item, "up#{index}.jpg")
  end
  FileUtils.mv(item, 'orig_images')
}

files = Dir.entries('.').select {|i|
  i.downcase.match(/up.*\.jpg/)
}.map {|i|
  Dir.pwd.gsub(/\//, "\\") + "\\" + i
}

files.each_with_index {|item, index|
  edit_form.file_uploads.name("user_pics[]")[index].file_name = item
}

ok_button = edit_form.buttons.name("doConfirm")

confirm_page = agent.submit(edit_form, ok_button)

confirm_form = confirm_page.forms.first
commit_button = confirm_form.buttons.name("doCommit")

agent.submit(confirm_form, commit_button)

file_base = confirm_form["blog_date"].delete("^0-9")
File.rename("up.txt", 'uploaded' + "\\" + file_base + ".txt")

files.each_with_index {|item, index|
  File.rename(item, 'uploaded' + "\\" + file_base + "_#{index}.jpg")
}

これをgree_writer.rbとして保存してね。スクリプト中の「(ユーザ名)」と「(パスワード)」は、各自の環境に合わせて編集してね。あ、もちろんスクリプト中に生パスワードを書くことになるから、このファイルの扱いには十分注意してね。

GREEダイアリーライターの使い方

gree_writer.rbが置かれたフォルダに、up.txtというテキストファイルを作ってね。ファイルは、1行目が日記タイトル、2行目以降が日記本文になるよ。

拡張子jpgファイルを同じフォルダにおいておくと、自動的に画像アップロードされるよ。画像ファイルは3つまで自動でアップロードされるよ。3つ以上のjpgファイルを置いても、4つめ以降はアップロードされないでそのフォルダに残っちゃうから注意してね。

アップロードする画像は、ImageMagickで自動的に640x640ピクセル以内にリサイズするよ。元々の画像が640x640ピクセル以内の写真しかアップロードしない人は、リサイズの必要がないから、「PHOTORESIZE = true」を「PHOTORESIZE = false」に変更してね。このあたりは、将来的には自動で判別するようにしたほうがよさそうだねえ。

日記の書き込みが終了すると、元の画像ファイルはorig_imagesフォルダに、縮小画像ファイルとup.txtは書き込んだ日付のファイル名にリネームされてuploadedフォルダにそれぞれ移動されるよ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070211