主要联系方式
 客服热线:020-85641328
 报价热线:020-85640755
 电子邮件:
  客服QQ:1597007
  商务洽谈QQ: 469373529
  技术咨询QQ: 504770500
  人才招聘QQ: 77428811
  商务洽谈MSN:Dodisw@hotmail.com
  技术咨询MSN:Dodijs@hotmail.com
  当前时间:
   站内地图
首页
网站建设
广州网站建设业务介绍 广州网站建设业务介绍
广州网站建设套餐 广州网站建设套餐
广州网站建设流程 广州网站建设流程
广州网站经典案例 广州网站经典案例
广州网站租用 广州网站租用
广州网站租用 广州网站订单
互动多媒体
互动多媒体业务介绍 互动多媒体业务介绍
互动多媒体设计报价 互动多媒体设计报价
互动多媒体经典案例 互动多媒体经典案例
光盘刻录 光盘刻录
影视动画
影视动画业务介绍 影视动画业务介绍
影视动画设计报价 影视动画设计报价
影视动画经典案例 影视动画经典案例
平面广告
平面广告业务介绍 平面广告业务介绍
平面广告设计报价 平面广告设计报价
印刷服务 印刷服务
平面广告经典案例 平面广告经典案例
软件开发
正版软件销售 正版软件销售
软件开发 软件开发
游戏开发
游戏开发业务介绍 游戏开发业务介绍
游戏开发制作报价 游戏开发制作报价
电子商务
虚拟主机 虚拟主机
域名注册 域名注册
网络实名 网络实名
企业邮箱 企业邮箱
网站推广 网站推广
网站维护 网站维护
信息中心
网站建设知识 网站建设知识
互动多媒体知识 互动多媒体知识
影视动画知识 影视动画知识
软件知识 软件知识
平面广告知识 平面广告知识
游戏知识 游戏知识
电子商务知识 电子商务知识
 
 
 
信息中心     
· 网站建设相关文章
· 互动多媒体相关文章
· 影视动画相关文章
· 软件开发相关文章
· 平面广告相关文章
· 游戏相关文章
· 虚拟主机相关文章
· 域名注册相关文章
 
当前位置:首页 → 信息中心 → 行业信息 → 利用Yahoo! Search API开发自已的搜索引擎-php版
利用Yahoo! Search API开发自已的搜索引擎-php版

广州多迪发布:2006-6-3 16:29:37 阅读 52

美国东部时间3月1日,雅虎公司联合创始人之一的杨致远将宣布公司的搜索网络将进入Web服务。雅虎公司在www.developer.yahoo.com网站建立了Yahoo Search Developer Network,公司计划在此纽约举行的搜索引擎战略大会(Search Engine Strategies Conference)上推出这一计划。该网络将允许开发者在雅虎搜索之上建立新的应用程序,其中包括图像、视频、新闻以及地区搜索等内容。想要使用这项服务的会员必须先去http://api.search.yahoo.com/webservices/register_application  申请一个自已的ID号,注:每个ID号每天只能搜索5000次。

    下面我们看一下,如何用PHP脚本调用Yahoo! Search API实现搜索的效果,全部脚本如下:
  

<?php
// Yahoo Web Services PHP Example Code
// Rasmus Lerdorf
// www.knowsky.com

$appid = 'YahooDemo';
// 在这输入你申请的ID号

$service = array('image'=>'http://api.search.yahoo.com/ImageSearchService/V1/imageSearch',
                 'local'=>'http://api.local.yahoo.com/LocalSearchService/V1/localSearch',
                 'news'=>'http://api.search.yahoo.com/NewsSearchService/V1/newsSearch',
                 'video'=>'http://api.search.yahoo.com/VideoSearchService/V1/videoSearch',
                 'web'=>'http://api.search.yahoo.com/WebSearchService/V1/webSearch');
?>
<html>
<head><title>PHP Yahoo Web Service Example Code</title></head>
<body>
<form action="YahooSearchExample.php" method="GET">
Search Term: <input type="text" name="query" /><br />
Zip Code: <input type="text" name="zip" /> (for local search)<br />
<input type="submit" value=" Go! " />
<select name="type">
<?php foreach($service as $name => $val) {
    if(!empty($_REQUEST['type']) && $name == $_REQUEST['type'])
      echo "<option SELECTED>$name</option>\n";
    else echo "<option>$name</option>\n";
} ?>
</select>
</form>
<?php
function done() {?>
</body></html>
<?php
exit;
}

if(empty($_REQUEST['query']) !in_array($_REQUEST['type'],array_keys($service))) done();

// Ok, here we go, we have the query and the type of search is valid
// First build the query
$q = '?query='.rawurlencode($_REQUEST['query']);
if(!empty($_REQUEST['zip'])) $q.="&zip=".$_REQUEST['zip'];
if(!empty($_REQUEST['start'])) $q.="&start=".$_REQUEST['start'];
$q .= "&appid=$appid";

