ここのところ、写真公開サイトFlickrのAPIを使っていろいろ試していますが、公式サイトにあるドキュメントでは今ひとつはっきりしないことも多いので、実地でやってみた結果を備忘録的に残してみることにしました。
今回は、写真の検索を行うflickr.photos.searchメソッドです。
flickr.photos.searchは、さまざまな条件を指定して写真の検索を行えるメソッドです。最低限必要な入力パラメータは、APIキーのみです。APIキーのみを指定して呼び出せば、「すべての」写真データを検索して返してきますが、これは現実的ではありません。
実際には、数に制限がありますので、「すべて」は返ってきません。
実用的なパターンとしては、ユーザIDを指定したり、タグや日付などの情報を指定するというものでしょう。すでに、ユーザIDと撮影日を指定して検索するということは、過去の記事で紹介しました。
入力パラメータは比較的わかりやすいので、公式サイトのドキュメントを見てもらうことにして、今回は戻ってくるもの(レスポンス)に絞りたいと思います。
ここでは、結果のわかりやすい、REST/XML形式を指定したということにします。生でXMLを見ると、こんな感じになっています。
<rsp stat="ok">
<photos page="1" pages="1" perpage="500" total="58">
<photo id="4771032717" owner="463900000000" secret="977972ee2c" server="4097" farm="5" title="新治市民の森(Niiharu Community Woods, Japan)" ispublic="1" isfriend="0" isfamily="0" />
<photo id="4770996281" owner="463900000000" secret="cc954b8780" server="4140" farm="5" title="新治市民の森(Niiharu Community Woods, Japan)" ispublic="1" isfriend="0" isfamily="0" />
<photo id="4770679648" owner="463900000000" secret="2650175c00" server="4077" farm="5" title="新治市民の森のホソハリカメムシ(Niiharu Community Woods, Japan)" ispublic="1" isfriend="0" isfamily="0" />
………
</photos>
</rsp>
XML全体はrsp要素で囲まれています。rsp要素のstat属性には、呼び出しがうまくいったか(ok)、それともダメだったか(fail)という情報がまず入ってきますので、これを確認しましょう。failの場合には、err要素が生成され、code属性にエラーコードが、msg属性にエラーメッセージが与えられます。エラーの内容を知るのに役立つでしょう。
<rsp stat="fail">
<err code="2" msg="Unknown user" />
</rsp>
最初の、成功のパターンに戻ります。呼び出しに成功してる場合には、photos要素が生成されます。photos要素の4つの属性、page, pages, perpage, totalは、それぞれ以下の意味を持ちます。
- page…レスポンスの何ページ目かということ。レスポンスが、複数のページで構成される場合がある。
- pages…総ページ数。
- perpage…ページあたりの要素数。
- total…今回返された要素数。
「ページ」というのが、ちょっとわかりにくいかも知れません。このAPIでは、同時に取得できる写真のデータは1,000までとなっています。もし、検索条件に一致する写真がこれより多い場合には、ページを分割して返します。とはいえ、連続して送ってくるわけではなく、「何ページ目が欲しい」というように明確に指定してやらねばなりません。そのときに使うのが、pageパラメータです。デフォルトでは1なので1ページ目が返りますが、レスポンスのpages属性を見れば何ページで構成されるかわかりますから、2ページ目以降が欲しければpageパラメータを変化させてやればOKです。
私の場合、perpageパラメータに大きな数を渡して、一度にたくさん返るようにしています。また、たくさん返らないように、検索条件をシビアにしています。
レスポンスの話に戻りましょう。個々の写真のデータは、photos要素で返されます。photo要素には、id, secret, owner, server, farm, title, ispublic, isfriend, isfamilyの属性が与えられます。id~titleはおわかりになるでしょう。ispublicなどは、公開先の程度です。私の場合、全体に公開していますので、ispublicが1となっています。
さて、flickr.photos.searchで得られる情報はこれだけなので、さらに情報が欲しければ、個別にAPIを呼び出す必要があります。これについては別の機会で取り上げましょう。