diff --git a/composer.json b/composer.json index 622493a..d91ec84 100644 --- a/composer.json +++ b/composer.json @@ -3,23 +3,20 @@ "description": "Symfony bundle for roach-php/core", "type": "symfony-bundle", "require": { - "php": ">= 8.0", - "roach-php/core": "~1.1.0", - "symfony/config": "^6.0", - "symfony/dependency-injection": "^6.0", - "symfony/http-kernel": "^6.0", - "symfony/console": "^6.0", - "symfony/serializer": "^6.0" + "php": ">= 8.2", + "roach-php/core": "^3.2", + "symfony/config": "^7.0", + "symfony/dependency-injection": "^7.0", + "symfony/http-kernel": "^7.0", + "symfony/console": "^7.0", + "symfony/serializer": "^7.0" }, "require-dev": { "roave/security-advisories": "dev-latest", - "symfony/phpunit-bridge": "^6.0", - "symfony/var-dumper": "^6.0", - "symfony/framework-bundle": "^6.0", - "symfony/maker-bundle": "^1.37", - "vimeo/psalm": "^4.21", - "psalm/plugin-symfony": "^3.1", - "psalm/plugin-phpunit": "^0.16.1" + "symfony/phpunit-bridge": "^7.0", + "symfony/var-dumper": "^7.0", + "symfony/framework-bundle": "^7.0", + "symfony/maker-bundle": "^1.68" }, "license": "MIT", "autoload": { diff --git a/src/Command/RunSpiderCommand.php b/src/Command/RunSpiderCommand.php index fe9e0a6..a7b13c6 100644 --- a/src/Command/RunSpiderCommand.php +++ b/src/Command/RunSpiderCommand.php @@ -28,10 +28,6 @@ final class RunSpiderCommand extends Command { - protected static $defaultName = 'roach:run'; - - protected static $defaultDescription = 'Run the provided spider'; - /** @var array, array> */ private array $spiderNames; @@ -45,6 +41,10 @@ public function __construct(private ServiceLocator $serviceLocator, private Seri protected function configure(): void { + $this + ->setName('roach:run') + ->setDescription('Run the provided spider'); + $spiderArgDescription = "Spider class name\nSupport spiders:\n"; foreach ($this->spiderNames as $className => $aliases) { diff --git a/src/Normalizer/ItemNormalizer.php b/src/Normalizer/ItemNormalizer.php index dfc7502..3d97ff9 100644 --- a/src/Normalizer/ItemNormalizer.php +++ b/src/Normalizer/ItemNormalizer.php @@ -14,17 +14,16 @@ namespace Nelexa\RoachPhpBundle\Normalizer; use RoachPHP\ItemPipeline\ItemInterface; -use Symfony\Component\Serializer\Normalizer\CacheableSupportsMethodInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; -class ItemNormalizer implements NormalizerInterface, CacheableSupportsMethodInterface +class ItemNormalizer implements NormalizerInterface { - public function hasCacheableSupportsMethod(): bool + public function getSupportedTypes(?string $format): array { - return true; + return [ItemInterface::class]; } - public function supportsNormalization(mixed $data, ?string $format = null): bool + public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool { return $data instanceof ItemInterface; } diff --git a/src/Resources/config/services.php b/src/Resources/config/services.php index 0ee9c03..30748d7 100644 --- a/src/Resources/config/services.php +++ b/src/Resources/config/services.php @@ -118,6 +118,23 @@ ; $services->set(\RoachPHP\Downloader\Middleware\RobotsTxtMiddleware::class); $services->set(\RoachPHP\Downloader\Middleware\UserAgentMiddleware::class); + // New in roach-php/core 3.x: drops responses with unallowed HTTP status. + // Configure per spider via the "handleStatus" option. + $services + ->set(\RoachPHP\Downloader\Middleware\HttpErrorMiddleware::class) + ->args([ + service('roach_php.logger'), + ]) + ; + // New in roach-php/core 3.x: assigns proxies to requests. + // Configure per spider via the "proxy" or "loader" options. + $services + ->set(\RoachPHP\Downloader\Middleware\ProxyMiddleware::class) + ->args([ + service('service_container'), + service('roach_php.logger'), + ]) + ; // Extensions $services