Rubyで「Flickr API」を利用する
金曜の夜に出発して、日曜の夜まで、スキーにいってきました。
今年の初すべりです。
安宿でしたので、ネット環境などなく更新はお休みでした。
もし、宿にネット環境があったとしても、たぶん更新できなかったと思います(^^;
今回のスキー旅行は、非常にハードでした。基礎体力なさすぎです(><)。
さて、まだまだ疲れの残る体に鞭をうって、更新開始です。
今日は、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を作成することができました。
今日はこれにて、静養モードに突入です(笑)。