flickr apiをrubyで使う

ruby cookbookに載ってたので使って見ることにしました。

以下はソース.一部変更してあります(文字列操作の部分 + の部分を << に変更 )

require 'open-uri'
require 'rexml/document'
require 'cgi'

FLICKR_API_KEY = 'your api key'

def flickr_call(method_name, arg_map={}.freeze)
  args = arg_map.collect {|k,v| CGI.escape(k) << '=' << CGI.escape(v)}.join('&')
  url = "http://www.flickr.com/services/rest/?api_key=%s&method=%s&%s" %
    [FLICKR_API_KEY, method_name, args]
  doc = REXML::Document.new(open(url).read)
end

def pick_a_photo(tag)
 doc = flickr_call('flickr.photos.search', 'tags' => tag, 'license' => '4',
                   'per_page' => '1')
 photo = REXML::XPath.first(doc, '//photo')
 small_photo_url(photo) if photo
end

def small_photo_url(photo)
 server, id, secret = ['server', 'id', 'secret'].collect do |field|
   photo.attribute(field)
 end
 puts "http://static.flickr.com/#{server}/#{id}_#{secret}_m.jpg"
end

pick_a_photo('elephants')

結果は以下のようになりました

http://static.flickr.com/1295/836729547_66bdc17261_m.jpg

なかなかシンプルで綺麗なコードだったので打つだけでも勉強になりました。( ・∀・)


特に、

def small_photo_url(photo)
 server, id, secret = ['server', 'id', 'secret'].collect do |field|
   photo.attribute(field)
 end
 puts "http://static.flickr.com/#{server}/#{id}_#{secret}_m.jpg"
end

ここら辺の使い方を丁度知りたかったところなので、ためになりました。xmlの処理部分がいい味を出してると思います。まぁこんな事しなくてもFlickrのサイトに使えるライブラリについての説明がなされてましたけどね

Ruby

* flickr-ruby
* flickr.rb
* rflickr



はてさて、次は何をしようかな...