Rubyで写真にタイトルを付けてFlickrにアップしよう!
毎回食事の写真を撮ってタイトル付きで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
- Macでは /opt/local/lib/ruby/gems/1.8/gems/rflickr-2006.02.01/GETTING-STARTED ↩
blog comments powered by Disqus