何で今までやらなかった。
使い方
/usr/local/bin/fotolife *.png
はてなフォトライフにアップロードするスクリプト
#!/usr/bin/env ruby -Ku require 'rubygems' require 'net/http' require 'wsse' require 'base64' require 'digest/sha1' require 'date' require 'pp' require 'optparse' $show_img_url = 0 opt = OptionParser.new opt.on("-u","--url"){ $show_img_url = 1 } opt.on("-s","--src"){ $show_img_url = 2 } opt.parse!(ARGV) if ARGV.size < 1 or not ARGV.all?{|e| File.exist? e} then puts "usage: #{__FILE__} 画像ファイル名 ファイル名はタイトルになる。 タイトル指定したいときはファイル名を使えば良い。 -u (--url) で <img> タグ -s (--src) で src url " exit 2 end ARGV.each{|e| f_name = e tmp_name = "" #ファイル名をタイトルに採用 a = File.basename(f_name).split('.');a.pop title = a.join('.') #png だったらjpg にして送信(fotolifeは容量制限がきついのでPNGよりJPEGにする) if ( File.extname(e) =~ /png/i) then tmp_name = e+"_fotolife_tmp_"+Time.now.to_i.to_s + ".jpg" `convert \"#{f_name}\" \"#{tmp_name}\"` f_name = tmp_name end #写真の jpg は向きを修正する if ( File.extname(e) =~ /jpe?g/i && !`which orientation_fix `.empty?) then tmp_name = "#{title}_orientation_fixed_"+Time.now.to_i.to_s+".jpg" `cp '#{f_name}' '#{tmp_name}' ` `$(which orientation_fix) #{tmp_name} ` f_name = tmp_name end #写真のサイズを適宜修正する if (width = `identify -format %w #{f_name}`.strip.to_i) > 1200 `mogrify -resize 1200 #{f_name} ` end #main content = Base64.encode64(open(f_name).read) xml = "<?xml><entry xmlns=\"http://purl.org/atom/ns#\" >"+ "<title>#{title}</title>"+ "<content mode='base64' type='image/jpeg'>#{content}</content>"+ "</entry>" username, api_key = %w!takuyaXXX TOKEN_KEY! http = Net::HTTP.start("f.hatena.ne.jp", 80) #response = http.post('/atom',xml, {'X-WSSE' => WSSE::header(username,api_key)}) response = http.post('/atom/post',xml, {'X-WSSE' => WSSE::header(username,api_key)}) response.body =~ /<hatena:syntax>([^<]+)<\/hatena:syntax>/ foto_id = $1 puts "[#{foto_id}#{':w600' if width>1200}](#{title})" unless $show_img_url > 0 if $show_img_url > 0 then user = foto_id.split(/:/)[2] f_id = foto_id.split(/:/)[3].gsub /j/, "" src = "http://cdn-ak.f.st-hatena.com/images/fotolife/t/#{user}/#{f_id[0,8]}/#{f_id}.jpg" puts "<img src='#{src}' />" if $show_img_url == 1 puts src if $show_img_url == 2 end File.unlink tmp_name if File.exists? tmp_name File.unlink f_name if File.exists?(f_name) && (f_name != e) }
楽ちん。
Automatorと組み合わせて、ドラッグドロップで送信できてもいいかも。
2012/03/06改訂
- -u オプション
- IMGタグ生成
をつけた。-u なしだと、はてダ埋め込み用の専用タグになるようにした。