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

google sıra bulucu 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

23 thoughts on “PHP: AJAX: Google Sıra Bulucu – Position Finder

  • yazı için teşekkürler. çok arama yapınca google bot muamelesi yapıyor mu?

  • Bir sorun var, google reklamlarını da sıralamaya ekliyor. 2 reklam varsa üstte, 1. sıradakini 3. sıra olarak gösteriyor…

  • Merhaba. Acaba bununla direk sonuçları listeleyebilirmiyiz arama yapmadan.

    Yanii direk sayfada

    XXX kelimesinde siteniz 5.sırada
    XXX kelimesinde siteniz 8.sırada
    XXX kelimesinde siteniz 10.sırada
    XXX kelimesinde siteniz 48.sırada

    gibi listeleyebilirmiyiz.

  • @Mersin

    Dediğiniz olay yapılabilir..Sayfanın url adresini basit php bir kodla alabilirsiniz.Kelime olarak sayfanın başlığını yani titlesini alırsınız.Url ve Title kodlarını sıra bulucu kodlarda gerekli yerlere eklersiniz.Footer kısmına elinizdeki kodları eklersiniz otomatik olarak her sayfanın google sıranızı yazdırırsınız.Mantık yolunu yazdım umarım anlamışsınızdır.

  • Denedim gayet güzel çalışıyor. Google sıra bulucu ile serp sıralamamızı takip edebiliriz. birde listeleme yapsa tadın dan yenmez. geliştirmeniz umuduyla

  • Bu kodlar 40 sayfa içinde arama yapıyor. Kodun içinde 40 rakkamını 70′ e çıkardığımda daha fazla sayfada sorgulama yapıyor.
    Fakat kelime 70’in içinde yok ise
    döngü hatası oluşuyor ve sayfa cevap vermiyor.

    Daha fozla sayfada arama yapmak için ne yapmalıyız. mesela ilk 100 sayfada

  • Sizin demo sayfası üzerinde çalışıyor ama localde denediğimde çalışmıyor.
    ilk önce ereg_replace te hata verdi ilgili satırı kaldırdım ve değişkenleri yeniden ayarladım ama sonuç bulunamadı diyor.

  • Oncelikle paylasim icin tesekkurler.
    Fakat; ben de ereg_replace hatasi aliyorum. Bunun bir cozumu yok mu hakatten?
    Birde volkan arkadasin dedigi gibi 40 haricinde bir rakam girdigimizde sinirsiz donguye giriyor. Daha fazla sayfada arama yapmak istedigimizde ne olacak?

    Saygilar…

  • index.php kodlarında hata var

    bu araya yazılacak kodu yazarmısınız?

  • index.php kodlarında hata var

    bu araya yazılacak kodu yazarmısınız?

  • sıra bulucuyu kendim yapmak istiyorum sanırım google apilerinden yararlanıyoruz bu apiyi nerden bulabiliriz ?

  • peki nereye kadar arıyor. mesela 500. sıradaki ni de buluyormu. ben bazı kelimleri yazdım rasgele durmaksızın arıyor. mesela asd yazdım sürekli aradı. buna limit koyulamazmı mesela ilk 300 sıradan sonrasını arama diye.. siteniz mükemmelden de öte. saygılar

  • paylaşım için teşekkürler. fakat arada bir post.php de 147. satırda bir hata kodu verior. çözemedim

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir