29 Ekim 2010 Cuma

Alexa Rank Almak

Alexa'dan Global ve Ülke rankının alınması için bugün hazırladığım küçük örneği sizlerle paylaşmak istiyorum. Birçok örnek eski ve sistemin değişmesi ile çalışmıyor. Bende cURL kullanarak buna bir çözüm bulmak için kolları sıvadım.



cURL Kullanımı ve Fonksiyonumuzu oluşturalım:


/*
* Yazar: AYDIN YAKAR (www.AydinYakar.com)
* Tarih: 29.10.2010 / 19:00
*/
function getData($alanAdi,$refSite='http://www.google.com',$zamanAsimi='10')
{
    $zamanAsimi = 10;
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $alanAdi);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $zamanAsimi);
    curl_setopt($ch, CURLOPT_REFERER, $refSite);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $data = curl_exec($ch);
    //$sonuc= curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    return $data;
}


cURL konusunda yeterli bilgiye sahip olmayan arkadaşlara kısaca özet geçelim:

cURL başka bir siteden veri çekebilmenize yarar. Bu işlemi standart form işlemlerinde olduğu gibi GET veya POST olarak yapabilir, belirlenen sürede zaman aşımına uğramasını sağlayabilir, referans belirtebilir ve daha birçok işlem yapabilirsiniz. Biz burda en basit hali ile kullandık. Hata almanız durumunda $sonuc degiskenini aktif edip durumu kontrol edebilirsiniz.

Evet şimdi de birkaç php fonksiyonu ile verilerimize şekil verelim:


$domain = "http://www.alexa.com/siteinfo/$_GET[url]";
$data = getData($domain);

$dizi = array('/\r\n/','/\n\r/','/\n/','/\r/','/\t/', '/\s+/');
$data = STRtoLOWER(preg_replace($dizi, ' ', $data)); //yeni satir karakterini temizledik ve tum yazi tek satira aldik
$ara1 = '/<img src="\/images\/icons\/globe-sm.jpg" alt="global" style="margin-bottom:-2px;"\/> ([0-9,]{0,12}) <\/div>/';
$ara2 = '/<img class="dynamic-icon" src="http:\/\/(?<subdom>[a-z0-9]{0,10}).alexa.com\/images\/flags\/(?<flag>[a-z.0-9]{0,35}).png" alt="[a-z ]{0,20} flag"\/> (?<rank>[0-9,]{0,12}) <\/div>/';
preg_match($ara1, $data, $Global);
preg_match($ara2, $data, $Ulke);

if($Global[1])  echo "<img src='http://www.alexa.com/images/icons/globe-sm.jpg'> $Global[1]";
if($Ulke[flag]) echo "<br /><img src='http://$Ulke[subdom].alexa.com/images/flags/$Ulke[flag].png'> $Ulke[rank]";

Güncellendi: 6 Eylül 2012 17:25

Regex ile ilgili makalemize göz atmanızı tavsiye ederim. Vakit buldukça, o makalemizi de güncelliyoruz.

Kullanımı:

Verdiğimiz kodları alexa.php dosyasına kaydedin ve hostunuza atın,


www.web-siteniz.com/alexa.php?url=aydinyakar.com

Cumhuriyet'imizin 87. yıl dönümü tüm arkadaşlara kutlu olsun. Bir sonraki makale de görüşmek üzere...

5 yorum:

  1. Selamün aleyküm herkese hayirli bayramlar...

    if($Global[1]) echo " $Global[1]";

    if($Ulke[flag]) echo " $Ulke[rank]";

    alexa dan global degerini alip basiyor ancak ulke, flag degerleri calismiyor. düzenleme yapmaniz mümkünü.

    Notice: Undefined index: url in .....

    YanıtlayınSil
  2. Merhaba, alexa ülke bayraklarının olduğu kısıma pcache ile cache numarası atıyor bu nedenle regex kodumuz da güncelleme yapmamız gerekiyor. En kısa süre de bu güncellemeyi yapacağım..

    YanıtlayınSil
  3. Gerekli güncelleme yapıldı, son haliyle ülke rank'ı da alabilirsiniz..

    YanıtlayınSil
  4. "Undefined index.." uyarısını almamak için scriptinizin ilk satırlarına error_reporting(E_ALL ^ E_NOTICE); ekleyebilirsiniz, daha detaylı bilgi için http://www.php.net/manual/tr/function.error-reporting.php sayfasını inceleyebilirsiniz.

    YanıtlayınSil