Serpito

PHP: AJAX: Google Sıra Bulucu – Position Finder

Websitenizin, google aramalarında hangi anahtar kelimenin kaçıncı sırada çıktığını öğrenmek için, sade bir uygulama demosu geliştirelim.   Google Api kaynağı ile CURL metodu ile web search sistemini çalıştırıp, JSON formatında dönen listeyi;  istenen domainin kaçıncı sırada bulunduğunu bulmak için kullanacağız.

Öncelikle, api ve sorgular için kullanacağımız, GPositionFinder class (sınıf)’ı ve ajax ile bağlantı kurulan  post.php dosyasını aşağıda yazıyorum.  

post.php


<?php
ob_start();
class GPositionFinder {

private $_keyword;
private $_page;
private $_offset = 0;
private $_apiUrl = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;amp;amp;hl=tr&amp;amp;amp;lr=tr&amp;amp;amp;rsz=large&amp;amp;amp;q=";
private $_referer = "http://demo.serpito.com";
private $_results;
private $_position = 0;
private $_output;
private $_outputMethod = 'json';
private $_liste = array();
private $_htmlist;

public function __construct($keyword=null, $page=null) {
$this->setKeyword($keyword);
$this->setPage($page);
}

public function setReferer($value) {
if ($value) {
$this->_referer = $value;
return true;
}
return false;
}

public function setKeyword($value) {
if ($value) {
$this->_keyword = urlencode($value);
return true;
}
return false;
}

public function setPage($value) {
if ($value) {
$this->_page = basename($value);
return true;
}
return false;
}

public function setOutputMethod($value) {
switch ($value) {
case 'json':
$this->_outputMethod = 'json';
break;
case 'text':
$this->_outputMethod = 'text';
break;
default:
return false;
}
return true;
}

public function getPosition() {
return $this->_position;
}

public function getOutput() {
return $this->_output;
}

public function go() {
$this->_offset=0;

if (!$this->_setApiUrl()) {
trigger_error('You must set a valid keyword before calling go().', E_USER_ERROR);
}
if (!$this->_page) {
trigger_error('You must set a valid page to check before calling go().', E_USER_ERROR);
}
while(!$this->_position &amp;amp;amp;&amp;amp;amp; $this->_offset < 40) {
$this->_getNextResultSet();
if (empty($this->_results) || !is_object($this->_results)) {
break;
}
$this->_checkPosition();
}
$output = null;
switch ($this->_outputMethod) {
case 'json':
$output = json_encode(array(
'position' => $this->_position,
'keyword' => urldecode($this->_keyword),
'page' => $this->_page
));
break;
case 'text':
$output = "position={$this->_position}&amp;amp;amp;keyword=" . rawurldecode($this->_keyword) .
"&amp;amp;amp;page={$this->_page}";
break;
}

return $this->_output = $output;
}

public function liste() {

$this->_offset=0;
if (!$this->_setApiUrl()) {
trigger_error('You must set a valid keyword before calling go().', E_USER_ERROR);
}
if (!$this->_page) {
trigger_error('You must set a valid page to check before calling go().', E_USER_ERROR);
}
$this->_getNextResultSet();

$this->_htmlist="<ul>";
foreach ($this->_results->responseData->results as $key => $result) {
if(strpos($result->unescapedUrl , $this->_page) !== false){
$this->_htmlist.="<li class='buu'><a href='".$result->unescapedUrl."'>".$result->unescapedUrl."</a></li>";
}else{
$this->_htmlist.="<li><a href='".$result->unescapedUrl."'>".$result->unescapedUrl."</a></li>";
}
}
$this->_htmlist.="<ul>";

return $this->_htmlist;
}

private function _setApiUrl($url=null) {
if (!$this->_keyword) {
return false;
}
$this->_apiUrl = $this->_apiUrl.$this->_keyword;
return true;
}

private function _getNextResultSet() {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->_apiUrl . "&amp;amp;amp;start={$this->_offset}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $this->_referer);
$body = curl_exec($ch);
curl_close($ch);
$this->_results = json_decode($body);
}

private function _checkPosition() {
foreach ($this->_results->responseData->results as $key => $result) {
if(strpos($result->unescapedUrl , $this->_page) !== false){
$this->_position = $this->_offset + 1;
}
else {
$this->_offset++;
}
}
return;
}

}
function GetDomain($url)
{
$nowww = ereg_replace('www\.','',$url);
$domain = parse_url($nowww);
if(!empty($domain["host"]))
{
return $domain["host"];
} else
{
return $domain["path"];
}
}
$url=GetDomain($_POST['url']);
$keyword=$_POST['keyword'];
$posFinder = new GPositionFinder($keyword, $url);
$sonuc=$posFinder->go();
$xml=json_decode($sonuc);

?>
<div style="width:99%; padding:5px; border:#060 solid 1px; background:#E2FCE9; margin-bottom:12px; font-size:12px;">
<?php if($xml->position >0){ ?>
<strong><a href="http://www.google.com.tr/search?q=<?=urlencode($xml->keyword)?>"><?=$xml->keyword ?></a></strong> aramasında, <span style="font-size:28px;"><?=$xml->position?></span>. sıradasınız
<?php }else{ ?>
<a href="http://www.google.com.tr/search?q=<?=urlencode($xml->keyword)?>"><?=$xml->keyword ?></a> arama sonuçlarında bulunmuyor.</strong></center>
<?php } ?>
</div>

 

Uygulamanın arayüzü ve ajax kodlarının çalıştığı index.php  kodları aşağıda:

index.php


<h2><span class="red">G</span>oogle <span class="red">S</span>ıra <span class="red">B</span>ulucu</h2>

<form action="" method="post" name="shrt" id="shrt">
<div style="width:99%; margin:0; padding:0; min-height:70px;" align="center">
<input type="text" id="url" class="comment-form-author" value="http://www." placeholder="website URL"/>
</div>
<div style="width:99%; margin:0; padding:0; min-height:70px;" align="center">
<input type="text" id="keyword" class="comment-form-author" style="width:300px;" placeholder="anahtar kelimeler - keywords..." value=""/>
<button type="submit" id="submit" style="cursor:pointer; margin-top:7px; margin-left:35px;">Google Sıralamayı Göster</button>
</div>
</form>
<div style="width:95%; float:left; margin-top:10px; padding:0;" id="response"></div>

Demo ve kaynak kodları aşağıdan bulabilirsiniz.

Demo   Download