PHPackages                             jooservices/crawlerx - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. jooservices/crawlerx

ActiveLibrary[HTTP &amp; Networking](/categories/http)

jooservices/crawlerx
====================

A PHP 8.5+ Laravel package for structured web crawling with typed DTOs

v1.0.0(2d ago)00MITHTMLPHP ^8.5

Since Jun 4Pushed 2d agoCompare

[ Source](https://github.com/jooservices/crawlerx)[ Packagist](https://packagist.org/packages/jooservices/crawlerx)[ RSS](/packages/jooservices-crawlerx/feed)WikiDiscussions develop Synced 2d ago

READMEChangelog (1)Dependencies (17)Versions (3)Used By (0)

JOOservices CrawlerX
====================

[](#jooservices-crawlerx)

JOOservices CrawlerX is a PHP 8.5+ Laravel package for structured web crawling through site adapters and typed DTO results.

Package name: `jooservices/crawlerx`

What it does
------------

[](#what-it-does)

CrawlerX gives Laravel code one small API for crawling supported sites:

- choose a registered site adapter
- pass a `RequestDto` with a URL, crawl type, page, and HTTP options
- receive either a `ListDto` for listing pages or an `ItemDto` for detail pages

All package DTOs extend `JOOservices\Dto\Core\Dto`.

Install
-------

[](#install)

```
composer require jooservices/crawlerx
```

The package auto-registers `JOOservices\CrawlerX\CrawlerXServiceProvider` through Laravel package discovery.

To publish the configuration:

```
php artisan vendor:publish --tag=crawlerx-config
```

Quick example
-------------

[](#quick-example)

```
use JOOservices\CrawlerX\Dto\RequestDto;
use JOOservices\CrawlerX\Enums\CrawlType;
use JOOservices\CrawlerX\Services\CrawlerXService;

$result = app(CrawlerXService::class)
    ->site('onejav')
    ->crawl(new RequestDto(
        url: 'https://onejav.com/2026/05/31',
        type: CrawlType::Listing,
        page: 1,
    ));

$payload = $result->toArray();
```

Detail crawls use the same service with `CrawlType::Detail`:

```
$item = app(CrawlerXService::class)
    ->site('onejav')
    ->crawl(new RequestDto(
        url: 'https://onejav.com/torrent/ymds282',
        type: CrawlType::Detail,
    ));
```

Supported sites
---------------

[](#supported-sites)

The default config registers:

- `onejav` =&gt; `JOOservices\CrawlerX\Adapters\Onejav\OnejavCrawler`
- `141jav` =&gt; `JOOservices\CrawlerX\Adapters\OneFourOneJav\OneFourOneJavCrawler`
- `ffjav` =&gt; `JOOservices\CrawlerX\Adapters\FfJav\FfJavCrawler`

Sites are configured in `config/crawlerx.php` under `sites`.

Result DTOs
-----------

[](#result-dtos)

`RequestDto` accepts:

- `url`: target URL
- `type`: `CrawlType::Listing` or `CrawlType::Detail`
- `page`: page number, default `1`
- `options`: request-specific HTTP options

`ListDto` contains:

- `url`
- `page`
- `items`, a list of `ItemDto`
- `pagination`, a `PaginationDto`

`ItemDto` contains:

- `url`
- `externalId`
- `title`
- `meta`, adapter-specific structured metadata

Development
-----------

[](#development)

```
composer lint
composer lint:all
composer lint:fix
composer test
composer test:coverage
composer check
composer ci
```

Start with:

- [Documentation Hub](./docs/README.md)
- [Installation](./docs/01-getting-started/01-installation.md)
- [Quick Start](./docs/01-getting-started/02-quick-start.md)
- [Configuration](./docs/01-getting-started/03-configuration.md)
- [Agent Instructions](./AGENTS.md)
- [AI Skills Map](./ai/skills/README.md)

License
-------

[](#license)

This package is licensed under the MIT License.

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance100

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/142772948?v=4)[JOOservices Ltd](/maintainers/jooservices)[@jooservices](https://github.com/jooservices)

---

Top Contributors

[![soulevilx](https://avatars.githubusercontent.com/u/2688707?v=4)](https://github.com/soulevilx "soulevilx (19 commits)")

---

Tags

laravelhttp clientcrawlerdtoscraperJOOservices

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/jooservices-crawlerx/health.svg)

```
[![Health](https://phpackages.com/badges/jooservices-crawlerx/health.svg)](https://phpackages.com/packages/jooservices-crawlerx)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M2.9k](/packages/craftcms-cms)[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k51.0M7.4k](/packages/larastan-larastan)[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[illuminate/database

The Illuminate Database package.

3.0k54.1M11.0k](/packages/illuminate-database)[spatie/crawler

Crawl all internal links found on a website

2.8k17.7M58](/packages/spatie-crawler)[laravel/ai

The official AI SDK for Laravel.

9782.1M153](/packages/laravel-ai)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
