7 Şubat 2009Php ile Web Site Bilgilerinin Alınması
Merhabalar efendim.
Uzun bir aradan sonra yeniden merhaba. Bloğa girdi girmemenin sebebi malum işler vs nedeni ile pek uğrayamaz olduk. Bu yazımda aslında öyle çok da konuşacak ve bir şey anlatacak değilim. Daha önceden yapmış olduğum python ile web site bilgilerinin alınması konulu başlıktaki web sitenin genel bilgilerini alan php betiğini paylaşmak istedim.
Betik fonksiyonlardan oluşmakta her ne hikmetse class halinde yazmamışım. Aslında bunu paylaşmamdaki bir diğer husus ise bazı arkadaşların bunu rica etmeleri oldu. Bende şuan müsaitken paylaşayım dedim. Betiğin çalışması için SimpleXMLElement kütüphanesinin yüklü olması gerekmektedir.
< ?php /** * Betik Yazarı: Yusuf KOÇ ( Raiden ) * http://www.ysfkc.com * * Copyright 2009 ysfkc.com * Licensed under the GNU General Public License, version 2. * See the file http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt * **/ # Read Site # @access private # ------------- function getData($site) { $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $site); curl_setopt($ch,CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; tr-TR; rv:1.9.0.3) Gecko/2008092818 Pardus/2008 Firefox/3.0.4'); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $return = curl_exec($ch); curl_exec($ch); return $return; } # Google PageRank # @access private # --------------------- function _StrToNum($Str, $Check, $Magic) { $Int32Unit = 4294967296; // 2^32 $length = strlen($Str); for ($i = 0; $i < $length; $i++) { $Check *= $Magic; //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31), // the result of converting to integer is undefined // refer to http://www.php.net/manual/en/language.types.integer.php if ($Check >= $Int32Unit) { $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit)); //if the check less than -2^31 $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check; } $Check += ord($Str{$i}); } return $Check; } # Google PageRank # @access private # --------------------- function _HashURL($String) { $Check1 = _StrToNum($String, 0x1505, 0x21); $Check2 = _StrToNum($String, 0, 0x1003F); $Check1 >>= 2; $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F); $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF); $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF); $T1 = (((($Check1 & 0x3C0) < < 4) | ($Check1 & 0x3C)) << 2) | ($Check2 & 0xF0F ); $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 ); return ($T1 | $T2); } # Google PageRank # @access private # --------------------- function _CheckHash($Hashnum) { $CheckByte = 0; $Flag = 0; $HashStr = sprintf('%u', $Hashnum) ; $length = strlen($HashStr); for ($i = $length - 1; $i >= 0; $i --) { $Re = $HashStr{$i}; if (1 === ($Flag % 2)) { $Re += $Re; $Re = (int)($Re / 10) + ($Re % 10); } $CheckByte += $Re; $Flag ++; } $CheckByte %= 10; if (0 !== $CheckByte) { $CheckByte = 10 - $CheckByte; if (1 === ($Flag % 2) ) { if (1 === ($CheckByte % 2)) { $CheckByte += 9; } $CheckByte >>= 1; } } return '7'.$CheckByte.$HashStr; } # Google PageRank # @access private # -------------------- function _googlePr($site) { $hash = _CheckHash(_HashURL($site)); $url = "http://toolbarqueries.google.com/search?client=navclient-auto&hl=en&ch=".$hash."&ie=UTF-8&oe=UTF-8&features=Rank&q=info:".$site; $return = getData($url); echo preg_replace('/Rank_1:.:/','',$return); } # Google Backlink # @access private # -------------------- function _googleBacklink($site) { $url = "http://www.google.com.tr/search?hl=tr&q=link:".$site; $return = getData($url); preg_match("#.*?<b>(\d*)< \/b>#sim",$return,$result); if ($result[1] == null) { echo 'Yok'; } else { echo $result[1]; } } # Google Index # @access private # ------------------ function _googleIndex($site) { $url = "http://www.google.com.tr/search?hl=tr&q=site:".$site; $return = getData($url); preg_match("#.*?(yakla.*?</b><b>(.*?)< \/b>|aramas.*?</b><b>(.*?)< \/b>).*?#",$return,$result); echo $result[3]; } # Dmoz Result # @access private # -------------------- function _dmoz($site) { $url = 'http://search.dmoz.org/cgi-bin/search?search='.str_replace('http://www.','',$site); $return = getData($url); preg_match("#.*?<center>(.*).*<b>.*?#",$return,$result); if (rtrim($result[1]) == 'No') { echo 'Yok'; } else { echo 'Var'; } } # Alexa Rank # @access private # ----------------------- function _alexa($url) { $url = 'http://data.alexa.com/data?cli=10&dat=snbamz&url='.str_replace('http://','',$url); $alexa = new SimpleXMLElement($url,NULL,TRUE); echo number_format($alexa->SD->POPULARITY['TEXT']); } # Genel Fonksiyon # @access public # ------------------ function sonucAl($istek,$url) { switch ($istek) { case 'googleP': _googlePr($url); break; case 'googleB': _googleBacklink($url); break; case 'googleI': _googleIndex($url); break; case 'alexa': _alexa($url); break; case 'dmoz': _dmoz($url); break; } } ?> </b></center></b>
Betiğimizde sizin kullanacağınız tek fonksiyon sonucAl() olacaktır. Çünkü diğerleri sonucAl() içinden çağrılmaktadır. Sonuc Fonksiyonumuz ise beş farklı parametre almaktadır.
Bunlar;
- googleP: Google pagerank değeri öğrenilmek istendiğinde kullanılır
- googleB: Google backlink değeri öğrenilmek istendiğinde kullanılır
- googleI: Google index değeri öğrenilmek istendiğinde kullanılır
- alexa: Alexa rank değeri öğrenilmek istendiğinde kullanılır
- dmoz: Dmoz kaydı öğrenilmek istendiğinde kullanılır
Şimdi bir örnekle sonlandıralım.
< ?php # Fonksiyon dosyamızı çağırıyoruz include_once('functions.php'); # Sonuc Fonksiyonumuzu çağırıyoruz. sonucAl('googleP','http://www.ysfkc.com'); ?>
Örneğimizi buradan indirebilirsiniz.


