From cd0d850f896dad771cfc55cd31796bc363e6e6f3 Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Fri, 14 Nov 2025 14:11:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E9=94=AE=E8=AF=8D=E6=8A=93=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/service/BrandSeriesService.php | 66 ++++++++++++++++-------- 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/app/admin/service/BrandSeriesService.php b/app/admin/service/BrandSeriesService.php index 594605b..7b12eec 100644 --- a/app/admin/service/BrandSeriesService.php +++ b/app/admin/service/BrandSeriesService.php @@ -330,35 +330,59 @@ class BrandSeriesService //懂车帝模糊搜索返回车系地址 $href = $crawlService->modelSearch($keyword); - $seriesId = $this->extractSeriesId($href); + $seriesId = $this->extractSeriesId($href); //懂车帝车系id - if (empty($seriesId)) { + if (empty($seriesId)) { //没有抓取到懂车帝系列id时,按关键词为品牌名抓取所有的系列名 + $crawlSeries = $crawlService->brandSeries($keyword); + } + + if (empty($seriesId) && empty($crawlSeries)) { throw new \Exception('抓取失败,未找到该系列车型'); } - //抓取品牌与系列 - $brandSeries = $crawlService->crawlBrandSeries($seriesId); - - - // 验证品牌是否存在 - $brand = Brand::where('brand_name', $brandSeries['brand'])->first(); - // 获取品牌信息 - $series = BrandSeries::where('series_name', $brandSeries['series'])->first(); - $result['brand'] = ['brand_name' => $brandSeries['brand'], 'exists' => $brand?1:0]; - if($brand){ - $result['brand']['id'] = $brand['id']; - } - $result['series'] = ['series_name' => $brandSeries['series'], 'exists' => $series?1:0]; - if($series){ - $result['series']['id'] = $series['id']; - if(empty($result['brand']['id'])){ - $result['brand']['id'] = $series['brand_id']; + $brandSerieses = []; + if(empty($seriesId) && !empty($crawlSeries)){ //关键词为品牌名时抓取所有车系的懂车帝id + $href = $crawlService->modelSearch($crawlSeries[0]); + $seriesId = $this->extractSeriesId($href); //懂车帝车系id + //抓取品牌与系列 + $brandSeries = $crawlService->crawlBrandSeries($seriesId); + foreach ($crawlSeries as $item) { +// $brandSerieses[] = $crawlService->brandSeries($keyword); + $brandSerieses[] = ['brand' => $brandSeries['brand'], 'series' => $item]; } + }elseif (!empty($seriesId) && empty($crawlSeries)){ + //抓取品牌与系列 + $brandSerieses[] = $crawlService->crawlBrandSeries($seriesId); } + $result = []; try { - //获取车型数据 - $result['model'] = $this->crawlSeriesModel($seriesId); + foreach ($brandSerieses as $brandSeries) { + $item = []; + // 验证品牌是否存在 + $brand = Brand::where('brand_name', $brandSeries['brand'])->first(); + // 获取品牌信息 + $series = BrandSeries::where('series_name', $brandSeries['series'])->first(); + $item['brand'] = ['brand_name' => $brandSeries['brand'], 'exists' => $brand ? 1 : 0]; + if ($brand) { + $item['brand']['id'] = $brand['id']; + } + $item['series'] = ['series_name' => $brandSeries['series'], 'exists' => $series ? 1 : 0]; + if ($series) { + $item['series']['id'] = $series['id']; + if (empty($item['brand']['id'])) { + $item['brand']['id'] = $series['brand_id']; + } + } + + //获取车型数据 + $item['model'] = []; + if (count($brandSerieses)<2) { + $item['model'] = $this->crawlSeriesModel($seriesId); + } + $result[] = $item; + } + return $result; } catch (\Exception $e) { throw new \Exception($e->getMessage());