2007年06月21日

php と flickr APIを使った写真検索 このエントリーをはてなブックマークに追加

こんにちは、浅茅陽子です(嘘です)。

以前 Flickr の写真をBLOGに貼る Flickr Tag というものをテキトーに作ってみたが、実はその際は Flickr Services というFlickrで提供されているAPIは全く使っていなかった。ちなみに、Flickr TAGではFlickrが提供するRSS情報を元に写真を表示するような実装方法だった。

で、このBLOGにFlickr APIについての問い合わせが先日あったので、ちょいと調べてみると、APIでいろいろできそーなことがわかってきた。

なので、試しに Flickr の日本語検索サイトを作ってみた。



まあ、上記サイトではFlickrの写真を検索できるよーなものなのだが、ここでは Flickr API を php で利用する方法についてメモっておく。

FlickrのAPI の基本は REST , XML-RPC , SOAP形式で指定されたAPIのエンドポイントにパラメータを渡し、その結果を REST , XML-RPC , SOAP , JSON , PHP(シリアライズ)で取得できるよーになっている。

また、APIにリクエストを投げるときには、API Keys が必要になる。API Keys は、

http://www.flickr.com/services/api/keys/

にアクセスして各自のAPIキーを取得する。
また、リクエスト時に日本語のような2バイト文字列を渡したい場合はUTF-8でURLエンコードした形式でリクエストする。

レスポンスのフォーマットは上記の5種類選択できるが、エンドポイントにリクエストを投げる際に format=rest とか format=json とかって感じにすればよい。

今回はとりあえずRESTなるものを使ってみた。

例えば、APIKEYが「abcdefgabcdefg」の場合「公園」に関係する写真を検索するには、こんな感じで書けばよいはず。


define (APIKEY , "abcdefgabcdefg");
define (PER_PAGE , 100); // 100ページごと区切る
$str = "公園";
$page = 1; // とりあえず1ページ目
// proxyを利用する場合は $use_proxy = 1;
$use_proxy = 0;
$proxy_host = 'proxy.example.com';
$proxy_port = 8080;
$no_proxy = array(
  'localhost', // localhost
  '127.0.0.0/8', // loopback
);
include('proxy.php');
$url = "http://www.flickr.com/services/rest/?";
$url .= "method=flickr.photos.search";
$url .= "&format=rest";
$url .= "&api_key=".APIKEY;
$url .= "&page=".$page;
$url .= "&per_page=".PER_PAGE;
$url .= "&text=".urlencode($str);

$rdata = http_request($url);
$data = $rdata['data'];
$xml = simplexml_load_string($data);


ここまでくれば、$xmlにデータが取得できているので、あとはforeachで、


foreach($xml->photos->photo as $item){
  if ($item['title']<>""){
    echo $item['title'].'<br />';
  }else{
    echo '(タイトルなし)<br />';
  }
}


って感じにすればよさそう。
print_r($xml); などとしてxmlファイルにどんな感じで取得されているかを見るってのがよろしいと思われる。

更に上記XMLファイルから写真のidを$item['id']で取得し、そのidを利用して写真の詳細情報を更に取得すればよかろう。

また、$strは通常フォームから入力されたものになるので、
$str = $_GET['word'];
などとなるよーな感じであろう。

この基本ができれば、あとは Flickr Services と睨めっこしてなんとかなる(はず)。

うーむ。結構便利だな。
posted by りょーち | Comment(2) | TrackBack(0) | Web周辺技術
この記事へのコメント
こんにちは.APIの世界は面白そうですね.
りょーちさんの記事を拝見していると,なんとなく自分でも組めそうな気がしてきます(笑)
今度,zooomr(まだしつこく使ってます:))もAPIを公開するようなんですが,自分でやってみようかなってのは,無謀かなあ.今でもプログラミングできるのって,学生の頃にやったN88-BASICとFORTRAN,それと工作機械に搭載されているNC装置のだけなんですよね.トホホ.
Posted by yanz at 2007年06月22日 08:47
yanzさん、こんにちは。りょーちです。
コメントいただきましてありがとうございます。
zooomrもAPI公開なんですねー。
>なんとなく自分でも組めそうな気がしてきます
できますよ。きっと(^^;
API系はやることが(できることが)きまっているので、プログラミングはしやすいよーな気がします。

>N88-BASICとFORTRAN
なんとなく似たような年代なのかもしれませんねー。
ちなみに、おうちにあった初めてのパソコンはシャープのMZ-1200というものでした(^^;
BASICをカセットでロードするよーなことをやってたよーな・・・

って年がばれますね(^^;

かっちょいいプログラムができたらおしえてくださいねー。

ではでは。
Posted by りょーち at 2007年06月22日 22:13
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: