DISCUZ论坛批量采集头像思路和部分代码
这个看起来还不错,有机会试一下
研究了下头像部分 发现其实采集需要大中小三个图都采集过来
以下是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']);
}
}
?>