Uzun zamandır yazın yoktu güzel bir yazı olmuş teşekkurler
senin şu örneklerin sayesinde az bucuk regexpleri kaptım :p
ne zaman regexplik işiim olsa senin bloğa damlayıp örnekleri inceliyorum
şuanda yaptğım gibi
_HashURL fonk. da _HashURL T1 degiskenindeki < den dolayi hata veriyor < yi < ile degistirilmesi gerekiyor. bilginize…
@Kerim Candemir
Düzeltildi.
Teşekkür ederim. Kod renklendiricinin azizliğine uğramışız
bu kodun bir çıktı demosu yokmu acaba?
@hiberya
Page Rank:
http://www.ysfkc.com/dosyalar/siteinfo/?i=googleP&u=http://www.ysfkc.com
Google Backlink:
http://www.ysfkc.com/dosyalar/siteinfo/?i=googleB&u=http://www.ysfkc.com
Google Index:
http://www.ysfkc.com/dosyalar/siteinfo/?i=googleI&u=http://www.ysfkc.com
Dmoz Kaydı:
http://www.ysfkc.com/dosyalar/siteinfo/?i=dmoz&u=http://www.ysfkc.com
Alexa Rank:
http://www.ysfkc.com/dosyalar/siteinfo/?i=alexa&u=http://www.ysfkc.com
demolar gayet iyi çok teşekkürler işe yarıyor
backlinkleri yanlış gösteriyor
@hiberya
1 iki sayı yanlış sölüyor sanırım kendi sitemi baz alarak test ettim. ilgili fonksiyondan doğrusunu düzeltebilirsiniz
Teşekkürler.Çok işime yaradı
Backlink için bakarken buldum,
eline sağlık.
guzel bir sistem elleriniza saglik cok guzel.. ajaxla daha bi guzellik katmak lazim
bu ornekteki yapmaya calistim ama beceremedim: http://www.ysfkc.com/dosyalar/siteinfo/?i=alexa&u=http://www.ressim.net
get methodu ile url gonderiyorum hersey iyi ancak olmuyor bir turlu.. o gec ile aldigim bilgiyi normalde yazdiriyorum ancak kod icerisine kodugumda islemiyor. bir bilgisi lan varmi acaba ?
bu sekilde yapabildim sonucAl(‘dmoz’,$sitecik);
ancak boylede bir hata aliyorum: Notice: Undefined offset: 1 in /var/www/vhosts/kuaza.net/httpdocs/functions.php on line 147
anak dogru sonucu altta veriyor
benim kullandığım index.php içeriği:
tesekkurler raiden usta. ben onu cozdum dun gece
buda benimki:
senin orneginmi daha etkili olur kullanimda benim yaptigimmi acaba ? en iyisi hankisiyse onu kullanim diyorum
ayrica arkadaslar ben wp de bunu cekiyorum ama eger site dmozda kayitli ise aagidaki hatayi veriyor:
Notice: Undefined offset: 1 in /var/www/vhosts/kuaza.net/httpdocs/functions.php on line 147
kayitli degilse YOK cikiyor bunda bisey yok ama dmoz kayitli olan sitelerde neden hata aliyorum acaba ? bir fikri olan varmi ? ornek konu: http://www.kuaza.net/genel/ceviz-net-bilisim-32.html
ama Yok dedigi zaman sorun yok:) ornek: http://www.kuaza.net/resim-yukeme/image-upload-services-3.html
reis çalışmadı localde denedim boş sayfa basıyor hep… kodlarmi değiştir acaba…
@realturk
curl açık mı ?
hallettim çok teşekkürler…
teşekkürler.