FlickrのAPIについて自分が少々はまったことのまとめ

FlickrAPIを弄っていて、少々はまったことがあったのでまとめます。

今回CPANモジュールのWebService::Simpleを使って、APIから自分が望むデータを取得しました。

取得したいデータは、任意のユーザの最新のフォトデータです。

使ったmethodは、flickr.photos.searchでした。

Flickrからは、xml形式でデータが渡されますので、WebService::Simpleのデフォルトで使えるXML::Simpleでパースしようと考えました。

しかしXML::SimpleでパースするとFlickrから贈られてきたxmlファイルの同じ階層の同じ要素の順番が崩れてしまうことに気づきました。この順番は、指定したユーザのフォトの最新のものから並んでいるので、順番がずれてしまうとどのフォトが最新のものかがわからなくなってしまいます。

そこでXML::Simpleは諦めました。

WebService::Simpleで使えるXMLパーサーにXML::LibXMLがありますので、それを使うことにしました。

で、XML::LibXMLを使ったことがなかったので、欲しい情報を取得するのにどう指定していいか分からず少々悩みました。

調べた結果、下記のように指定すれば欲しい情報が取得できることがわかりました。

 my $photo_id = $response->parse_response->findnodes("/*[local-name()='rsp']/*[local-name()='photos']/*[local-name()='photo'][1]/\@id");

findnodesメソッドの引数は、XPathで指定するらしいけど、あまりXPathを知らないので、こんな長くなってしまっています。

一応、これで最新のフォト情報が取得できるようになりました。パチパチ・・・

[>例)対象のxmlファイル
[>Flickrの公式APIドキュメント