用ajax+json连接yahoo搜索web service打造本地搜索引擎

今天写了一个demo,利用yahoo提供的Yahoo! UI Library调用search web service,实现本地搜索.下面是代码片断说明:

调用Yahoo! UI Library Connection Manager的必要代码:

JAVASCRIPT:
  1. <!-- Namespace source file -->
  2. <script src = "js/YAHOO.js"></script>
  3. <!-- Connection Manager source file -->
  4. <script src = "js/connection.js"></script>

查询表单

HTML:
  1. <form id="form1" name="form1" action="">
  2.   关键字
  3.   :
  4.   <input type="text" id="query" name="query" value="photo" />
  5.   <input type="button" name="Submit" value="搜索" onclick="searchIt(document.getElementById('query').value)" />
  6. </form>

yahoo提供的的web service,可以直接以json的格式返回数据,也支持xml格式,这里采用json

JAVASCRIPT:
  1. <script type="text/javascript">
  2. //yahoo提供的的web service
  3. var searchUrl = 'http://api.search.yahoo.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&results=4&output=json&query=';
  4.  
  5. var resultWin = document.getElementById('result');
  6.  
  7. var responseSuccess = function(o){ //调用成功后执行的函数
  8.  //transaction success case logic
  9.  eval('var rs =' + o.responseText);
  10.  var tmp;
  11.  var j = 0;
  12.  
  13.  //这里以js格式化数据内容
  14.  var content = '
  15. <ul>';
  16.  for(i in rs.ResultSet.Result) {
  17.   tmp = rs.ResultSet.Result[i];
  18.   content+= '
  19. <li class="cols"><a target="_blank" href="' + tmp.ClickUrl + '"><img src="' + tmp.Thumbnail.Url + '" width="60" border="0" alt="' + tmp.Title + '"/></a></li>
  20. ';
  21.  
  22.   if(j == 4) {
  23.    j = 0;
  24.    content+= '
  25. <div class="rows"></div>
  26. ';
  27.   } else {
  28.    j++;
  29.   }
  30.  }
  31.  content+= '</ul>
  32. ';
  33.  
  34.  resultWin.innerHTML = content;
  35.  document.getElementById('debug').innerText = o.responseText;
  36. }
  37.  
  38. //callback定义,见<a href="http://developer.yahoo.net/yui/connection/index.html">http://developer.yahoo.net/yui/connection/index.html</a>
  39. var callback =
  40. {
  41.  success:responseSuccess
  42. }
  43.  
  44. //查询
  45. function searchIt(query) {
  46.  if(!query)
  47.   return;
  48.  resultWin.innerHTML = '查找ing.....
  49. <img src="images/searching.gif"/>';
  50.  YAHOO.util.Connect.asyncRequest('POST', searchUrl + query, callback, null);
  51. }
  52.  
  53. </script>

最开始使用了上面的代码片段,在本机能够成功调用yahoo的web service,但是经常报跨站警报,相当不便.
于是采用代理模式,写了个很简单的proxy.php,如下:

PHP:
  1. <?php
  2. $searchUrl = 'http://api.search.yahoo.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&results=4&output=json&query=';
  3. if(!empty($_POST['query']))
  4.  echo file_get_contents($searchUrl . $_POST['query']);
  5. ?>

而js部分只要做个小小调整

JAVASCRIPT:
  1. var searchUrl = 'proxy.php';
  2.  
  3. ..................................
  4.  
  5. //查询
  6. function searchIt(query) {
  7.  if(!query)
  8.   return;
  9.  resultWin.innerHTML = '查找ing.....
  10. <img src="images/searching.gif"/>';
  11.  YAHOO.util.Connect.asyncRequest('POST', searchUrl, callback, 'query=' + query);
  12. }

最后就以这段简单的代码实现了本地搜索,你可以在此demo的基础上进一步完善,例如翻页,调整每页显示的数目等等,具体参数请参考http://developer.yahoo.net/search/local/V3/localSearch.html

解压密码:www.ooso.net
demo下载

参考文档:
http://developer.yahoo.net/yui/connection/index.html
http://developer.yahoo.net/php/howto-parseRestPhp.html

作者: Volcano 发表于March 7, 2006 at 5:18 pm

版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原始出处作者信息及此声明

Tags: ,,,,

8 条评论 »

  1. 刘 于 2006-03-11 @ 09:10:34 留言

    请教一个问题,出现如下错误应该怎样解决:

    —————————
    错误
    —————————
    出现了运行时间错误。
    是否要进行调试?

    行: 306
    错误: 系统错误: -1072896658。

    —————————
    是(Y) 否(N)
    —————————

  2. volcano 于 2006-03-11 @ 10:26:32 留言

    是运行上面的demo出现的错误?

  3. 刘 于 2006-03-11 @ 15:56:08 留言

    对, 没做改动,运行demo出现错误.

  4. volcano 于 2006-03-12 @ 20:38:55 留言

    请问你的运行环境是?

    我运行过的环境是:
    apache2+php4.3/php5+ie6/firefox 1.07

  5. 刘 于 2006-03-13 @ 13:24:18 留言

    我运行的环境是

    win2000 + apache2.0.5 + php4.3 + ie6/firefox1.0

    这个报错是在IE下面报错的.

    我的MSN lwter#hotmail.com (#替换成@)

  6. 刘 于 2006-03-13 @ 14:30:35 留言

    非常感谢volcano 的耐心指导.

    关于这个错误, volcano找到了,这个链接是:

    http://www.panoramio.com/blog/explorer-system-error-1072896658/

  7. Michael 于 2006-07-11 @ 17:20:41 留言

    http://weblogs.asp.net/mschwarz/archive/2006/07/11/Yahoo_2100_-Web-Services-Request-and-AjaxPro-JSON-Parser-_2D00_-I-love-it_2100_.aspx

    A great example on how to use Yahoo! JSON output.

  8. » Ajax+PHP+YUI手工制作rss阅读器 - 某人的栖息地 于 2007-07-05 @ 08:06:48 留言

    [...] 用ajax+json连接yahoo搜索web service打造本地搜索引擎Pear::Pager和AJAX的整合应用Connection Manager Of YUI用php5来赚大钱试用google search的Ajax api用php将rss转化为json格式php+ajax文件上传进度条当ajax遭遇系统错误: -1072896658Rasmus Lerdorf: 无框架式的PHP MVC 框架phpmore vol6 发布 [...]

RSS 为此帖反馈评论 · 反向跟踪 网站

留条评论