// Then send it to the appropriate service
$xml = file_get_contents($service[$_REQUEST['type']].$q);

// Parse the XML and check it for errors
if (!$dom = domxml_open_mem($xml,DOMXML_LOAD_PARSING,$error)) {
  echo "XML parse error\n";
  foreach ($error as $errorline) {
  /* For production use this should obviously be logged to a file instead */
    echo $errorline['errormessage']."<br />\n";
    echo " Node  : " . $errorline['nodename'] . "<br />\n";
    echo " Line  : " . $errorline['line'] . "<br />\n";
    echo " Column : " . $errorline['col'] . "<br />\n";
  }
  done();
}

// Now traverse the DOM with this function
// It is basically a generic parser that turns limited XML into a PHP array
// with only a couple of hardcoded tags which are common across all the
// result xml from the web services
function xml_to_result($dom) {
  $root = $dom->document_element();
  $res['totalResultsAvailable'] = $root->get_attribute('totalResultsAvailable');
  $res['totalResultsReturned'] = $root->get_attribute('totalResultsReturned');
  $res['firstResultPosition'] = $root->get_attribute('firstResultPosition');

  $node = $root->first_child();
  $i = 0;
  while($node) {
    switch($node->tagname) {
      case 'Result':
        $subnode = $node->first_child();
        while($subnode) {
          $subnodes = $subnode->child_nodes();
          if(!empty($subnodes)) foreach($subnodes as $k=>$n) {
            if(empty($n->tagname)) $res[$i][$subnode->tagname] = trim($n->get_content());
            else $res[$i][$subnode->tagname][$n->tagname]=trim($n->get_content());
          }
          $subnode = $subnode->next_sibling();
        }
        break;
      default:
        $res[$node->tagname] = trim($node->get_content());
        $i--;
        break;
    }
    $i++;
    $node = $node->next_sibling();
  } 
  return $res;
}

$res = xml_to_result($dom);

// Ok, now that we have the results in an easy to use format,
// display them.  It's quite ugly because I am using a single
// display loop to display every type and I don't really understand HTML
$first = $res['firstResultPosition'];
$last = $first + $res['totalResultsReturned']-1;
echo "<p>Matched ${res[totalResultsAvailable]}, showing $first to $last</p>\n";
if(!empty($res['ResultSetMapUrl'])) {
  echo "<p>Result Set Map: <a href=\"${res[ResultSetMapUrl]}\">${res[ResultSetMapUrl]}</a></p>\n";
}
for($i=0; $i<$res['totalResultsReturned']; $i++) {
  foreach($res[$i] as $key=>$value) {
    switch($key) {
      case 'Thumbnail':
        echo "<img src=\"${value[Url]}\" height=\"${value[Height]}\" width=\"${value[Width]}\" />\n";
        break;
      case 'Cache':
        echo "Cache: <a href=\"${value[Url]}\">${value[Url]}</a> [${value[Size]}]<br />\n";
        break;
      case 'PublishDate':
        echo "<b>$key:</b> ".strftime('%X %x',$value);
        break;
      default:
        if(stristr($key,'url')) echo "<a href=\"$value\">$value</a><br />\n";
        else echo "<b>$key:</b> $value<br />";
        break;
    }
  }
  echo "<hr />\n";
}

// Create Previous/Next Page links
if($start > 1)
  echo '<a href="/YahooSearchExample.php'.
                       '?query='.rawurlencode($_REQUEST['query']).
                         '&zip='.rawurlencode($_REQUEST['zip']).
                        '&type='.rawurlencode($_REQUEST['type']).
                       '&start='.($start-10).'">&lt;-Previous Page</a> &nbsp; ';
if($last < $res['totalResultsAvailable'])
  echo '<a href="/YahooSearchExample.php'.
                       '?query='.rawurlencode($_REQUEST['query']).
                         '&zip='.rawurlencode($_REQUEST['zip']).
                        '&type='.rawurlencode($_REQUEST['type']).
                       '&start='.($last+1).'">Next Page-&gt;</a>';
done();
?>

有兴趣的朋友还可以看一下由[动态网站制作指南]所制作的ASP版本:http://www.knowsky.com/yahoo/




网站建设: 企业网站开发FLASH网站设计大型数据库开发网站视觉设计网站优化网站推广域名注册虚拟主机企业邮局
多媒体设计: 多媒体光盘产品演示会议演示动画企业形象宣传片FLASH游戏制作商业计划演示展会宣传光盘儿童动画片
平面广告: 广告设计标志设计产品画册设计海报传单设计产品包装设计VI设计菲林印刷

收藏本站 | 设为首页 | 人才招聘 | 营业执照
工商注册
Copyright @ 2004-2006 广州多迪网络科技有限公司 版权所有  法律顾问:广东正大联合律师事务所 吴炳波
公司地址: 广州市天河区黄埔大道中126号2701 咨询电话: 020-85640755 020-85641575 传真:020-85641328