毎回食事の写真を撮ってタイトル付きでFlickrにアップしている タイトルは「Lunch Sep 29 2009」のように 食事の種別と日付にしている 毎食となると月に100以上も写真をアップすることになるので このタイトル付けは結構しんどい 何の目的もなく食事の写真を撮っているのでやめてもいいんだけど こういうことは一旦始めるとやめるのにも覚悟がいる そこで覚悟を先送りにしたい自分の結論はこうなる

こういう面倒なことはRubyにやってもらおう!

Exifデータの取得

デジカメで撮った写真データにはExifというメタデータが付いている Exifには撮影日時のデータが含まれているので これを読み出せれば上記のようなタイトルの構築は簡単だ

Rubyにはこの目的にexifrというライブラリがある これをインストールして使ってみよう (Mac OSX Tigerを前提に書いています)

% sudo gem install exifr

まずはirbで

% irb -rexifr
 irb(main):001:0> p01 = EXIFR::JPEG.new "RIMG0001.JPG"
 => #<EXIFR::JPEG:0x5ef948 @bits=8, @height=2448, @width=3264, @exif=[{:image_desc ription=>"", :make=>"RICOH", :model=>"GR Digital", :orientation=>#<EXIFR::TIFF::O rientation:0x5fcd3c @value=1, @type=:TopLeft>, :x_resolution=>(72/1), :y_resoluti on=>(72/1), :resolution_unit=>2, :date_time=>2009-09-29 19:37:07 +0900, :ycb_cr_positioning=>2, :copyright=>"(C) by GR Digital User", :exposure_time=>(1/9), :f_number=>(12/5), :exposure_program=>2, :iso_speed_ratings=>154, :date_time_original=>2009-09-29 19:37:07 +0900, :date_time_digitized=>2009-09-29 19:37:07 +0900, :compressed_bits_per_pixel=>(14/5), :aperture_value=>(5/2), :brightness_value=>(858993455/2), :exposure_bias_value=>(0/1), :max_aperture_value=>(12/5), :metering_mode=>5, :light_source=>0, :flash=>16, :focal_length=>(59/10), :color_space=>1, :pixel_x_dimension=>3264, :pixel_y_dimension=>2448, :exposure_mode=>0, :white_balance=>0, :scene_capture_type=>0, :sharpness=>0}, {:compression=>6, :x_resolution=>(72/1), :y_resolution=>(72/1), :resolution_unit=>2, :jpeg_interchange_format=>25361, :jpeg_interchange_format_length=>5397}]> 
 irb(main):002:0> p01.date_time_original
 => 2009-09-29 19:37:07 +0900
 irb(main):003:0> p01.date_time_original.class
 => Time

ほうこりゃ簡単だ EXIFR::JPEG#date_timeはTimeクラスを返すので Time#strftimeが使える

irb(main):004:0> p01.date_time_original.strftime("%b %d %Y")
 => "Sep 29 2009"

Flickrへのアップロード

次にFlickrへのアップロードだ FlickrにはFlickr上の写真を操作するためのAPIが用意されている APIには写真をFlickrにアップするためのメソッドもある このAPIを使うには自分のFlickrアカウントにリンクした API Keyを事前に取得しておく必要がある

Flickr Services http://www.flickr.com/services/

また写真をアップするためにはそのプログラムを 対象アカウントに認証させるためのトークンの取得が必要になる

Rubyにはrflickrというライブラリがあり 認証トークンの取得および写真のアップロードの機能を持っている これをインストールして使ってみよう

% sudo gem install rflickr

更新が止まっていてRuby1.9には対応していない 添付のGETTING-STARTEDにはトークン取得のためのサンプルコードがある1

flickr = Flickr.new(token_cache_file,MY_APPLICATION_KEY,MY_SHARED_SECRET)
  unless flickr.auth.token
    flickr.auth.getFrob
    url = @flickr.auth.login_link
    puts "You must visit #{url} to authorize this application.  Press enter"+
     " when you have done so. This is the only time you will have to do this."
    gets
    flickr.auth.getToken
    flickr.auth.cache_token
  end

このコードを実行してターミナルに表示されたURLにアクセスし そこでこのプログラムに対する認証を行えば token_cache_fileに認証トークンが保存されるようだ 二度目からは取得した認証トークンを使って プログラムの認証が行われる

以上の知識を使ってFlickrPhotoクラスを書いてみた

使い方は以下のようにする

1.FlickrPhoto.set_tokenでプログラムを認証させる 2.FlickrPhoto.newで写真のオブジェクトを生成する 3.タイトルなど必要な属性をセットする 4.FlickrPhoto#uploadで写真をアップロードする

保証はありませんが同じようなことで お困りの方がおられたら使ってください

(参考) digital:pardoe - Using rFlickr

Ruby を使って Flickr へ写真をアップロード - まちゅダイアリー(2008-10-20)

(追記:2009/10/11)撮影日を取得するのにdate_timeではなくdate_time_originalを使うよう修正しました。API KeyをPitを使って管理するようにしました。 アカウント情報を管理するコマンド pit - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech

  1. Macでは /opt/local/lib/ruby/gems/1.8/gems/rflickr-2006.02.01/GETTING-STARTED


blog comments powered by Disqus
ruby_pack8

100円〜で好評発売中!
M'ELBORNE BOOKS