Happy My Life

日常とか技術とか

Flickrでの画像検索

flickrの画像を取得しよう、ちょっと調べてみた。 Flickr Servicesを眺めてみると、Rubyには3つのライブラリがあるらしい。 googleに尋ねてみると、rflickrが情報量が豊富だった。Railsからも簡単に使えるしね。

ただ画像検索するだけなら、ライブラリを使うまでも無かったorz。 このサイトを参考に、サンプルを動かしてみたら、画像urlが取れた。 なんとなくhpricotに対応してみた。 あんまりコードは変わってないけど。

ちなみに、画像フォーマットをpngやgifにしたり、画像サイズを変更するのは、URLの変更でできるそうな。

require 'rubygems'
require 'net/http'
require 'cgi'
require 'hpricot'

FLICKR_BASE_URL = "http://api.flickr.com/services/rest/?"
FLICKR_API_KEY = ""

# 利用するAPIを指定する
# (参考) http://www.flickr.com/services/api/flickr.photos.search.html
apiName = "flickr.photos.search"

# 検索キーワードを指定する
searchKeywords = "blue sky"

# 検索で取得するリストの数を指定する
itemNum = "10"

# 並び替える方法を指定する(人気の高い順)
sort = "interestingness-desc"

# 出力フォーマットを指定する
outputFormat = "rest"
parameters = {
 :api_key => FLICKR_API_KEY,
 :method => apiName,
 :text => searchKeywords,
 :sort => sort,
 :per_page => itemNum,
 :format => outputFormat
}

paramString = (
 parameters.collect { |key,value| "#{key}=#{CGI::escape(value)}" }
).join('&')


url = URI.parse( FLICKR_BASE_URL + paramString )

# 得られえたxmlから画像を取得するためのURLを作成する
# (参考) http://www.flickr.com/services/api/misc.urls.html
doc = Hpricot.XML(Net::HTTP.get( url ) )
(doc/:photos/:photo).each {|element|

  title = element.attributes["title"]
  farm = element.attributes["farm"]
  server = element.attributes["server"]
  id = element.attributes["id"]
  secret = element.attributes["secret"]

  imageURL = "http://farm#{farm}.static.flickr.com/#{server}/#{id}_#{secret}_t.jpg"

  puts imageURL
}