1. <?php
  2. mb_language('Japanese');
  3. mb_http_output("UTF-8");
  4. ob_start("mb_output_handler");
  5. include("proxy.php");
  6. // JSON形式で出力するときにこのファイルを利用する
  7. include("JSON.php");
  8. // proxyを利用する場合は$use_proxy = 1にする;
  9. $use_proxy 0;
  10. // proxyを利用するhostとportを指定にする;
  11. $proxy_host 'proxy.example.com';
  12. $proxy_port 8080;
  13. $no_proxy = array(
  14.     'localhost',        // localhost 
  15.     '127.0.0.0/8',      // loopback
  16. );
  17. $TidyConfig = array('indent' => TRUE,
  18.                 'output-xhtml' => TRUE,
  19.                 'wrap' => 200);
  20. function getHTML($url){
  21.     // URLの情報を取得し、データを戻す
  22.     $rdata http_request($url);
  23.     $data $rdata['data'];
  24.     $data mb_convert_encoding($data,"UTF-8""auto");
  25.     return ($data);
  26. }
  27. function _getParam(tidyNode $node, &$urls NULL) { 
  28.     $urls = (is_array($urls)) ? $urls : array(); 
  29.     if(isset($node->id)) { 
  30.         // Aタグだったら
  31.         if($node->id == TIDY_TAG_A) {
  32.             // Aタグ属性で spell=1となる部分を抜き出す
  33.             if (strstr ($node->attribute['href'] ,"spell=1") !==FALSE){ 
  34.                 // マッチすればそのnodeを配列に入れる
  35.                 $urls[] = $node->value;
  36.             }
  37.         }
  38.     }
  39.     if($node->hasChildren()) { 
  40.         foreach($node->child as $c) { 
  41.             _getParam($c$urls); 
  42.         }
  43.     }
  44.     return $urls;
  45. }
  46. global $TidyConfig;
  47. if ($_GET['q']<>""){
  48.     $kw $_GET['q'];
  49.     // 入力されたキーワードをURLエンコードしてGoogleで検索する際のURIを作成
  50.     $req "http://www.google.co.jp/search?source=ig&hl=ja&q=".urlencode($kw);
  51.     // 作成したURIにアクセスする
  52.     $data getHTML($req);
  53.     // tidyオブジェクト作成
  54.     $tidy tidy_parse_string($data$TidyConfig,"utf8");
  55.     $tidy->cleanRepair();
  56.     // tidyでチェックする
  57.     $res _getParam($tidy->body());
  58.     $obj = array();
  59.     if(count($res)>0){
  60.         // 「もしかして」といわれたら
  61.         // $resを分解してもしかしての部分だけ無理矢理抽出する
  62.         $res_ explode('class=p>',$res[0]);
  63.         if (count($res_)<2){
  64.             $res_ explode('class="p">',$res[0]);
  65.         }
  66.         $res__ explode("</a>",$res_[1]);
  67.         $rs str_replace("<b>","",$res__[0]);
  68.         $rs str_replace("</b>","",$rs);
  69.         $rs str_replace("<i>","",$rs);
  70.         $rs str_replace("</i>","",$rs);
  71.         // 配列に入れる
  72.         array_push($obj,array("word"=>$kw,"res"=>$rs));
  73.     }else{
  74.         // 「もしかして」といわれなければ
  75.         array_push($obj,array("word"=>$kw,"res"=>$kw));
  76.     }
  77.     // JSONオブジェクト作成
  78.     $json = new Services_JSON();
  79.     $js $json->encode($obj);
  80.     if ($_GET['callback']<>""){
  81.         $src $_GET['callback']."(";
  82.         $src .= $js;
  83.         $src .=");";
  84.         // JSON形式で返す。
  85.         echo $src;
  86.     }
  87. }
  88. ob_end_flush();
  89. ?>