はてなフォトライフにpostするgyazoを書いた on Mac OSX
はてなフォトライフAtomAPIの扱い方が分かったので、早速gyazoを使ってはてなフォトライフにpostするスクリプトを書いてみた。gyazo自体はRubyで書かれているので、書き換えるだけでOK......なんだけど、RubygemsのロードパスはMacに標準で入っているRubygemsのものになるので注意。おいらは別途MacPortsで入れているんだけど、動かなくて原因が分かるのに結構悩んでしまった。
前準備
atomutilをインストール。
sudo /usr/bin/gem install atomutil
これでMacPortsを使ったり、別途他のところにソースからインストールしている人でも標準のRubygemsにatomutilがインストールされる。
patch
*** /Applications/gyazo.app/Contents/Resources/script 2007-09-05 14:20:13.000000000 +0900 --- /Applications/gyazo.app/Contents/Resources/script 2008-09-14 14:27:16.000000000 +0900 *************** *** 1,6 **** #!/usr/bin/env ruby ! require 'net/http' program = ARGV[0] idfile = File.dirname(program) + "/gyazo.app/Contents/Resources/id" --- 1,7 ---- #!/usr/bin/env ruby ! require 'rubygems' ! require 'atomutil' program = ARGV[0] idfile = File.dirname(program) + "/gyazo.app/Contents/Resources/id" *************** *** 25,56 **** imagedata = File.read(tmpfile) File.delete(tmpfile) ! boundary = '----BOUNDARYBOUNDARY----' ! HOST = 'gyazo.com' ! CGI = '/upload.cgi' ! data = <<EOF ! --#{boundary}\r ! content-disposition: form-data; name="id"\r ! \r ! #{id}\r ! --#{boundary}\r ! content-disposition: form-data; name="imagedata"\r ! \r ! #{imagedata}\r ! \r ! --#{boundary}--\r ! EOF ! ! header ={ ! 'Content-Length' => data.length.to_s, ! 'Content-type' => "multipart/form-data; boundary=#{boundary}" ! } ! ! Net::HTTP.start(HOST,80){|http| ! res = http.post(CGI,data,header) ! url = res.response.to_ary[1] ! system "echo #{url} | pbcopy" ! system "open #{url}" ! } --- 26,46 ---- imagedata = File.read(tmpfile) File.delete(tmpfile) ! post_uri = 'http://f.hatena.ne.jp/atom/post' ! userid = '******' ! pass = '******' ! ! entry = Atom::Entry.new({ ! :title => 'post by gyazo', ! :updated => Time.now, ! :content => Atom::Content.new { |c| ! c.body = [imagedata].pack('m') ! c.type = "image/jpeg" ! c.set_attr(:mode, "base64") ! }, ! }) ! auth = Atompub::Auth::Wsse.new :username => userid, :password => pass ! client = Atompub::Client.new :auth => auth ! client.create_entry(post_uri, entry, "post bv gyazo")
中のuseridとpassにはてなアカウント、パスワードを書いてください。別途設定ファイルを準備してもよかったんだけど面倒だったので直接書くことにした。