извращенное минифицирование кода, часть 5

Discussion in 'PHP' started by Дикс, 4 Feb 2009.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    я раньше создавал подобные темы, вроде штуки 4, где предлагалось уменьшить насколько это возможно какой-либо и без того простой код.

    сегодня появился повод создать новую тему, и может быть это послужит стимулом в появлении подобных тем за чужим авторством :)

    итак, сегодня у нас на рассмотрении функция получения ТИц Яндекса для текущего хоста.

    Что было:
    PHP:
    <?
    function 
    get_cy ($domain)
    {
    $path="http://bar-navig.yandex.ru/u?ver=2&lang=1049&url=http://".$domain."&target=_No__Name:5&show=1&thc=0";
    $file=file($path);
    for (
    $i=1;$i<count($file);$i++)
    if (
    strpos ($file[$i],"tcy rang"))
        {
    $begin=strpos($file[$i],"value=\"");
    $end=strpos($file[$i],"\"",$begin+7);
    $cy=substr($file[$i],0,$end);
    $cy=substr($cy,$begin+7);
    if (
    $cy>10) return $cy; else return 0;
    }
    }
    ?>
    брр.. ужаснейший говнокод, особенно если учесть что страница выдаётся в виде xml.
    Мой вариант получения ТИц:
    PHP:
    function get_cy(){
      return 
    simplexml_load_string(file_get_contents("http://bar-navig.yandex.ru/u?ver=2&lang=1049&url=http://{$_SERVER['SERVER_NAME']}&target=_No__Name:5&show=1&thc=0"))->tcy->attributes()->rang;
    }
    Вам предлагается либо уменьшить то, что я уже написал, либо написать вменяемую версию получения PR Гугла. На данный момент имеется вот такой ужас:
    PHP:
    <?
    define('GOOGLE_MAGIC'0xE6359A60);

    //unsigned shift right
    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/* all the case statements fall through */
    {
    case 
    11$c+=($url[$k+10]<<24);
    case 
    10$c+=($url[$k+9]<<16);
    case 
    $c+=($url[$k+8]<<8);
    /* the first byte of c is reserved for the length */
    case $b+=($url[$k+7]<<24);
    case 
    $b+=($url[$k+6]<<16);
    case 
    $b+=($url[$k+5]<<8);
    case 
    $b+=($url[$k+4]);
    case 
    $a+=($url[$k+3]<<24);
    case 
    $a+=($url[$k+2]<<16);
    case 
    $a+=($url[$k+1]<<8);
    case 
    $a+=($url[$k+0]);
    /* case 0: nothing left to add */
    }
    $mix mix($a,$b,$c);
    /*-------------------------------------------- report the result */
    return $mix[2];
    }

    //converts a string into an array of integers containing the numeric value of the char
    function strord($string) {
    for(
    $i=0;$i<strlen($string);$i++) {
    $result[$i] = ord($string{$i});
    }
    return 
    $result;
    }

    function 
    get_pr($url) {
    $result=array("",-1);

    if ((
    $url.""!="")&&($url.""!="http://")):
    // check for protocol 
    if (substr(strtolower($url),0,7)!="http://"):
    $url="http://".$url;
    endif;

    $url="info:".$url;
    $checksum=GoogleCH(strord($url));
    $google_url=sprintf("http://www.google.com/search?client=navclient-auto&ch=6%u&features=Rank&q=".$url,$checksum); // url to get from google 
    $contents="";

    $handle fopen($google_url"rb");
    $contents '';
    while (!
    feof($handle)) {
      
    $contents.= fread($handle8192);
    }
    fclose($handle);
    $p=explode(":",$contents);
    if (isset(
    $p[2])):
    $result[1]=$p[2];
    endif;
    endif;

    return 
    $result;
    }

    function 
    getPR_url($url)
    {
      global 
    $db;

      if (
    eregi('^http://www.',$url)) {
       
    $url_www str_replace('http://www.','http://',$url);
      } else {
       
    $url_www str_replace('http://','http://www.',$url);
      }

      
    $pr=get_pr($url);
      
    $output=$pr[0];
      
    $pagerank=$pr[1];
      
    sleep(1);
      
    $pr=get_pr($url_www);
      
    $output_www=$pr[0];
      
    $pagerank_www=$pr[1];

      if (
    $pagerank<$pagerank_www) {
       
    $pagerank=$pagerank_www;
      }
      if (
    $pagerank==-1) {
       
    $pagerank=0;
      }
     return 
    intval($pagerank);
    }
    ?>

     
  2. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    реально...