原理:Google Ajax Search其实就是返回在google上输入关键字的结果,在自己站点上用上。

首先在google上申请一个Api Key
http://code.google.com/intl/zh-CN/apis/websearch/docs/

主要采用JS的方法加载

然后通过search对象控制搜索,官方API文档写的很具体。

但是有时候并不是很好控制,因此官方开放了另一个与其他语言交互的API接口

http://code.google.com/intl/zh-CN/apis/websearch/docs/#fonje

通过curl获取Get参数的回传值

curl -e http://www.my-ajax-site.com \
‘https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton&key=INSERT-YOUR-KEY’

上述URL中https://ajax.googleapis.com/ajax/services/search/web 这一段基本为固定的
参数 v=1.0也基本是Google固定的;
参数 q为关键词,需要urlencode;
参数 key为申请的key,其实不用必填,若填写了一定要正确的key。这个key直接可以关联到google account,所以还是建议申请。
更多参数请查阅:ttp://code.google.com/intl/zh-CN/apis/websearch/docs/reference.html#_fonje_args

我这里用到另外一个类HttpClient模拟获取Get值,原理其实很Curl一样。

HttpClient类可参考我之前写的这篇文章:
http://crackedzone.com/blog/httpclient-post-request-return.html

具体方法:

require_once 'inc/class/HttpClient.php';	
  
  function getGoogleSearchJson($args, $inSite=false) {
  //$args为传给Google的参数
  //默认inSite不开启的话 就是Google搜索,否则搜索本站,当然可以指定目录如site:crackedzone.com/blog
  $site = ($inSite == true) ? "site:crackedzone.com " : '';
  
  $url = 'https://ajax.googleapis.com/ajax/services/search/web'; 
  if ( !array_key_exists('v', $args) ) $args['v'] = '1.0';
  $args['q'] = $site . $args['q'];
  $url .= '?' . http_build_query($args, '', '&');
  
  //通过HttpClient类中的静态方法直接获取Get的返回值,返回的结构是JSON,需要反序列化为数组对象。
  $json = HttpClient::quickGet($url);
  $json = json_decode($json);
  
  return $json;
  
  }
  
  //通过传递关键字页数等信息,将之前反序列化的对象存为我们指定的字符串。
  function getSearchFormat ($args, $inSite=false) {
  
  global $keyword, $page;
  
  $formattedresults = '';
  $json = getGoogleSearchJson($args, $inSite);
  //print_r($json);
  
  //Response Succeess 200
  if ($json->responseStatus == 200) {
  
  $jsonResults = $json->responseData->results;
  $jsonCursor  = $json->responseData->cursor;
  $jsonRow     = $jsonCursor->estimatedResultCount;
  
  if (count($jsonResults)) {
  //Resules Exists
  foreach($jsonResults as $searchResult) {
  if($searchResult->GsearchResultClass == 'GwebSearch') {
  $formattedresults .= 
'</p>
          
' . $searchResult->content . '
' . $searchResult->visibleUrl . '
'; } } $formattedresults .= '
'; foreach($jsonCursor->pages as $searchPage) { $class = $searchPage->label == $page ? 'class="current"' : NULL; $formattedresults .= "<a {$class} href='?keyword={$keyword}&page=".$searchPage->label."'\>".$searchPage->label.'</a>'; } $formattedresults .= '
'; } else { //Result Noting $formattedresults = '

Your search - '.$keyword.' - did not match any documents.

'; } } return $formattedresults; } //使用函数方式 $keyword = trim($_GET['keyword']); $page = $_GET['page'] ? (int)$_GET['page'] : 1; $page < 1 && $page = 1; if(!$keyword) { //没有输入关键字的时候 $content = '

Please enter one or more search terms in the search box above.

'; } else { $content = getSearchFormat(array( 'q' => urlencode($keyword), // search keywords 'key' => 'Your API Key', 'userip' => getIP(), //客户机IP 'rsz' => 8, //每页显示记录数 最高8条 'start' => ($page-1) * 8 //记录开始的下界。 ), true); }

OK 最后写一些CSS样式表

在敏捷回顾会议中引导使用ORID

头一次接触ORID方法在2015年的一次敏捷回顾上,但是还不知道它,当天围坐在小会议室中通过该方法总结迭代开发经验,使我很有收获。ORID工作法很好理解,几乎一听就会,只是日常工作中我们总会选择更偷懒的方法,而忽略了总结过程中思考和逻辑的重要性。根据百度百科,ORID是一种...… Continue reading

生产环境Linux部署

Published on July 12, 2017

SVN 迁移到 GitLab

Published on June 17, 2017