DISCUZ论坛批量采集头像思路和部分代码
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']); }
}
?>
阅读全文