Yahoo!画像検索APIでスライドショー
2006-09-19-1
[YahooHacks]
今回の YahooHacks は、Y!API + Ajax + JSON で、
検索結果画像をスライドショーっぽく表示します。
プレゼンっぽいことができます。
(一時的にデモを置いておきます。そのうち消えます。ご了承ください。
http://chalow.net/misc/yahoohacks-samp/hack_slideshow.html)
■■■画像検索結果をスライドショーで表示する
Yahoo!画像検索Webサービスを用いて、
検索結果を順番に提示するスライドショー形式にするハックです。
スライドショーは、
プロキシ CGI とメインページ (HTML + JavaScript) から構成されます。
検索結果の取得・表示にはAjaxによる方法で行っています。
Ajax には prototype.js (http://prototype.conio.net/) を使っています
(原稿執筆時の最新バージョン 1.4.0)。
なお、画像検索結果でスライドショー、プレゼンテーションをするための
本格的なサイトとして、MashStar (http://mashstar.com/) が知られてい
ます。いざというときにオススメです。
■コード
プロキシ CGI は、url encode された UTF-8 の検索キーワードを受け取り、
内部で Yahoo! API で画像検索を行い、画像とサムネイルの URL を JSON
形式で返します。
以下、プロキシ CGI のコードです。
検索結果 XML をハッシュのリストにした後、
objToJson() で JSON に変換しています。
メインページ側の JavaScript プログラムでは、
prototype.js を使い検索キーワードをプロキシ CGI に投げ、
JSON による検索結果を受け取り、
スライドショーとして表示するよう加工します。
以下、メインページの HTML, JavaScript コードです。
JavaScript 部では、
prototype.js の Ajax.Request でプロキシ CGI へアクセスし、
showResponse() で CGI の出力 (JSON) を配列 images へ格納し、
show_image() で images 内の画像を表示する HTML コードを生成しています。
■Hack の実行
プロキシCGIとメインページと prototype-1.4.0.js を同じディレクトリ
に置き、ブラウザからメインページにアクセスします。
左上のフォームに検索キーを入力し「start」をクリックすると、
1枚目の画像が表示されます。
「next」をクリックすると次の画像が表示されます。
画像の左右には、前の画像と次の画像のサムネイルも表示されます (下図)。
参考ページ:
- Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/
- Prototype JavaScript Framework
http://prototype.conio.net/
- JSON/簡単なテスト:基本
http://jsgt.org/ajax/ref/test/json/test1.htm
- MashStar | 準備ゼロの最強プレゼンテーション!
http://mashstar.com/
関連書籍:
- Yahoo! Hacks
- Ajax 実装のための基礎テクニック
検索結果画像をスライドショーっぽく表示します。
プレゼンっぽいことができます。
(一時的にデモを置いておきます。そのうち消えます。ご了承ください。
http://chalow.net/misc/yahoohacks-samp/hack_slideshow.html)
使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。
■■■画像検索結果をスライドショーで表示する
Yahoo!画像検索Webサービスを用いて、
検索結果を順番に提示するスライドショー形式にするハックです。
スライドショーは、
プロキシ CGI とメインページ (HTML + JavaScript) から構成されます。
検索結果の取得・表示にはAjaxによる方法で行っています。
Ajax には prototype.js (http://prototype.conio.net/) を使っています
(原稿執筆時の最新バージョン 1.4.0)。
なお、画像検索結果でスライドショー、プレゼンテーションをするための
本格的なサイトとして、MashStar (http://mashstar.com/) が知られてい
ます。いざというときにオススメです。
■コード
プロキシ CGI は、url encode された UTF-8 の検索キーワードを受け取り、
内部で Yahoo! API で画像検索を行い、画像とサムネイルの URL を JSON
形式で返します。
以下、プロキシ CGI のコードです。
検索結果 XML をハッシュのリストにした後、
objToJson() で JSON に変換しています。
#!/usr/bin/perl -T use strict; use warnings; use LWP::Simple; use XML::Simple; use JSON; my $key = do {no warnings 'uninitialized'; $ENV{'QUERY_STRING'} || ""}; my $url = "http://search.yahooapis.jp/ImageSearchService/V1/" ."imageSearch?appid=YahooDemo&query=$key&results=10"; my $r = get_images($url); my @urls = map {{Url => $_->{Url}, TUrl => $_->{Thumbnail}{Url}}} (@$r); print "Content-Type: text/javascript; charset=UTF-8\n\n"; print objToJson(\@urls), "\n"; sub get_images { my ($url) = @_; my $yahoo_response = get($url); return [] unless $yahoo_response; my $xmlsimple = XML::Simple->new(); my $yahoo_xml = $xmlsimple->XMLin($yahoo_response); if (ref($yahoo_xml->{Result}) eq "ARRAY") { # found: many return $yahoo_xml->{Result}; } elsif (ref($yahoo_xml->{Result}) eq "HASH") { # found: 1 return [$yahoo_xml->{Result}]; } return []; # not found }
メインページ側の JavaScript プログラムでは、
prototype.js を使い検索キーワードをプロキシ CGI に投げ、
JSON による検索結果を受け取り、
スライドショーとして表示するよう加工します。
以下、メインページの HTML, JavaScript コードです。
JavaScript 部では、
prototype.js の Ajax.Request でプロキシ CGI へアクセスし、
showResponse() で CGI の出力 (JSON) を配列 images へ格納し、
show_image() で images 内の画像を表示する HTML コードを生成しています。
<html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="prototype-1.4.0.js" type="text/javascript"></script> <script><!-- function get_json(key) { var url = 'hack_json_image.cgi?' + key; new Ajax.Request (url, {method: 'GET', onComplete: showResponse}); } var images; function showResponse(req, json) { eval("images = " + req.responseText); show_image(); } var cur = 0; function show_image() { $('show').innerHTML = "<h1>slide " + (cur + 1) + "</h1>"; if (cur > 0) $('show').innerHTML += '<img src="' + images[cur -1].TUrl + '">'; $('show').innerHTML += '<a href="' + images[cur].Url + '"><img src="' + images[cur].Url + '"></a>'; if (++cur >= images.length) cur = 0; $('show').innerHTML += '<img src="' + images[cur].TUrl + '">'; } // --></script> </head> <body> <input type="text" id="key" size="20"> <input type="button" value="start" > <input type="button" value="next" > <hr> <div id="show">Slide Show!</div> </body> </html>
■Hack の実行
プロキシCGIとメインページと prototype-1.4.0.js を同じディレクトリ
に置き、ブラウザからメインページにアクセスします。
左上のフォームに検索キーを入力し「start」をクリックすると、
1枚目の画像が表示されます。
「next」をクリックすると次の画像が表示されます。
画像の左右には、前の画像と次の画像のサムネイルも表示されます (下図)。
参考ページ:
- Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/
- Prototype JavaScript Framework
http://prototype.conio.net/
- JSON/簡単なテスト:基本
http://jsgt.org/ajax/ref/test/json/test1.htm
- MashStar | 準備ゼロの最強プレゼンテーション!
http://mashstar.com/
関連書籍:
- Yahoo! Hacks
- Ajax 実装のための基礎テクニック