123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- namespace App\Console\Commands;
- use Carbon\Carbon;
- use Illuminate\Console\Command;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\File;
- use Symfony\Component\DomCrawler\Crawler;
- /**
- * 导入相册内容到产品表
- * php artisan sync:brsiteFix
- */
- class SyncBrFix extends Command
- {
- /**
- * The name and signature of the console command.
- *
- * @var string
- */
- protected $signature = 'sync:brsiteFix';
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = 'Command description';
- public function handle()
- {
- $sqlFile = fopen('update_products.sql', 'a') or die("无法创建SQL文件");
- $ossHost = 'https://mietubl-website.oss-accelerate.aliyuncs.com';
- //$ossHost = 'https://mietubl-dev.oss-accelerate.aliyuncs.com';
- $baseUrl = 'https://mietubloficial.com.br';
- $urlList = [
- ['slug'=>'tws', 'url'=>'/tws/'],
- ['slug'=>'protetor-de-tela-de-vidro-temperado', 'url'=>'/protetor-de-tela-de-vidro-temperado/'],
- ['slug'=>'protetor-da-tela-do-tablet', 'url'=>'/protetor-da-tela-do-tablet/'],
- ['slug'=>'maquina-de-corte-de-protetor-de-tela', 'url'=>'/maquina-de-corte-de-protetor-de-tela/'],
- ['slug'=>'folhas-de-protetor-de-tela-de-hidrogel', 'url'=>'/folhas-de-protetor-de-tela-de-hidrogel/'],
- ['slug'=>'lightning', 'url'=>'/lightning/'],
- ['slug'=>'type-c', 'url'=>'/type-c/'],
- ['slug'=>'micro-usb', 'url'=>'/micro-usb/'],
- ['slug'=>'fones-de-ouvido-auricular-com-fio', 'url'=>'/fones-de-ouvido-auricular-com-fio/'],
- ['slug'=>'fones-de-ouvido', 'url'=>'/fones-de-ouvido/'],
- ['slug'=>'alto-falantes-bluetooth', 'url'=>'/alto-falantes-bluetooth/'],
- ['slug'=>'carregador-de-parede', 'url'=>'/carregador-de-parede/'],
- ['slug'=>'produtos-perifericos', 'url'=>'/produtos-perifericos/'],
- ];
- foreach ($urlList as $entry) {
- try {
- $category = DB::table('dist_product_category')
- ->where('slug', $entry['slug'])
- ->where('dist_id', 3)
- ->first();
- if (!$category) {
- echo "分类未找到,slug: {$entry['slug']}\n";
- continue;
- }
- echo "分类 {$category->name} \n";
- if ($entry['slug'] == 'produtos-perifericos') {
- $detailUrls = ['https://mietubloficial.com.br/produto/mini-impressora-de-pele-para-celular-mtb-pp01/'];
- } else {
- $html = file_get_contents($baseUrl . $entry['url']);
- $listCrawler = new Crawler($html);
- $detailUrls = $listCrawler->filter('.elementor-shortcode a')->extract(['href']);
- }
- foreach ($detailUrls as $detailUrl) {
- $detailHtml = file_get_contents($detailUrl);
- $detailCrawler = new Crawler($detailHtml);
- // 解析基础数据
- $title = $detailCrawler->filter('.product_title')->text();
- // 插入产品获取ID
- $productId = DB::table('dist_product')->where('title', $title)->where('dist_id', 3)->first();
- if (!$productId) {
- echo "产品未找到,title: {$title}\n";
- continue;
- }
- // 1. 去除最后一个字符(仅当末尾是斜杠时)
- $trimmedUrl = substr($detailUrl, 0, -1);
- // 2. 分割路径并取末段
- $path = parse_url($trimmedUrl, PHP_URL_PATH);
- $segments = explode('/', $path);
- $slug = end($segments);
- // 生成更新SQL
- $escapedTitle = addslashes($title); // 转义特殊字符
- $escapedSlug = addslashes($slug);
- $sql = "UPDATE dist_product SET seo_title = title,slug = '{$escapedSlug}' WHERE title = '{$title}' AND dist_id = 3;\n";
- // 写入SQL文件
- fwrite($sqlFile, $sql);
- echo "生成SQL:{$sql}\n";
- echo "处理主图完成,下一个产品 \n";
- echo "------------------------------------------\n";
- }
- } catch (\Exception $e) {
- echo "数据采集失败: " . $e->getMessage() . "\n";
- continue;
- }
- }
- dd('所有处理完成');
- }
- }
|