« 「楽天市場」 Web API(β版)を公開 | メイン | 無料マンガ雑誌 「コミック・ガンボ」 »

Rubyで「Flickr API」を利用する

  はてなブックマークに追加 このエントリを livedoor クリップへ追加

金曜の夜に出発して、日曜の夜まで、スキーにいってきました。
今年の初すべりです。

安宿でしたので、ネット環境などなく更新はお休みでした。
もし、宿にネット環境があったとしても、たぶん更新できなかったと思います(^^;
今回のスキー旅行は、非常にハードでした。基礎体力なさすぎです(><)。


さて、まだまだ疲れの残る体に鞭をうって、更新開始です。


今日は、rubyから「Flickr API」を利用して画像を検索する方法(コード)を紹介します。
「Flickr API」には、REST形式で利用する方法とxml-rpcで利用する方法の2通りの利用方法が提供されています。

今回は、RESTを利用する方法をつかって画像検索に挑戦です。
「Flickr API」を利用するためには、Flickrのアカウントが必要です。お持ちでない方は、こちらからアカウントを取得してください。

アカウントを取得したら、「Sign In」した状態で、さらに「API Key」を取得してください。


コーディングの内容は、大きく分けて次の2つです。

(1)画像検索API「flickr.photos.search」をつかって画像を検索する。

(2)検索によって得られた情報から、画像のあるURLを作成する。


では、早速コードを示します。


require 'net/http'
require 'cgi'
require 'rexml/document'

FLICKR_BASE_URL = "http://api.flickr.com/services/rest/?"
FLICKR_API_KEY = "[API KEYを指定する]"

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

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

# 検索で取得するリストの数を指定する
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 = xml = REXML::Document.new( Net::HTTP.get( url ) )


# 得られえたxmlから画像を取得するためのURLを作成する
# (参考) http://www.flickr.com/services/api/misc.urls.html
xpath = "rsp/photos/photo"
xml.elements.each( xpath ) { |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

}


以上です。他にも指定できるパラメータがありますが、重要なものは押さえていると思います。

AmazonなどのAPIと違って、画像を取得するためにURLを自分で作成する手間があります。
ですが、「REXML」を利用すると上のコードのように、簡単にURLを作成することができました。


今日はこれにて、静養モードに突入です(笑)。




Ads BOARD








最近のエントリーとその関連エントリー

トラックバック

このエントリーのトラックバックURL:
http://kazuhiro.ty.land.to/blog/mt-tb.cgi/130

  Map