From 8827daec5dcfb7e5a8f3f12f46f1115f912eca6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20P=C5=82aczek?= Date: Sun, 26 May 2024 10:54:52 +0200 Subject: [PATCH] Split command class into more manageable methods --- src/Command/ScrapeWebsite.php | 73 ++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/src/Command/ScrapeWebsite.php b/src/Command/ScrapeWebsite.php index 78315e9..76ed394 100644 --- a/src/Command/ScrapeWebsite.php +++ b/src/Command/ScrapeWebsite.php @@ -35,9 +35,23 @@ class ScrapeWebsite extends Command { $progress = new ProgressBar($output); $progress->start(); + $products = $this->getProducts(); + $progress->setMaxSteps(count($products)); + foreach ($products as $product) { + $this->saveProduct($product); + $progress->advance(); + } + $progress->finish(); + $output->writeln(''); + $output->writeln('DONE'); + return Command::SUCCESS; + } + + private function getProducts(): array + { + $products = []; $page = 0; do { - $progress->advance(); $res = $this->client->request('POST', 'https://pl.ryobitools.eu/api/product-listing/get-products', [ 'form_params' => [ "includePreviousPages" => false, @@ -48,36 +62,33 @@ class ScrapeWebsite extends Command ]); $page++; $responseObject = json_decode($res->getBody()->getContents()); - $products = $responseObject->products; - $progress->setMaxSteps($progress->getMaxSteps() + count($products)); - foreach ($products as $product) { - /** @var Product $productModel */ - $productModel = Product::firstOrNew(['skuID' => $product->skuID]); - $productModel->skuID = $product->skuID; - $productModel->name = $product->name; - $productModel->availableQuantity = $product->availableQuantity; - $productModel->stock = $product->stock; - $productModel->categories = json_encode($product->categories); - $productModel->image = $product->image; - $productModel->subTitle = $product->subTitle; - $productModel->variantCode = $product->variantCode; - $productModel->modelCode = $product->modelCode; - $productModel->url = $product->url; - $productModel->save(); - $priceExists = $productModel->price()->whereRaw("strftime('%Y-%m-%d', created_at) = ?", [date('Y-m-d')])->exists(); - if (!$priceExists) { - $price = new Price(); - $price->price = $product->productPrice; - $price->productStandardPrice = $product->productStandardPrice; - $price->lowestProductPrice30Days = $product->lowestProductPrice30Days; - $productModel->price()->save($price); - } - $progress->advance(); - } + $products = array_merge($products, $responseObject->products); } while ((bool)$responseObject->canLoadMore); - $progress->finish(); - $output->writeln(''); - $output->writeln('DONE'); - return Command::SUCCESS; + return $products; + } + + private function saveProduct(\stdClass $product) + { + /** @var Product $productModel */ + $productModel = Product::firstOrNew(['skuID' => $product->skuID]); + $productModel->skuID = $product->skuID; + $productModel->name = $product->name; + $productModel->availableQuantity = $product->availableQuantity; + $productModel->stock = $product->stock; + $productModel->categories = json_encode($product->categories); + $productModel->image = $product->image; + $productModel->subTitle = $product->subTitle; + $productModel->variantCode = $product->variantCode; + $productModel->modelCode = $product->modelCode; + $productModel->url = $product->url; + $productModel->save(); + $priceExists = $productModel->price()->whereRaw("strftime('%Y-%m-%d', created_at) = ?", [date('Y-m-d')])->exists(); + if (!$priceExists) { + $price = new Price(); + $price->price = $product->productPrice; + $price->productStandardPrice = $product->productStandardPrice; + $price->lowestProductPrice30Days = $product->lowestProductPrice30Days; + $productModel->price()->save($price); + } } } \ No newline at end of file