それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

はてなフォトライフにアップロードするスクリプト

何で今までやらなかった。

アップロードが楽ちんに

使い方

/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 なしだと、はてダ埋め込み用の専用タグになるようにした。

2014/04/05

:-s オプションを追加
: fotolife のトークン認証方式に変更
: retina 液晶でキャプチャするとサイズが巨大なのでリサイズする。

実行例

フォトライフは面倒くさいのです。ブラウザのアップロードから写真埋め込みまでがとても面倒。はてなダイアリに写真を載せるのがとても面倒だった。
これでとても簡単になった。