PHPの検索API(Flash、Javaなど)

目的:できるだけ少ない労力でサイト全体で検索整理し、独自のスタイルで結果を整理する。



推論

サイトのインデックス作成、データベースのインデックス作成を行う全文検索を整理するためのさまざまなサーバーシステムがあります。 ただし、サーバーにインストールして構成する必要があり、一部は有料です。

ある時点で、JavaScript経由でGoogle Ajax Search APIを使用することにしましたが、ここでは結果の外観を変更することは非常に難しく、javascriptを使用して別のドメインにリクエストを行う必要もあります。



解決策

その結果、 Google AJAX Search API ページコードスニペットセクションに出くわし、すべてがシンプルになりました。あらゆるPHPコードと全サイトの全文検索の準備が整いました。





Php



少し簡略化されたコードスニペットが提供されます。 もちろん、現時点でajax.googleapis.comサーバーの可用性を確認することをお勧めします。



<?php

//

$data = MyDB:: get () -> selectOne( '*' ,self::TABLE, '`id_mod` = ' .$ this ->id_mod);



// ?

$sireUrl = $data[ 'url' ];



//

$sigs = array(

'q' => array( 'type' => 'string' , 'required' => false ),

'start' => array( 'type' => 'integer' , 'required' => false )

);

$reqData = SpeData::sanitize_vars($ this ->queryArray, $sigs, 'RequestException' );

$q = urlencode($reqData[ 'q' ]. ' site:' .$sireUrl);

$start = empty($reqData[ 'start' ]) ? 0 : $reqData[ 'start' ];



// , :)

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=$q&rsz=large&hl=ru&start=$start" );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_REFERER, "http://$sireUrl/" );

$body = curl_exec($ch);

curl_close($ch);



// , , :)

$json = json_decode($body);

// print_r($json)

// smarty ,



$search = array();



//

if (count($json -> responseData -> results) == 0) { //

$search[ 'result' ] = false ;

} else {

foreach ($json -> responseData -> results as $v) {

$search[ 'result' ][] = array(

'GsearchResultClass' => $v -> GsearchResultClass,

'unescapedUrl' => $v -> unescapedUrl,

'url' => $v -> url,

'visibleUrl' => $v -> visibleUrl,

'cacheUrl' => $v -> cacheUrl,

'title' => $v -> title, // ( html-)

'titleNoFormatting' => $v -> titleNoFormatting,

'content' => $v -> content //

);

}

}



//

if (count($json -> responseData -> results) == 0) { //

$search[ 'pages' ] = false ;

} else {

$url = 'http://' .$_SERVER[ 'HTTP_HOST' ].$_SERVER[ 'REDIRECT_URL' ]. '?q=' .$reqData[ 'q' ];

foreach ($json -> responseData -> cursor -> pages as $v) {

$search[ 'pages' ][] = array(

'start' => $v -> start,

'startUrl' => $url. '&start=' .$v -> start,

'label' => $v -> label

);

}

}



//

$currentPageIndex = $json -> responseData -> cursor -> currentPageIndex;

$search[ 'info' ] = array(

'q' => $reqData[ 'q' ],

'estimatedResultCount' => $json -> responseData -> cursor -> estimatedResultCount,

'moreResultsUrl' => $json -> responseData -> cursor -> moreResultsUrl,

'currentPageIndex' => $currentPageIndex,

'currentLabel' => $currentPageIndex + 1,

'startResult' => $currentPageIndex * 8 + 1,

'endResult' => ($currentPageIndex * 8 + 1) + count($search[ 'result' ]),

'next' => (count($search[ 'pages' ]) > $currentPageIndex + 1) ? $search[ 'pages' ][$currentPageIndex + 1][ 'startUrl' ] : false ,

'prev' => ($currentPageIndex) ? $search[ 'pages' ][$currentPageIndex - 1][ 'startUrl' ] : false

);





//

MySmarty:: get () -> assign( 'search' , $search);



?>




* This source code was highlighted with Source Code Highlighter .








スマート



区切り文字「{{」および「}}」を使用して、smartyとjavascriptを区別します



{{ if !$search.result}}

<b> {{$search.info.q}} </b> .

{{ else }}

<b>{{$search.info.startResult}} - {{$search.info.endResult}}</b> <b>{{$search.info.estimatedResultCount}}</b> <b>{{$search.info.q}}</b>

<br />

<br />



{{section name=i loop=$search.result}}

<a href= "{{$search.result[i].url}}" >{{$search.result[i].title}}</a><br />

{{$search.result[i].content}}

<br />

<br />



{{/section}}



<br/>



{{ if $search.info.prev}}

<a href= "{{$search.info.prev}}" ></a>

{{/ if }}





{{section name=i loop=$search.pages}}

{{ if $search.info.currentLabel == $search.pages[i].label}}

{{$search.pages[i].label}}

{{ else }}

<a href= "{{$search.pages[i].startUrl}}" >{{$search.pages[i].label}}</a>

{{/ if }}

{{/section}}



{{ if $search.info.next}}

<a href= "{{$search.info.next}}" ></a>

{{/ if }}



{{/ if }}




* This source code was highlighted with Source Code Highlighter .








そのため、あらゆる種類のデータ(html、doc、pdf、およびGoogleが検索するその他のドキュメント)を適切に検索できました。



Google Ajax Api Playgroundをテストするための便利なツールもあります。



Habralyudiは、あなたが知っているなら、この検索APIの使用に関する合意にどのように関係があるか教えてください。 Google検索を使用することを結果ページで示す必要がありますか?



ご清聴ありがとうございました。



PSこれはHabrに関する私の最初の投稿です。何かがそう言わなかった場合、私はそれを修正します:)




All Articles