برگزیده های پرشین تولز

مشکل در ساخت کد php برای نمایش پیج رنک

amin94z

Registered User
تاریخ عضویت
4 می 2013
نوشته‌ها
849
لایک‌ها
224
محل سکونت
اهواز
سلام
استفاده از کد php برای نمایش رتبه الکسا خیلی راحته
ولی برای پیج رنک کد های زیادی رو از سایت های اموزشی برداشتم ولی هیچ کدوم اجرا نمیشدن بجز کد زیر که فقط 1 رو نشون میده
واسه اجرای این کد ها ویژگی خاصی نیاز هست روی هاست؟کد زیر مشکلی نداره؟
PHP:
<?php

  define('GOOGLE_MAGIC', 0xE6359A60);

  function _zeroFill($a, $b){
    $z = hexdec(80000000);
    if ($z & $a){
      $a = ($a>>1);
      $a &= (~$z);
      $a |= 0x40000000;
      $a = ($a>>($b-1));
    }else
      $a = ($a>>$b);
    return $a;
  }

  function _mix($a,$b,$c){
    $a -= $b; $a -= $c; $a ^= (_zeroFill($c,13));
    $b -= $c; $b -= $a; $b ^= ($a<<8);
    $c -= $a; $c -= $b; $c ^= (_zeroFill($b,13));
    $a -= $b; $a -= $c; $a ^= (_zeroFill($c,12));
    $b -= $c; $b -= $a; $b ^= ($a<<16);
    $c -= $a; $c -= $b; $c ^= (_zeroFill($b,5));
    $a -= $b; $a -= $c; $a ^= (_zeroFill($c,3));
    $b -= $c; $b -= $a; $b ^= ($a<<10);
    $c -= $a; $c -= $b; $c ^= (_zeroFill($b,15));
    return array($a,$b,$c);
  }

  function _GoogleCH($url, $length=null, $init=GOOGLE_MAGIC){
    if(is_null($length))
      $length = sizeof($url);
    $a = $b = 0x9E3779B9;
    $c = $init;
    $k = 0;
    $len = $length;
    while($len >= 12){
      $a += ($url[$k + 0] + ($url[$k + 1] << 8) + ($url[$k + 2] << 16) + ($url[$k + 3] << 24));
      $b += ($url[$k + 4] + ($url[$k + 5] << 8) + ($url[$k + 6] << 16) + ($url[$k + 7] << 24));
      $c += ($url[$k + 8] + ($url[$k + 9] << 8) + ($url[$k + 10] << 16) + ($url[$k + 11] << 24));
      $_mix = _mix($a,$b,$c);
      $a = $_mix[0]; $b = $_mix[1]; $c = $_mix[2];
      $k += 12;
      $len -= 12;
    }
    $c += $length;
    switch($len){
      case 11: $c += ($url[$k + 10] << 24);
      case 10: $c += ($url[$k + 9] << 16);
      case 9 : $c += ($url[$k + 8] << 8);
      case 8 : $b += ($url[$k + 7] << 24);
      case 7 : $b += ($url[$k + 6] << 16);
      case 6 : $b += ($url[$k + 5] << 8);
      case 5 : $b += ($url[$k + 4]);
      case 4 : $a += ($url[$k + 3] << 24);
      case 3 : $a += ($url[$k + 2] << 16);
      case 2 : $a += ($url[$k + 1] << 8);
      case 1 : $a += ($url[$k + 0]);
    }
    $_mix = _mix($a,$b,$c);
    return $_mix[2];
  }

  function _strord($string){
    for($i = 0;$i < strlen($string);$i++)
      $result[$i] = ord($string{$i});
    return $result;
}

  function getPageRank($url){
    $pagerank = -1;
    $ch = "6"._GoogleCH(_strord("info:" . $url));
    $fp = fsockopen("www.google.com", 80, $errno, $errstr, 30);
    if($fp){
      $out = "GET /search?client=navclient-auto&ch=" . $ch . "&features=Rank&q=info:" . $url . " HTTP/1.1\r\n";
      $out .= "Host: www.google.com\r\n";
      $out .= "Connection: Close\r\n\r\n";
      fwrite($fp, $out);
      while (!feof($fp)){
        $data = fgets($fp, 128);
        $pos = strpos($data, "Rank_");
        if($pos === false){
        }else
          $pagerank = substr($data, $pos + 9);
      }
      fclose($fp);
    }
    return $pagerank;
}

?>
PHP:
<?php

  // content of somefile.php

  include('pagerank.php');

  $pr = getPageRank('http://www.pagerankcode.com');

  echo 'pagerankcode.com has PR '.$pr;

?>
 

HSG

Registered User
تاریخ عضویت
11 فوریه 2014
نوشته‌ها
279
لایک‌ها
203
سلام
ویژگی خاص بله باید تابع fsockopen در هاست شما باز باشه.
من از نت افراز هاست داشتم این تابع بسته بود تیکت زدم برام برای یه دامنه ای که گفتم باز کردن.
 

amin94z

Registered User
تاریخ عضویت
4 می 2013
نوشته‌ها
849
لایک‌ها
224
محل سکونت
اهواز
من تیکت زدم گفتن
بر روی هاست های اشتراکی امکان فعال کردن این تابع وجود ندارد

