当前位置: 首页 > article >正文

Laravel5 抓取第三方网站图片,存储到本地

背景

  • 近期发现,网站上的部分图片无法显示,
    分析发现,是因为引用的第三方网站图片(第三方服务器证书已过期)
    想着以后显示的方便
    直接抓取第三方服务器图片,转存到本地服务器
  • 思路
	1. 查询数据表,确认待转存的图片链接
	2. 代码抓取图片,转存到本地服务器的一个指定目录中
	3. 使用 redis 集合,存储已操作的图片链接,避免后续重复抓取
	4. 更改数据表 存储记录,替换链接

代码参考

  • 以链接:https://pic2.zhimg.com/gift/v2-8d3f288feae0e511dee5c3d6735ca999_r.jpg 为例
        /**
     * @notes:图片抓取代码
     * @param string $url
     * @throws \GuzzleHttp\Exception\GuzzleException
     * @author: zhanghj
     * @Time: 2024/10/28 10:00
     */
    public function grabImages($url = ''){
        $start_str = 'https://';

        $file_name = explode('/gift/',$url)[1]??'';
        if (strpos($url,$start_str)===0){
            //查询是否已存在
            $redis_key = 'mz_uu_b1b_images';
            $isMember = Redis::sIsMember($redis_key,$file_name);
            if ($isMember){
                logger()->warning('已存在:'.$file_name);
            }else{
                $_set = ['verify' => false, 'http_errors' => false];
                $client = new Client($_set);
                $response = $client->get($url);
                $contents = $response->getBody()->getContents();


                $localPath = "uub1b/{$file_name}"; // 假设下载的图片都是JPEG格式
                Storage::put($localPath, $contents);

                Redis::sAdd($redis_key,$file_name);
                logger()->warning('已抓取:'.$url);
            }
        }
        //echo 'Image downloaded successfully!';
    }

数据表,记录替换更新

  • 参考 mysql 执行语句如下:
UPDATE cms_igoods
SET img = CASE
    WHEN INSTR(img, 'https://xx.mix.com/pointshopproduct/gift') > 0 THEN REPLACE(img, 'https://xx.mix.com/pointshopproduct/gift', 'uub1b_img')
    ELSE img
END
WHERE integralgoodid > 0;

http://www.kler.cn/a/370312.html

相关文章:

  • 《开源与合作:驱动鸿蒙Next系统中人工智能技术创新发展的双引擎》
  • Scala语言的循环实现
  • 多级缓存 JVM进程缓存
  • Python+ tkinter实现小学整数乘法和除法竖式演算式
  • 风吹字符起,诗意Linux:一场指令与自由的浪漫邂逅(上)
  • 蓝桥杯3525 公因数匹配 | 枚举+数学
  • Stable Diffusion视频插件Ebsynth Utility安装方法
  • npm设置镜像源
  • JavaScript 的 axios 实现文件下载功能
  • NVR批量管理软件/平台EasyNVR多个NVR同时管理支持UDP和TCP传输协议
  • 海外著名门户媒体发稿之科技时报Tech Times - 大舍传媒
  • LED显示屏模组七大参数解析
  • 【面试题系列】MySQL 中 GROUP BY 和 DISTINCT 有什么区别?
  • Git (Linux)
  • 15分钟学 Go 第 24 天:并发基础 - Channels
  • Golang | Leetcode Golang题解之第508题出现次数最多的子树元素和
  • 郑州面试得问题
  • 宇视设备视频平台EasyCVR视频融合平台果园/鱼塘/养殖场/菜园有电没网视频监控方案
  • iOS AVAudioSession 详解【音乐播放器的配置】
  • 调用detr-resnet-50进行目标检测
  • JetBrains IDE中GPU进程(JCEF)重启问题(Too many restarts of GPU-process)解决方案
  • 【经验】Redis 持久化机制 RDB 和 AOF 区别
  • 篇章十一 打包构建工具
  • Python_PyCharm换源操作
  • Spring Boot实现的中小企业设备信息管理系统
  • 可编辑PPT | 柔性制造企业数字化转型与智能工厂建设方案