InfoseekもYahooやgooと同じ方法で利用することができます。異なるのはCGI側で呼び出すInfoseekのURL部分のみになります。(サンプルを
実行する)
			#!/usr/local/bin/ruby
			require "kconv"
			require "cgi-lib"
			input = CGI.new
			inputdata = input["query"]
			bom = "\xef\xbb\xbf"
			print "Content-type: text/html\n\n"
			print bom
			fh = open("| curl 'http://www.infoseek.co.jp/OTitles?lk=noframes&qp=0&st=0&nh=10&col=OW&svp=SEEK&svx=100600&qt="+inputdata+"'")
			while !fh.eof
			str = fh.gets
			print Kconv::toutf8(str)
			end
			fh.close
 InfoseekやYahooやGoogleと比べて検索結果が表示されるのが遅いため、本当にスクリプトが動作しているかどうか不安になります。このような処理速度が遅く、待ち時間が発生する場合には、状況を示すプログレスバー(進行状況を示すグラフ)を表示するようにします。プログレスバーの表示は、あらかじめdivタグでメッセージ等を用意しておき、スタイルシートで非表示にしておきます。検索が開始されたら、非表示になっていたプログレスバーを表示させます。検索が終了したら、プログレスバーを非表示にすればできあがりです。(サンプルを
実行する)
			<html>
			<head>
			<meta http-equiv="content-type" content="text/html;charset=utf-8">
			<title>Infoseek検索結果をマルチウィンドウで表示する</title>
			<link rel="stylesheet" href="main.css" type="text/css" media="all">
			<script type="text/javascript" src="xmlhttp.js"></script>
			<script type="text/javascript"><!--
			function InfoseekSearch()
			{
			 srchStr = document.getElementById("query").value;
			 if (srchStr == "") return;
			 srchStr = srchStr.replace(/ /g,"%20");
			 httpObj = createXMLHttpRequest(displayData);
			 if (httpObj)
			 {
			  httpObj.open("GET","curl.rb?query="+encodeURI(srchStr)+"&cache="+(new Date()).getTime(),true);
			  $("progress").style.visibility = "visible";
			  httpObj.send(null);
			 }
			}
			function displayData()
			{
			 if ((httpObj.readyState == 4) && (httpObj.status == 200))
			 {
			  newWindow();
			  $("result"+ winNum).innerHTML = httpObj.responseText;
			  winNum++;
			 }
			}
			function newWindow()
			{
			 $("progress").style.visibility = "hidden";
			 var dObj = $("window0").cloneNode(true);
			 var winObj = $("contents").appendChild(dObj);
			 winObj.id = "window"+winNum;
			 winObj.childNodes[0].id = "result"+winNum;
			 addEvent("window"+winNum,"click",closeWindow,false);
			 addEvent("window"+winNum,"mousedown",dragObj.dragStart,false);
			 winObj.style.left = 10+Math.floor(Math.random()*400)+"px";
			 winObj.style.top = 150+Math.floor(Math.random()*200)+"px";
			 winObj.style.visibility ="visible";
			 winObj.style.zIndex = dragObj.zIndex + 1;
			 winObj.childNodes[0].style.visibility = "visible";
			 dragObj.window.push("window"+winNum);
			 dragObj.maxLayer = dragObj.window.length;
			}
			// ウィンドウを閉じる処理
			function closeWindow(e)
			{
			 // クローズボックス上でマウスボタンが押されたか?
			 if ((dragObj.offsetX < 2) || (dragObj.offsetX >14) || (dragObj.offsetY < 4) || (dragObj.offsetY > 16)) return;
			 wObj = getEventTarget(e);
			 contObj = $("contents");
			 // ウィンドウをノードから削除
			 for (var i=0; i<contObj.childNodes.length; i++)
			 {
			  if(contObj.childNodes[i].id == wObj.id) contObj.removeChild(contObj.childNodes[i]);
			 }
			 // ウィンドウリストから削除
			 var temp = new Array();
			 for (i=0; i<dragObj.window.length; i++)
			 {
			  if (dragObj.window[i] != wObj.id) temp.push(dragObj.window[i]);
			 }
			 dragObj.window = temp;
			}
			function initObj()
			{
			 window.document.onmousemove = dragObj.dragProc;
			 window.document.onmouseup = dragObj.dragEnd;
			 winNum = 1;
			 dragObj.window = [];
			 dragObj.maxLayer = 1; // 最大レイヤー枚数
			}
			// --></script>
			 </head>
			 <body onload="initObj()" oncontextmenu="return false">
			  <h1>Infoseek検索結果をマルチウィンドウで表示する</h1>
			  <p>読み込み中はプログレスバー(進行状況表示)が表示されます</p>
			  <form method="get" name="ajaxForm" onsubmit="InfoseekSearch();return false;">
			   <input type="text" value="" id="query">
			   <input type="button" value="Infoseek検索" onClick="InfoseekSearch()">
			  </form>
			  <div id="contents"></div>
			  <div id="window0" class="windowBorder"><div id="result0" class="windowContents"></div>
			  </div>
			  <div id="progress"><img src="ring.gif"> 検索結果を読み込み中です...</div>
			 </body>
			</html>
 次項では楽天市場の検索結果を表示させてみます。
[
第六章 4:楽天市場の検索結果を表示するへ]
[
目次へ]
(2006.1.19)