www.yaxjf.com+m.php,使用PHP保存微信文章页的图片

首先我们拿到一个id为js_content的微信文章字符串,然后我们进行解压成字符串

但是这个时候呢,部分图片资源加载不出来

原因是:微信资源做了限制

解决方案,保存本地,

第一部分,用phpspider里面的selector类,获取图片列表html,然后用xpath,获取每个图片真正的图片路径

然后进行循环,循环把这些图片资源保存到本地,然后进行替换,这样就获得了一个个的单个调用本地图片的img标签

然后再把这些处理过的标签,和文章内容html里面的img标签替换一下

思路是不是很简单.下面是代码..

//过滤内容页

public function content_filter(){

$content="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";

$content=$this->ungz_str($content);

//去除iframe标签

$content=selector::remove($content,"@@","regex");

//将内容格式化(规范化代码) 比如有的img标签,不规范的,会给规范化

$content=selector::select($content,"//div[@id='js_content']");

//替换url里面的空格字符;因为有的url带这个空格的会导致字符串匹配替换不到

$content=str_replace("amp;","",$content);

//获取图片列表

$img_list=selector::select($content,"//img");

if(empty($img_list)){

return $content;

}

foreach ($img_list as $k=>$v){

//单个图片标签字符串

$img_str=str_replace("amp;","",$v);//替换url里面的空格字符;

$img_url=selector::select($img_str,"//@data-src");//真正的图片源

$img_src=selector::select($img_str,"//@src");//虚假的图片src

//无url,跳出循环

if(strlen($img_url)<5){

continue;

}

$params=parse_url($img_url);//解析url的参数

//设置后缀字符串

if(isset($params['query'])){

$arr=explode("=",$params['query']);

$suffix=$arr[1];

}else{

$suffix="jpg";

}

//组成本地图片文件名称

$file_name=$params["path"].".".$suffix;

$file_name=str_replace("/","",$file_name);

//进行本地保存

$res=$this->getImage($img_url,$file_name);

//替换图片资源字符串(将图片的src,换成本地的图片资源url) 将虚假的src,换成真正的本地图片url

$img_str=str_replace($img_src,$res["save_path"],$img_str);

//替换图片资源字符串(将图片的data-src,换成空字符串) 将data-src,换成空字符串

$img_str=str_replace($img_url,"",$img_str);

//单个图片标签字符串 作为下面匹配content,做替换用的

$find_img_str=str_replace("amp;","",$v);//替换url里面的空格字符;

//替换图片标签字符串

$content=str_replace($find_img_str,$img_str,$content);

}

var_dump($content);

}

function getImage($url,$filename='',$type=0){

$save_dir='/uploads/wechat/'.date("Ymd",time());

if(trim($url)==''){

return "url为空";

}

if(trim($filename)==''){//保存文件名

return "文件名为空!";

}

//真正的文件目录 例如D:\WWW\wx_news\public\uploads\wechat\20200515\

$real_dir_path=ROOT_PATH.DS.'public'.$save_dir;//拼接真正的目录

$real_dir_path=str_replace("/","\\",$real_dir_path);//转'/'为'\'

$real_dir_path=str_replace("\\\\","\\",$real_dir_path);//转'\\'为'\'

//真正的文件名路径 例如D:\WWW\wx_news\public\uploads\wechat\20200515\1.png

$real_file_path=$real_dir_path."\\".$filename;

$real_file_path=str_replace("\\\\","\\",$real_file_path);

//文件相对路径返回值 例如:/uploads/wechat/20200515/1.png

$return_file_path=$save_dir.'/'.$filename;

//判断是否存在目录 不存在进行创建

if(is_dir($real_dir_path)==false){

$mk_res=mkdir($real_dir_path,0777,true);

if($mk_res==false){

return "创建目录失败!";

}

}

//存在相同文件,直接返回相同文件的结果

if(file_exists($real_file_path)==true){

return array('file_name'=>$filename,'save_path'=>$return_file_path,'error'=>0);

}

//获取远程文件

if($type){

$ch=curl_init();

$timeout=5;

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);

$file_str=curl_exec($ch);

curl_close($ch);

}else{

ob_start();

readfile($url);

$file_str=ob_get_contents();

ob_end_clean();

}

//文件大小

$file=fopen($real_file_path,'w');//打开文件

fwrite($file,$file_str);//写入图片信息流

fclose($file);//关闭文件

unset($img,$url);//销毁变量

//返回数据

return array('file_name'=>$filename,'save_path'=>$return_file_path,'error'=>0);

}

//解压base64字符串

public function ungz_str($str){

$str=base64_decode($str);//base64解码

$str=gzuncompress($str);//解压缩

$str=json_decode($str,true);//转字符串

return $str;

}

下面是效果

98de05f6fcd3c1fd270cd1453c4e3698.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值