blueyund

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
PHP代码
  1. <?php   
  2.     class Thief{    
  3.       // 需要得到数据的网址   
  4.      var $URL;   
  5.      // 需要分析的开始标记   
  6.      var $startFlag;   
  7.      //需要分析的结束标记   
  8.      var $endFlag;   
  9.      //存储图片的路径   
  10.      var $saveImagePath;   
  11.      //访问图片的路径   
  12.      var $imageURL;   
  13.      // 列表内容   
  14.      var $ListContent;   
  15.      //需要获得的图片路径   
  16.      var $ImageList;   
  17.      //存储的图片名称   
  18.      var $FileName;   
  19.      /**  
  20.      * 得到页面内容  
  21.      * @return String 列表页面内容  
  22.      */  
  23.      function getPageContent ()   
  24.      {                   
  25.       $pageContent = @file_get_contents$this->URL );   
  26.       return $pageContent;   
  27.      }   
  28.      /**  
  29.      * 根据标记得到列表段  
  30.      * @param $content  页面源数据  
  31.      * @return String   列表段内容  
  32.      */  
  33.      function getContentPiece ( $content )   
  34.      {   
  35.       $content = $this->getContent( $content$this->startFlag, $this->endFlag );   
  36.                                                         if(!$content)  $content=$this->cut ($content$this->startFlag, $this->endFlag );   
  37.       return $content;   
  38.      }   
  39.      /**  
  40.      * 得到一个字符串中的某一部分  
  41.      * @param $sourceStr 源数据  
  42.      * @param $startStr 分离部分的开始标记  
  43.      * @param $endStart 分离部分的结束标记  
  44.      * @return boolean  操作成功返回true  
  45.      */  
  46.      function getContent ( $sourceStr$startStr$endStart )   
  47.      {   
  48.       $s = preg_quote( decode( $startStr ) );   
  49.       $e = preg_quote( decode( $endStart ) );   
  50.       $s = str_replace" ""[[:space:]]"$s );   
  51.       $e = str_replace" ""[[:space:]]"$e );   
  52.       $s = str_replace"\r\n""[[:cntrl:]]"$s );   
  53.       $e = str_replace"\r\n""[[:cntrl:]]"$e );    
  54.        preg_match_all( "@" . $s . "(.*?)"$e ."@is"$sourceStr$tpl );    
  55.        $content = $tpl[1];   
  56.       $content = implode( ""$content );   
  57.       return $content;   
  58.      }   
  59.      function cut ( $sourceStr$startStr$endStr )   
  60.      {   
  61.                                                    return  cut( $sourceStr ,decode( $startStr )  ,decode( $endStr) );   
  62.                                        }   
  63.        
  64. /**  
  65.      * 得到只含有连接和内容的列表数组  
  66.      * @param $sList  页面列表源数据  
  67.      * @return array  列表段内容  
  68.      */  
  69.      function getSourceList ( $sList )   
  70.      {   
  71.       preg_match_all( "/<a[[:space:]](.*?)<\/a>/i"$sList$list );    
  72.        $list = $list[0];   
  73.    //foreach($list as $l) echo $l;   
  74.                                                         if(!$list || !is_array($list)){   
  75.                                                                       return $this->getSourceListExtend($sList);    
  76.                                                         }else{   
  77.                                       return $this->getList ( $list );   
  78.                                                         }   
  79.      }   
  80.                                       function getSourceListExtend($sList)   
  81.                                       {   
  82.                                                      $content=explode("</a>",$sList);   
  83.                                                      for($i=0;$i<count($content)-1;$i++)   
  84.                                                      {   
  85.                                                               $lists=explode("<a",$content[$i]);   
  86.                                                               $list[]=$lists[1];   
  87.                                                      }    
  88.                                                                return $this->GetListExtend( $list );   
  89.                                       }   
  90.         
  91. /**  
  92.      * 得到列表内容  
  93.      * @param $list  列表段内容  
  94.      * @return array  含有标题和连接的数组  
  95.      */  
  96.      function getList ( $list )   
  97.      {   
  98.       for ( $i = 0; $i < count$list ); $i++ )   
  99.       {                   
  100.        //title   
  101.        preg_match_all( "/>(.*?)<\/a>/i"$list[$i], $templ );    
  102.         //content   
  103.        preg_match_all( "/href=(\"|'|)(.*?)(\"|'|)/i"$list[$i], $tempc );   
  104.        //获取的数据正确   
  105.        if( !emptyempty$templ[1][0] ) && !emptyempty$tempc[2][0] ) )   
  106.        {   
  107.         if( 0 == strpos$tempc[2][0], "/" ) )   
  108.         {   
  109.          preg_match( "@http://(.*?)/@i"$this->URL, $url );   
  110.          $tempc[2][0] = substr$url[0], 0, strlen$url[0] ) - 1 ) . $tempc[2][0];   
  111.         }   
  112.         $listContent[$i][0] = $templ[1][0];   
  113.          $listContent[$i][1] = $tempc[2][0];   
  114.        }   
  115.                                                         }   
  116.                                                         if(!$listContent || !is_array($listContent)){   
  117.                                                                   return $this->GetListExtend ( $list );   
  118.                                                         }else{   
  119.                 return $listContent;   
  120.                                                         }   
  121.      }    
  122. function GetListExtend ( $list )   
  123.      {                     
  124.                                                         $list=str_replace("\"","",$list);   
  125.                                                         $list=str_replace("'","",$list);   
  126.                                                         $list=str_replace("=","",$list);   
  127.       for ( $i = 0; $i <count$list ); $i++ )   
  128.       {   
  129.        //content   
  130.        $temp_link=$this->cut($list[$i],"href"," ");   
  131.                                                                           echo $temp_link."<br>";   
  132.        //title    
  133.        if(eregi(">",$list[$i])){   
  134.          $temp_title=substr(strrchr($list[$i], ">"), 1 );    
  135.          $temp_title=preg_replace( "@\<(.*?)\>@is","",$temp_title);   
  136.          $temp_title=str_replace">","",$temp_title);   
  137.          $temp_title=str_replace"<","",$temp_title);        
  138.          if(!$temp_title)   $temp_title=$list[$i] ;   
  139.           $temp_title=preg_replace( "@\<(.*?)\>@is","",$temp_title);   
  140.           $temp_title=str_replace">","",$temp_title);   
  141.           $temp_title=str_replace"<","",$temp_title);         
  142.            echo $temp_title."<br>";   
  143.                                                                           }else{   
  144.         $temp_title=$list[$i];          
  145.         $temp_title=preg_replace( "@\<(.*?)\>@is","",$temp_title);   
  146.          $temp_title=str_replace">","",$temp_title);   
  147.          $temp_title=str_replace"<","",$temp_title);     
  148.          echo $temp_title."<br>";   
  149.                                                                           }   
  150.          
  151. //获取的数据正确   
  152.        if( !emptyempty$temp_link ) && !emptyempty$temp_title) )   
  153.        {   
  154.         if( 0 == strpos$tempc[2][0], "/" ) )   
  155.         {   
  156.          preg_match( "@http://(.*?)/@i"$this->URL, $url );   
  157.          $temp_link = substr$url[0], 0, strlen$url[0] ) - 1 ) . $temp_link;   
  158.         }   
  159.         $listContent[$i][0] = trim($temp_title);   
  160.         $listContent[$i][1] = $temp_link;   
  161.        }   
  162.                                                         }   
  163.       return $listContent;    
  164.                                        }    
  165. /**  
  166.      * 得到正文中的图片路径信息  
  167.      * @param $content 正文信息  
  168.      * @return array  信息中图片路径的数组  
  169.      */  
  170.      function getImageList ( $content )   
  171.      {   
  172.       preg_match_all( "/src=(\"|')(.*?)(\"|')/i"$content$temp );   
  173.       $imageList = $temp[2];   
  174.       return array_unique($imageList);   
  175.      }   
  176.      /**  
  177.      * 下载图片时将页面中的路径替换成新的路径  
  178.      * @param $content  需要替换路径的页面内容  
  179.      * @return String   替换后的页面内容  
  180.      */  
  181.      function replaceImageParh ( $content )   
  182.      {   
  183.       for ( $i = 0; $i < count$this->ImageList ); $i++ )   
  184.       {   
  185.                                                                          if($this->FileName[$i]){   
  186.                      $content = str_replace$this->ImageList[$i], $this->imageURL.$this->FileName[$i], $content );   
  187.                                                                          }else{        
  188.                //$s=" /src=(\\\"|')".preg_quote($this->ImageList[$i])."(\\\"|')/i";   
  189.                      $content = str_replace($this->ImageList[$i], $GLOBALS[SET][webpath]."images/nopic.gif"$content );   
  190.                                                                          }   
  191.       }   
  192.       return $content;   
  193.      }   
  194.      /**  
  195.      * 下载图片时读取图片文件后存储在相应路径  
  196.      * @param $imageURL 需要读取的图片文件  
  197.      * @return boolean  操作成功返回true  
  198.      */  
  199.      function saveImage ( $imageURL )   
  200.      {   
  201.       for ( $i = 0; $i < count$imageURL ); $i++ )   
  202.       {   
  203.        $fName = $this->saveFile( $imageURL[$i] );   
  204.        if( !emptyempty$fName ) )   
  205.        {                   
  206.         $filename[$i] = $fName;   
  207.        }   
  208.       }   
  209.       return $filename;   
  210.      }   
  211.      function saveFile( $fileName )   
  212.      {   
  213.       $s_filename = basename$fileName );   
  214.       $ext_name = strtolowerstrrchr$s_filename"." ) );   
  215.       if( ( ".jpg" && ".gif" && ".swf" ) != strtolower$ext_name ) )   
  216.       {   
  217.        return "";   
  218.       }   
  219.       if( 0 == strpos$fileName"/" ) )   
  220.       {   
  221.        preg_match( "@http://(.*?)/@i"$this->URL, $url );   
  222.        $url = $url[0];   
  223.       }   
  224.       if( 0 == strpos$fileName"." ) )   
  225.       {   
  226.        $url = substr$this->URL, 0, strrpos$fileName"/" ) );   
  227.       }   
  228.       $contents = @file_get_contents$url . $fileName );    
  229.        $s_filename = time(). rand( 1000, 9999 ) . $ext_name;   
  230.       //file_put_contents( $this->saveImagePath.$s_filename, $contents );   
  231.       $handle = @fopen ( $this->saveImagePath.$s_filename"w" );   
  232.       @fwrite( $handle$contents );   
  233.       @fclose($handle);   
  234.       if(filesize($this->saveImagePath.$s_filename)>3072){   
  235.                 return $s_filename;   
  236.                                                         }else{   
  237.                                                                   @unlink($this->saveImagePath.$s_filename);   
  238.                 return "";   
  239.                                                        }   
  240.      }   
  241.         
  242. /**  
  243.      * 不下载图片则格式化其路径为绝对路径  
  244.                                       * 不能格式化变态路径 Eg: ./../  or /./../ 一类的  不过不影响结果  
  245.      * @param $imageURL 需要读取的图片文件  
  246.      * @return $filename  返回格式化的图片路径  
  247.      */  
  248.                                       function  ToPath($imageURL)   
  249.                                       {   
  250.                                                         $PathArray=parse_url($this->URL);   
  251.                                                         $webpath=$PathArray[scheme]."://".$PathArray[host] ;   
  252.                                                         $filepath=$PathArray[path] ;   
  253.                                               for ( $i = 0; $i < count$imageURL ); $i++ )   
  254.       {   
  255.                                                                    ifsubstr$imageURL[$i] ,0,1 )== '/' ){  
  256.         $filename[$i] =$webpath.$imageURL[$i];  
  257.                                                                    }elseif( substr( $imageURL[$i] ,0,2 )== './' ){  
  258.         $filename[$i] =$webpath.$filepath.substr( $imageURL[$i] ,1, strlen( $imageURL[$i]) );  
  259.                                                                    }elseif( substr( $imageURL[$i] ,0,3 )== '../' ){  
  260.         $index=strrchr($filepath,"/");  
  261.         $filename[$i] =$webpath.substr($filepath,0,$index).substr($imageURL[$i] ,2, strlen( $imageURL[$i]));  
  262.                                                                    }elseif(substr( $imageURL[$i] ,0,4)== 'http'){   
  263.         $filename[$i] =$imageURL[$i] ;   
  264.                                                                    }else{   
  265.                                                                    }   
  266.       }   
  267.       return $filename;                        
  268.                                        }    
  269. /**  
  270.      * 不下载图片时将页面中的路径替换成新的路径  
  271.      * @param $content  需要替换路径的页面内容  
  272.      * @return String   替换后的页面内容  
  273.      */  
  274.                                      function ImgPathReplace( $content )    
  275.                                      {   
  276.       for ( $i = 0; $i < count$this->ImageList ); $i++ )   
  277.       {   
  278.        $content = str_replace$this->ImageList[$i], $this->FileName[$i], $content );   
  279.       }   
  280.       return $content;                   
  281.                                      }       
  282.      function setURL ( $u )   
  283.      {   
  284.       $this->URL = $u;   
  285.       return true;   
  286.      }   
  287.      function setStartFlag ( $s )   
  288.      {   
  289.       $this->startFlag = $s;   
  290.       return true;   
  291.      }   
  292.      function setEndFlag ( $e )   
  293.      {   
  294.       $this->endFlag = $e;   
  295.       return true;   
  296.      }   
  297.      function setSaveImagePath ( $p )   
  298.      {   
  299.       $this->saveImagePath = $p;   
  300.       return true;   
  301.      }   
  302.      function setImageURL ( $i )   
  303.      {   
  304.       $this->imageURL = $i;   
  305.       return true;   
  306.      }   
  307.     }    
  308.     ?>  
posted on 2008-10-11 16:13  blueyund  阅读(2169)  评论(0编辑  收藏  举报