Yahoo!API の検索結果を JavaScript で表示
2006-09-15-1
[YahooHacks]
今回の YahooHacks は Ajax ネタです。
Yahoo! API による Web 検索結果を JavaScript でパーズして非同期で表示します。XMLと非同期の処理に、川崎ゆうすけさんによる jkl-parsexml.js を使ってみたら、非常に良いっす、スバラシス。
「まるごと Perl Vol.1」のJSON記事でも紹介されてましたね。
(検索サイトのサンプルを一時的に下記URLに置いておきます。
そのうち消えますのでご了承ください。
http://chalow.net/misc/yahoohacks-samp/hack_yjws_js.html)
■■■Yahoo!APIの検索結果をJavaScriptで表示する
Yahoo! API の Web 検索結果 XML をクライアント側で処理して表示します。
クライアント(ブラウザ)では、JavaScript で XML のパーズ、HTML の生成、
非同期出力を行っています。
XML のパーズと非同期処理は、川崎ゆうすけさんによる
jkl-parsexml.js (http://www.kawa.net/works/js/jkl/parsexml.html)
を使っています。
Perl の XML::Simple のように手軽に XML が扱え、とても便利です。
■プロキシ CGI
直接 Yahoo! API にアクセスして検索結果 XML を取得して加工したいと
ころですが、アクセスに用いる JavaScript の XMLHttpRequest は、
往々にしてリモートのコンテンツを取得できません。
そこで同じディレクトリにプロキシ CGI を置いて対処します。
このプロキシ CGI は、URL encode したキーワードが渡されると、
Yahoo! API にアクセスし、そのキーワードでの検索結果 XML を取得し、
そのまま表示するだけのものです。
以下にプロキシ CGI のコードを示します。
使用例:下記URLのようにパラメタを渡すと、キーワード「デジカメ」の
Yahoo! API 検索結果 XML が得られます。
http://example.com/hack_proxy.cgi?%E3%83%87%E3%82%B8%E3%82%AB%E3%83%A1
■コード
検索ページの HTML ファイルを下記に示します。
上記プロキシ CGI を通して取得した検索結果を処理して表示する
JavaScript のコードも含まれています。
■Hack の実行
jkl-pasexml.js とプロキシ CGI と検索ページ HTML を Web サーバ上の
同じディレクトリに置き、検索ページにアクセスします。
検索実行例を下図に示します。

参考ページ:
- Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/
- [ajax] JKL.ParseXML/ajax通信処理ライブラリ
http://www.kawa.net/works/js/jkl/parsexml.html
- 404 Blog Not Found:perl - no warnings 'unintialized'
http://blog.livedoor.jp/dankogai/archives/50622749.html
「no warnings 'unintialized'」、使い始めました!
関連書籍:
- Yahoo! Hacks
- まるごとPerl! Vol.1
- Ajax 実装のための基礎テクニック
Yahoo! API による Web 検索結果を JavaScript でパーズして非同期で表示します。XMLと非同期の処理に、川崎ゆうすけさんによる jkl-parsexml.js を使ってみたら、非常に良いっす、スバラシス。
「まるごと Perl Vol.1」のJSON記事でも紹介されてましたね。
(検索サイトのサンプルを一時的に下記URLに置いておきます。
そのうち消えますのでご了承ください。
http://chalow.net/misc/yahoohacks-samp/hack_yjws_js.html)
使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。
■■■Yahoo!APIの検索結果をJavaScriptで表示する
Yahoo! API の Web 検索結果 XML をクライアント側で処理して表示します。
クライアント(ブラウザ)では、JavaScript で XML のパーズ、HTML の生成、
非同期出力を行っています。
XML のパーズと非同期処理は、川崎ゆうすけさんによる
jkl-parsexml.js (http://www.kawa.net/works/js/jkl/parsexml.html)
を使っています。
Perl の XML::Simple のように手軽に XML が扱え、とても便利です。
■プロキシ CGI
直接 Yahoo! API にアクセスして検索結果 XML を取得して加工したいと
ころですが、アクセスに用いる JavaScript の XMLHttpRequest は、
往々にしてリモートのコンテンツを取得できません。
そこで同じディレクトリにプロキシ CGI を置いて対処します。
このプロキシ CGI は、URL encode したキーワードが渡されると、
Yahoo! API にアクセスし、そのキーワードでの検索結果 XML を取得し、
そのまま表示するだけのものです。
以下にプロキシ CGI のコードを示します。
#!/usr/bin/perl -T
use strict;
use warnings;
use LWP::Simple;
print "Content-Type: text/xml; charset=UTF-8\n\n";
no warnings 'uninitialized';
print get("http://search.yahooapis.jp/WebSearchService/V1/webSearch"
."?appid=YahooDemo&query=$ENV{'QUERY_STRING'}");
使用例:下記URLのようにパラメタを渡すと、キーワード「デジカメ」の
Yahoo! API 検索結果 XML が得られます。
http://example.com/hack_proxy.cgi?%E3%83%87%E3%82%B8%E3%82%AB%E3%83%A1
■コード
検索ページの HTML ファイルを下記に示します。
上記プロキシ CGI を通して取得した検索結果を処理して表示する
JavaScript のコードも含まれています。
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="jkl-parsexml.js"></script>
<script><!--
function yapi_search(key) {
var ec = encodeURI(key);
var http = new JKL.ParseXML("hack_proxy.cgi?" + ec);
var func = function (data) {
var r = data["ResultSet"]["Result"];
if (r == undefined) return;
var num = r.length;
if (num == undefined) {
r[0] = r;
num = 1;
}
for (var i = 0; i < num; i++) {
document.getElementById("results").innerHTML +=
'<h3><a href="' + r[i]["Url"]+'">' + r[i]["Title"] +
'</a></h3><p>' + r[i]["Summary"] + '</p>';
}
}
http.async(func);
http.parse();
}
// --></script>
</head>
<body>
<h1>Y!API Search (JavaScript)</h1>
<form name="search">
<input type="text" name="key" size="20">
<input type="button" value="search"
onclick="yapi_search(document.forms['search'].key.value)">
<input type="button" value="clear"
onclick="document.getElementById('results').innerHTML = ''">
</form>
<div id="results"></div>
</body>
</html>
■Hack の実行
jkl-pasexml.js とプロキシ CGI と検索ページ HTML を Web サーバ上の
同じディレクトリに置き、検索ページにアクセスします。
検索実行例を下図に示します。

参考ページ:
- Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/
- [ajax] JKL.ParseXML/ajax通信処理ライブラリ
http://www.kawa.net/works/js/jkl/parsexml.html
- 404 Blog Not Found:perl - no warnings 'unintialized'
http://blog.livedoor.jp/dankogai/archives/50622749.html
「no warnings 'unintialized'」、使い始めました!
関連書籍:
- Yahoo! Hacks
- まるごとPerl! Vol.1
- Ajax 実装のための基礎テクニック
