DISCUZ论坛批量采集头像思路和部分代码

时间: 2015-03-16 / 分类: 生活 / 浏览次数: 4,297 views / 0个评论 发表评论

这个看起来还不错,有机会试一下

研究了下头像部分 发现其实采集需要大中小三个图都采集过来 
以下是dz官网的头像链接
http://uc.discuz.net/data/avatar/001/47/69/83_avatar_big.jpg
http://uc.discuz.net/data/avatar/001/47/69/83_avatar_middle.jpg
http://uc.discuz.net/data/avatar/001/47/69/83_avatar_small.jpg
/001/47/69/83这是头像的所在目录 其实是用户的ID号1476983
也就是说一个ID是123的话会自动换算成/000/00/01/23的格式来保存
并且被采集论坛头像也不是所有用户都有 所以采集的序列并不是从1-999999999
但是保存到自己的站上要从1开始排序 这样才能保证所有用户都有头像
把ID转换成9位数再变成路径的代码

$i = 1;
do{
$pwd = $i;
$pwd = str_pad($pwd,9,"0",STR_PAD_LEFT);
$pwd = trim(preg_replace('/^\d{1,3}|\d{2}/', '$0/', $pwd), '/');
echo $pwd . "<br/>";
$i++;
}
while($i < 1000);

再来发保存远程图片的代码


     function get_file($url,$folder,$pic_name){
         set_time_limit(24*60*60); //限制最大的执行时间
         $destination_folder=$folder?$folder.'/':''; //文件下载保存目录
         $newfname=$destination_folder.$pic_name;//文件PATH
         $file=fopen($url,'rb');
         if($file){        
             $newf=fopen($newfname,'wb');
             if($newf){            
                 while(!feof($file)){                  
                     fwrite($newf,fread($file,1024*8),1024*8);
                 }
             }
             if($file){            
                 fclose($file);
             }
             if($newf){            
                 fclose($newf);
             }
         }     
     } 
     get_file("http://uc.discuz.net/data/avatar/000/00/08/59_avatar_middle.jpg","./file","baidu.jpg");

 

每    1000次sleep(5) 就可以了 防止卡

$i = 1;

do{

    $pwd = $i;

    $pwd = str_pad($pwd,9,"0",STR_PAD_LEFT);

    $pwd = trim(preg_replace(‘/^\d{1,3}|\d{2}/’, ‘$0/’, $pwd), ‘/’);    
    echo $pwd . "<br/>";

    $i++;

get_file("http://uc.discuz.net/data/avatar/".$pwd."_avatar_middle.jpg","./file","baidu.jpg");

if($i mod 1000 == 0)

  sleep(5);

}

while($i < 1000);

 

从网上找了一份,但是速度真心慢如蜗牛啊!有没有其他方式写的案例?

<?
$url=$_GET['url'];
$dir=$_GET['dir'];
$uid=$_GET['uid'];
$time=$_GET['time'];
if(empty($time)){$time=0.1;}
$mixuid=$_GET['mixuid'];

$my404=file_get_contents("http://uc.discuz.net/data/avatar/1");
function createdir($dir){//创建文件夹
   $edir = explode('/',$dir);
   for($i=0;$i<count($edir);$i++){
     $edirm = $edir[0];
     for($ii=1;$ii<=$i;$ii++){
       $edirm = $edirm.'/'.$edir[$ii];
     }
     if(file_exists($edirm) && is_dir($edirm)){
     }else{
        @mkdir ($edirm,0777);
     }
   }
}
$uids=$uid+1;


if(empty($mixuid)){
   echo <<<ETO
<html>
<body>

<form name="search_form">
UC地址:<input size="24" name="url" value="http://uc.discuz.net">末尾不要带/<br />
头像保存目录:<input size="24" name="dir" value="touxiang/">末尾要带/<br />
开始UID:<input size="14" name="uid" value="1"><br />
结束UID:<input size="14" name="mixuid" value="100"><br />
采集间隔:<input size="14" name="time" value="1"><br />
<input type="submit" value="开始采集" ><br />
</from>
</body>
</html>
ETO;
   echo file_get_contents('touxiang_log.txt');
}else{
   if($uid<=$mixuid){
     echo <<<ETO
<html>
<body>
<meta http-equiv="refresh" content="$time;url=?url=$url&dir=$dir&time=$time&uid=$uids&mixuid=$mixuid">
ETO;

     //使用正则转换头像ID规则
     $Uid=substr('00000000'.$uid,-9,9);
     $img_id=preg_replace("/(\d{3})(\d{2})(\d{2})(\d{2})/i","$1/$2/$3/$4",$Uid);

     //头像地址规则
     $img_small=$img_id.'_avatar_small.jpg';
     $img_middle=$img_id.'_avatar_middle.jpg';
     $img_big=$img_id.'_avatar_big.jpg';

     //设置头像绝对地址
     $img_url_small=$url.'/data/avatar/'.$img_small;
     $img_url_middle=$url.'/data/avatar/'.$img_middle;
     $img_url_big=$url.'/data/avatar/'.$img_big;

     //采集头像
     $img_file_small=file_get_contents($img_url_small);
     $img_file_middle=file_get_contents($img_url_middle);
     $img_file_big=file_get_contents($img_url_big);

     createdir(dirname($dir.$img_small));//创建头像目录,反之无权限写入

     //保存头像
     if($img_file_small==$my404){
       echo $img_url_small.'采集失败<br />';
     }else{
      file_put_contents($dir.$img_small, $img_file_small);
   echo $img_url_small.'采集成功<br /><img src="'.$dir.$img_small.'"><br /><br /><br />';
     }
     if($img_file_middle==$my404){
      echo $img_url_middle.'采集失败<br />';
     }else{
   file_put_contents($dir.$img_middle, $img_file_middle);
   echo $img_url_middle.'采集成功<br /><img src="'.$dir.$img_middle.'"><br /><br /><br />';
     }
     if($img_file_big==$my404){
      echo $img_url_big.'采集失败<br />';
     }else{
   file_put_contents($dir.$img_big, $img_file_big);
   echo $img_url_big.'采集成功<br /><img src="'.$dir.$img_big.'"><br /><br /><br />';
     }

     file_put_contents('touxiang_log.txt', '最后采集头像UID:'.$uid);//记录最后采集ID
     echo <<<ETO

</body>
</html>
ETO;
   }else{
     header("Location: ".$_SERVER['SCRIPT_NAME']);
   }
}
?>

发表评论

您的昵称 *

您的邮箱 *

您的网站