راه دیگه ای نیست؟
 

homayo0on

Registered User
تاریخ عضویت
25 آگوست 2011
نوشته‌ها
555
لایک‌ها
620
اینو تست کن ببین کار میکنه یا نه ;)
با کدی که دادی فرق داره اول کار نمیکرد یخورده تغییرش داد تو لوکال من که جواب داد حالا رو هاست رو نمیدونم از cURL استفاده کردم
PHP:
<?php


class google_PR
{
    public function get_google_pagerank($url)
    {
        $query = 'http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=' .
            $this->CheckHash($this->HashURL($url)) . '&features=Rank&q=info:' . $url . '&num=100&filter=0';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $query);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
        $data = curl_exec($ch);
        curl_close($ch);
        $pos = strpos($data, "Rank_");
        if(!($pos === false))
        {
            $pagerank = substr($data, $pos + 9);
            return $pagerank;
        }
    }
    public function StrToNum($Str, $Check, $Magic)
    {
        $Int32Unit = 4294967296; // 2^32
        $length = strlen($Str);
        for ($i = 0; $i < $length; $i++)
        {
            $Check *= $Magic;
            if ($Check >= $Int32Unit)
            {
                $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
                $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
            }
            $Check += ord($Str{$i});
        }
        return $Check;
    }
    public function HashURL($String)
    {
        $Check1 = $this->StrToNum($String, 0x1505, 0x21);
        $Check2 = $this->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);
    }
    public 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;
    }
}





/****************************************************/




$pr = new google_PR();
$url = 'http://persiantools.com';
echo $url . ' has Google PageRank: ' . $pr->get_google_pagerank($url);


?>
 

amin94z

Registered User
تاریخ عضویت
4 می 2013
نوشته‌ها
849
لایک‌ها
224
محل سکونت
اهواز
مگه میشه کدی رو که شما میدی کار نکنه ؟؟:general601:
 

amin94z

Registered User
تاریخ عضویت
4 می 2013
نوشته‌ها
849
لایک‌ها
224
محل سکونت
اهواز
اینو تست کن ببین کار میکنه یا نه ;)
با کدی که دادی فرق داره اول کار نمیکرد یخورده تغییرش داد تو لوکال من که جواب داد حالا رو هاست رو نمیدونم از cURL استفاده کردم
PHP:
<?php


class google_PR
{
    public function get_google_pagerank($url)
    {
        $query = 'http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=' .
            $this->CheckHash($this->HashURL($url)) . '&features=Rank&q=info:' . $url . '&num=100&filter=0';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $query);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
        $data = curl_exec($ch);
        curl_close($ch);
        $pos = strpos($data, "Rank_");
        if(!($pos === false))
        {
            $pagerank = substr($data, $pos + 9);
            return $pagerank;
        }
    }
    public function StrToNum($Str, $Check, $Magic)
    {
        $Int32Unit = 4294967296; // 2^32
        $length = strlen($Str);
        for ($i = 0; $i < $length; $i++)
        {
            $Check *= $Magic;
            if ($Check >= $Int32Unit)
            {
                $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
                $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
            }
            $Check += ord($Str{$i});
        }
        return $Check;
    }
    public function HashURL($String)
    {
        $Check1 = $this->StrToNum($String, 0x1505, 0x21);
        $Check2 = $this->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);
    }
    public 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;
    }
}





/****************************************************/




$pr = new google_PR();
$url = 'http://persiantools.com';
echo $url . ' has Google PageRank: ' . $pr->get_google_pagerank($url);


?>



ببخشید یه سوال دیگه
حالاکد ساخته شد و درست کار میکنه
اگه بخوام به این شکل فقط نتیجه رو ببینم چه تغییری باید اجرا بشه ؟
url از قبل در php تعریف شده هست
یعنی دقیقا مثل سایت های ابزار دهی

PHP:
<script type="text/javascript" src="http://site.com/pgr/pgr.php?url=site.com"></script>
 

homayo0on

Registered User
تاریخ عضویت
25 آگوست 2011
نوشته‌ها
555
لایک‌ها
620
ببخشید یه سوال دیگه
حالاکد ساخته شد و درست کار میکنه
اگه بخوام به این شکل فقط نتیجه رو ببینم چه تغییری باید اجرا بشه ؟
url از قبل در php تعریف شده هست
یعنی دقیقا مثل سایت های ابزار دهی

PHP:
<script type="text/javascript" src="http://site.com/pgr/pgr.php?url=site.com"></script>
با فرض اینکه کلاسی که بالا دادمو تو یه فایل به نام class.pagerank.php ریخته باشی
کد زیر میتونه با جاوااسکریپت خروجی رو چاپ کنه
PHP:
<?php

    include 'class.pagerank.php';

    header("content-type: application/javascript");

    !empty($_GET['url']) ? $url = $_GET['url'] : exit;


    $pr = new google_PR();

    echo 'document.write("' . $url . ' has Google PageRank: ' . intval($pr->get_google_pagerank($url)) . '");';
 

saeedgaeini

کاربر تازه وارد
تاریخ عضویت
30 آگوست 2013
نوشته‌ها
11
لایک‌ها
2
محل سکونت
قم
بالا