hellkite 日記と雑記とメモ。

Shiki Kazamaの駄文と音楽と、時々技術な感じ

あるフォルダに入っている画像ファイルをはてなフォトライフにアップするスクリプト


スポンサーリンク


そんな機能を持ったスクリプトを組みました。言語はRuby
とはいっても、肝心のエンジン部分はNAT氏のhatena-photoクラスを利用。
はてなフォトライフAtomAPIで画像を登録してみる - NAT’s Programming Champloo


まず、hatena-photo.rb内で使われているライブラリをチェック。'http-access2'が必要みたいなので、gemでインストール。
名前が変わってて、今はhttpclientというらしい。

sudo gem install httpclient --source http://dev.ctor.org/download/


gemでインストールしたので、hatena-photo.rbの先頭で、

require 'rubygems'

を追加。


登録スクリプトの方はこんな簡単なものになりました。うちの環境・・・MacOSX+MacPortではとりあえず動きます。画像ファイルの拡張子の部分は、JPGと大文字になっていますが、メイン出使っているiPhotoの表記に合わせた結果です。

#!/opt/local/bin/ruby
#!/usr/bin/ruby

# はてなフォトライフ登録スクリプト
#
# あるフォルダにある画像ファイルをフォトライフに登録する。
# タイトルはあまり登録しないので無視。
# 起動オプションでタグの設定が可能。
# 実行例:$ hatena_photoup.rb 旅行 柏崎

require '../lib/hatena-photo'

username = 'user_name'
password = 'password'

upload_dir = '/pass/to/directory/'

photo = HatenaPhoto.new(username, password)

# create title(tags)
title = ''
ARGV.each {|t|
  title << '[' + t + ']'
}
puts title

# create uplist and upload files
Dir::glob(upload_dir + '*.JPG').each {|f|
  # 各ファイルをUPする
  puts "up-> #{f}"
  response = photo.post(title, f)
}

puts 'Upload Finished!!'


これだけなのに1時間以上かかりました・・・なんてことだ・・・

  • http-access2のrequireでエラーが出まくった
    • require 'rubygems'を追加して解決。初歩的すぎる。
  • スクリプト自体に実行パーミッションを与えていなかった
    • chmod +x hatena_photoup.rb
  • svnX*1の操作に戸惑う
  • スクリプト自身の引数が入っている変数名を忘れた
    • まぁ調べればすぐ出てきますけどね・・・答えはARGV。


それにしても、これだけで作れたのはNAT氏のhatena-photoクラスのおかげです。中をみたけど、いまいち理解できませんでしたが・・・。勉強しないとなぁ。


これからは、アップしたいファイルをiPhotoからディスクトップ上にあるアップ用フォルダにドラッグアンドドロップして、このスクリプトを実行してやれば、何十枚でも(?)一度に登録できるようになりました。アップしたファイルがそのままフォルダに残ってしまいますけど、まぁそのくらいいいでしょう。・・・というより、ファイルを削除するスクリプトはちょっと怖いので実装しませんけど・・・。
写真アップするのが面倒で、あまり書いてこなかったネタもこれで書きやすくなるかな?


ちなみにアップするのに1枚当たり10秒程度かかりました。一枚2.1MB程度をサーバ側で縮小してるからこんなもんか?まぁ、待ってるだけでいいので別にかまわないんですけど。

*1:バージョン管理ソフトのGUIフロントエンド