369c730f创建于 2023年8月23日历史提交
<?php


namespace Module\Vendor\QuickRun\Crawl;


trait HasCrawlerTools
{
    public function usePHPQuery()
    {
        require_once __DIR__ . '/libs/phpQuery-onefile.php';
    }

//    // 如 http://example.com/data/server/put
//    protected $DATA_CLIENT_SERVER = null;
//    // 如 xxxxxxxxxxx
//    protected $DATA_CLIENT_KEY = null;
//    // 如 http://cdn.example.com
//    protected $IMAGE_CDN = null;
//
//    protected function prepareRichContent($content, $pageUrl)
//    {
//
//        // 替换掉懒加载
    /*        preg_match_all('/(<img.*?)data-original="(.*?)"(.*?>)/i', $content, $mat);*/
//        if (!empty($mat[0])) {
//            foreach ($mat[0] as $index => $img) {
//                $content = str_replace($img, '<img src="' . $this->fixPath($mat[2][$index], $pageUrl) . '" />', $content);
//            }
//        }
//
    /*        preg_match_all('/(<img.*?)src="(.*?)"(.*?>)/i', $content, $mat);*/
//        if (!empty($mat[0])) {
//            foreach ($mat[0] as $index => $img) {
//                $content = str_replace($img, '<img src="' . $this->fixPath($mat[2][$index], $pageUrl) . '" />', $content);
//            }
//        }
    /*        preg_match_all('/(<img.*?)src=\'(.*?)\'(.*?>)/i', $content, $mat);*/
//        if (!empty($mat[0])) {
//            foreach ($mat[0] as $index => $img) {
//                $content = str_replace($img, '<img src="' . $this->fixPath($mat[2][$index], $pageUrl) . '" />', $content);
//            }
//        }
//
//        // 全局过滤
//        $content = HtmlHelper::filter($content);
//
//        // 移除a标签
//        $content = preg_replace("/<a[^>]*>(.*?)<\\/a>/is", "$1", $content);
//
//        $content = trim($content);
//
//        return $content;
//    }
//
//    protected function fixPath($path, $pageUrl)
//    {
//        if (empty($pageUrl)) {
//            return $path;
//        }
//        if (empty($path)) {
//            return null;
//        }
//        if (Str::startsWith($path, '//')) {
//            $path = 'http:' . $path;
//        }
//        if (Str::startsWith($path, 'http://') || Str::startsWith($path, 'https://')) {
//            return $path;
//        }
//        $urlParam = parse_url($pageUrl);
//        if (Str::startsWith($path, '/')) {
//            return $urlParam['scheme'] . '://' . $urlParam['host'] . $path;
//        }
//        $prefix = substr($pageUrl, 0, strrpos($pageUrl, '/') + 1);
//        return $prefix . $path;
//    }
//
//    /**
//     * 将 一个远程的图片 或 本地的图片 上传到主机
//     *
//     * @param $imageUrl string
//     * @param $isLocal boolean
//     * @return array
//     */
//    protected function localImage($imageUrl, $isLocal = false)
//    {
//        if ($isLocal) {
//            $image = file_get_contents($imageUrl);
//        } else {
//            if (Str::startsWith($imageUrl, '//')) {
//                $imageUrl = 'http:' . $imageUrl;
//            }
//
//            if (!(Str::startsWith($imageUrl, 'http://') || Str::startsWith($imageUrl, 'https://'))) {
//                return Response::generate(-1, '图片路径不是完整URL,忽略 -> ' . $imageUrl);
//            }
//
//            $image = CurlHelper::getContent($imageUrl);
//            if (empty($image)) {
//                return Response::generate(-1, '图片抓取失败 -> ' . $imageUrl);
//            }
//        }
//        $ext = FileHelper::extension($imageUrl);
//
//        // 随机文件存储,否则会全部存在一个文件夹
//        DataService::$UPLOAD_TIMESTAMP = time() - rand(1, 365) * 24 * 3600;
//
//        $category = 'image';
//        $ret = $this->dataService->uploadToData($category, 'image.' . $ext, $image);
//        if ($ret['code']) {
//            return Response::generate(-1, '图片存取失败 -> ' . $imageUrl);
//        }
//
//        $path = $ret['data']['data']['path'];
//        $fileSize = $ret['data']['data']['size'];
//
//        if ($this->DATA_CLIENT_SERVER && $this->DATA_CLIENT_KEY) {
//            $ret = $this->dataServerClient->clientPut(
//                $this->DATA_CLIENT_SERVER,
//                $this->DATA_CLIENT_KEY,
//                $category,
//                $path,
//                $image);
//            if ($ret['code']) {
//                return Response::generate(-1, '图片上传到远程失败 -> ' . $ret['msg']);
//            }
//        }
//
//        if ($this->IMAGE_CDN) {
//            $newImageUrl = $this->IMAGE_CDN . '/data/' . $category . '/' . $path;
//        } else {
//            $newImageUrl = '/data/' . $category . '/' . $path;
//        }
//
//
//        $this->info('图片抓取 -> ' . FileHelper::formatByte($fileSize) . ' -> ' . $imageUrl . ' -> ' . $newImageUrl);
//
//        return Response::generate(0, null, [
//            'url' => $newImageUrl,
//            'size' => $fileSize
//        ]);
//    }
//
//    protected function localContentImage($content)
//    {
//        $images = [];
    /*        preg_match_all('/(<img.*?)src="(.*?)"(.*?>)/i', $content, $mat);*/
//        if (!empty($mat[2])) {
//            $images = array_merge($images, $mat[2]);
//        }
    /*        preg_match_all('/(<img.*?)src=\'(.*?)\'(.*?>)/i', $content, $mat);*/
//        if (!empty($mat[2])) {
//            $images = array_merge($images, $mat[2]);
//        }
//        if (!empty($images)) {
//            $imageMap = [];
//            foreach ($images as $k => $oldImage) {
//                if (empty($imageMap[$oldImage])) {
//
//                    $imageMap[$oldImage] = $oldImage;
//
//                    $ret = $this->localImage($oldImage);
//                    if ($ret['code']) {
//                        $this->error($ret['msg']);
//                        continue;
//                    }
//
//                    $newImage = $ret['data']['url'];
//                    $imageMap[$oldImage] = $newImage;
//
//                }
//            }
//
//            foreach ($imageMap as $oldImage => $newImage) {
//                $content = str_replace($oldImage, $newImage, $content);
//            }
//
//        }
//
//        return $content;
//    }
}