├── .gitignore ├── README.md ├── composer.json ├── composer.lock ├── drivers ├── chromedriver └── geckodriver ├── goutte_css_requests.php ├── goutte_requests.php ├── guzzle_requests.php ├── http_requests.php ├── panther_requests.php ├── php_scraper.iml └── simplehtmldom_requests.php /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | .env 3 | /.idea 4 | .history 5 | .DS_Store 6 | 7 | .tmp 8 | *.tmp 9 | .vscode 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PHP Web Scraping 2 | The project demostrates the various open source PHP libraries you may use to scrape a website. 3 | 4 | ### Installation 5 | 6 | Clone into your machine, then inside the project directory run 7 | 8 | `composer install` 9 | 10 | You can execute the files individually on your terminal as explained in this PHP Web Scraping tutorial 11 | 12 | Enjoy! -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "php": ">=7.4", 4 | "guzzlehttp/guzzle": "^7.3", 5 | "fabpot/goutte": "^4.0", 6 | "masterminds/html5": "^2.7", 7 | "simplehtmldom/simplehtmldom": "^2.0@RC", 8 | "symfony/panther": "^1.0" 9 | }, 10 | 11 | "minimum-stability": "dev", 12 | "prefer-stable": true, 13 | "require-dev": { 14 | "dbrekelmans/bdi": "^0.3.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "026331efe006d79280fd9d98d8dbe2a9", 8 | "packages": [ 9 | { 10 | "name": "fabpot/goutte", 11 | "version": "v4.0.1", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/FriendsOfPHP/Goutte.git", 15 | "reference": "293e754f0be2f1e85f9b31262cb811de39874e03" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/293e754f0be2f1e85f9b31262cb811de39874e03", 20 | "reference": "293e754f0be2f1e85f9b31262cb811de39874e03", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=7.1.3", 25 | "symfony/browser-kit": "^4.4|^5.0", 26 | "symfony/css-selector": "^4.4|^5.0", 27 | "symfony/dom-crawler": "^4.4|^5.0", 28 | "symfony/http-client": "^4.4|^5.0", 29 | "symfony/mime": "^4.4|^5.0" 30 | }, 31 | "require-dev": { 32 | "symfony/phpunit-bridge": "^5.0" 33 | }, 34 | "type": "application", 35 | "autoload": { 36 | "psr-4": { 37 | "Goutte\\": "Goutte" 38 | }, 39 | "exclude-from-classmap": [ 40 | "Goutte/Tests" 41 | ] 42 | }, 43 | "notification-url": "https://packagist.org/downloads/", 44 | "license": [ 45 | "MIT" 46 | ], 47 | "authors": [ 48 | { 49 | "name": "Fabien Potencier", 50 | "email": "fabien@symfony.com" 51 | } 52 | ], 53 | "description": "A simple PHP Web Scraper", 54 | "homepage": "https://github.com/FriendsOfPHP/Goutte", 55 | "keywords": [ 56 | "scraper" 57 | ], 58 | "support": { 59 | "issues": "https://github.com/FriendsOfPHP/Goutte/issues", 60 | "source": "https://github.com/FriendsOfPHP/Goutte/tree/v4.0.1" 61 | }, 62 | "time": "2020-10-14T06:49:09+00:00" 63 | }, 64 | { 65 | "name": "guzzlehttp/guzzle", 66 | "version": "7.3.0", 67 | "source": { 68 | "type": "git", 69 | "url": "https://github.com/guzzle/guzzle.git", 70 | "reference": "7008573787b430c1c1f650e3722d9bba59967628" 71 | }, 72 | "dist": { 73 | "type": "zip", 74 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", 75 | "reference": "7008573787b430c1c1f650e3722d9bba59967628", 76 | "shasum": "" 77 | }, 78 | "require": { 79 | "ext-json": "*", 80 | "guzzlehttp/promises": "^1.4", 81 | "guzzlehttp/psr7": "^1.7 || ^2.0", 82 | "php": "^7.2.5 || ^8.0", 83 | "psr/http-client": "^1.0" 84 | }, 85 | "provide": { 86 | "psr/http-client-implementation": "1.0" 87 | }, 88 | "require-dev": { 89 | "bamarni/composer-bin-plugin": "^1.4.1", 90 | "ext-curl": "*", 91 | "php-http/client-integration-tests": "^3.0", 92 | "phpunit/phpunit": "^8.5.5 || ^9.3.5", 93 | "psr/log": "^1.1" 94 | }, 95 | "suggest": { 96 | "ext-curl": "Required for CURL handler support", 97 | "ext-intl": "Required for Internationalized Domain Name (IDN) support", 98 | "psr/log": "Required for using the Log middleware" 99 | }, 100 | "type": "library", 101 | "extra": { 102 | "branch-alias": { 103 | "dev-master": "7.3-dev" 104 | } 105 | }, 106 | "autoload": { 107 | "psr-4": { 108 | "GuzzleHttp\\": "src/" 109 | }, 110 | "files": [ 111 | "src/functions_include.php" 112 | ] 113 | }, 114 | "notification-url": "https://packagist.org/downloads/", 115 | "license": [ 116 | "MIT" 117 | ], 118 | "authors": [ 119 | { 120 | "name": "Michael Dowling", 121 | "email": "mtdowling@gmail.com", 122 | "homepage": "https://github.com/mtdowling" 123 | }, 124 | { 125 | "name": "Márk Sági-Kazár", 126 | "email": "mark.sagikazar@gmail.com", 127 | "homepage": "https://sagikazarmark.hu" 128 | } 129 | ], 130 | "description": "Guzzle is a PHP HTTP client library", 131 | "homepage": "http://guzzlephp.org/", 132 | "keywords": [ 133 | "client", 134 | "curl", 135 | "framework", 136 | "http", 137 | "http client", 138 | "psr-18", 139 | "psr-7", 140 | "rest", 141 | "web service" 142 | ], 143 | "support": { 144 | "issues": "https://github.com/guzzle/guzzle/issues", 145 | "source": "https://github.com/guzzle/guzzle/tree/7.3.0" 146 | }, 147 | "funding": [ 148 | { 149 | "url": "https://github.com/GrahamCampbell", 150 | "type": "github" 151 | }, 152 | { 153 | "url": "https://github.com/Nyholm", 154 | "type": "github" 155 | }, 156 | { 157 | "url": "https://github.com/alexeyshockov", 158 | "type": "github" 159 | }, 160 | { 161 | "url": "https://github.com/gmponos", 162 | "type": "github" 163 | } 164 | ], 165 | "time": "2021-03-23T11:33:13+00:00" 166 | }, 167 | { 168 | "name": "guzzlehttp/promises", 169 | "version": "1.4.1", 170 | "source": { 171 | "type": "git", 172 | "url": "https://github.com/guzzle/promises.git", 173 | "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" 174 | }, 175 | "dist": { 176 | "type": "zip", 177 | "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", 178 | "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", 179 | "shasum": "" 180 | }, 181 | "require": { 182 | "php": ">=5.5" 183 | }, 184 | "require-dev": { 185 | "symfony/phpunit-bridge": "^4.4 || ^5.1" 186 | }, 187 | "type": "library", 188 | "extra": { 189 | "branch-alias": { 190 | "dev-master": "1.4-dev" 191 | } 192 | }, 193 | "autoload": { 194 | "psr-4": { 195 | "GuzzleHttp\\Promise\\": "src/" 196 | }, 197 | "files": [ 198 | "src/functions_include.php" 199 | ] 200 | }, 201 | "notification-url": "https://packagist.org/downloads/", 202 | "license": [ 203 | "MIT" 204 | ], 205 | "authors": [ 206 | { 207 | "name": "Michael Dowling", 208 | "email": "mtdowling@gmail.com", 209 | "homepage": "https://github.com/mtdowling" 210 | } 211 | ], 212 | "description": "Guzzle promises library", 213 | "keywords": [ 214 | "promise" 215 | ], 216 | "support": { 217 | "issues": "https://github.com/guzzle/promises/issues", 218 | "source": "https://github.com/guzzle/promises/tree/1.4.1" 219 | }, 220 | "time": "2021-03-07T09:25:29+00:00" 221 | }, 222 | { 223 | "name": "guzzlehttp/psr7", 224 | "version": "1.8.2", 225 | "source": { 226 | "type": "git", 227 | "url": "https://github.com/guzzle/psr7.git", 228 | "reference": "dc960a912984efb74d0a90222870c72c87f10c91" 229 | }, 230 | "dist": { 231 | "type": "zip", 232 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", 233 | "reference": "dc960a912984efb74d0a90222870c72c87f10c91", 234 | "shasum": "" 235 | }, 236 | "require": { 237 | "php": ">=5.4.0", 238 | "psr/http-message": "~1.0", 239 | "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" 240 | }, 241 | "provide": { 242 | "psr/http-message-implementation": "1.0" 243 | }, 244 | "require-dev": { 245 | "ext-zlib": "*", 246 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" 247 | }, 248 | "suggest": { 249 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 250 | }, 251 | "type": "library", 252 | "extra": { 253 | "branch-alias": { 254 | "dev-master": "1.7-dev" 255 | } 256 | }, 257 | "autoload": { 258 | "psr-4": { 259 | "GuzzleHttp\\Psr7\\": "src/" 260 | }, 261 | "files": [ 262 | "src/functions_include.php" 263 | ] 264 | }, 265 | "notification-url": "https://packagist.org/downloads/", 266 | "license": [ 267 | "MIT" 268 | ], 269 | "authors": [ 270 | { 271 | "name": "Michael Dowling", 272 | "email": "mtdowling@gmail.com", 273 | "homepage": "https://github.com/mtdowling" 274 | }, 275 | { 276 | "name": "Tobias Schultze", 277 | "homepage": "https://github.com/Tobion" 278 | } 279 | ], 280 | "description": "PSR-7 message implementation that also provides common utility methods", 281 | "keywords": [ 282 | "http", 283 | "message", 284 | "psr-7", 285 | "request", 286 | "response", 287 | "stream", 288 | "uri", 289 | "url" 290 | ], 291 | "support": { 292 | "issues": "https://github.com/guzzle/psr7/issues", 293 | "source": "https://github.com/guzzle/psr7/tree/1.8.2" 294 | }, 295 | "time": "2021-04-26T09:17:50+00:00" 296 | }, 297 | { 298 | "name": "masterminds/html5", 299 | "version": "2.7.4", 300 | "source": { 301 | "type": "git", 302 | "url": "https://github.com/Masterminds/html5-php.git", 303 | "reference": "9227822783c75406cfe400984b2f095cdf03d417" 304 | }, 305 | "dist": { 306 | "type": "zip", 307 | "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/9227822783c75406cfe400984b2f095cdf03d417", 308 | "reference": "9227822783c75406cfe400984b2f095cdf03d417", 309 | "shasum": "" 310 | }, 311 | "require": { 312 | "ext-ctype": "*", 313 | "ext-dom": "*", 314 | "ext-libxml": "*", 315 | "php": ">=5.3.0" 316 | }, 317 | "require-dev": { 318 | "phpunit/phpunit": "^4.8.35" 319 | }, 320 | "type": "library", 321 | "extra": { 322 | "branch-alias": { 323 | "dev-master": "2.7-dev" 324 | } 325 | }, 326 | "autoload": { 327 | "psr-4": { 328 | "Masterminds\\": "src" 329 | } 330 | }, 331 | "notification-url": "https://packagist.org/downloads/", 332 | "license": [ 333 | "MIT" 334 | ], 335 | "authors": [ 336 | { 337 | "name": "Matt Butcher", 338 | "email": "technosophos@gmail.com" 339 | }, 340 | { 341 | "name": "Matt Farina", 342 | "email": "matt@mattfarina.com" 343 | }, 344 | { 345 | "name": "Asmir Mustafic", 346 | "email": "goetas@gmail.com" 347 | } 348 | ], 349 | "description": "An HTML5 parser and serializer.", 350 | "homepage": "http://masterminds.github.io/html5-php", 351 | "keywords": [ 352 | "HTML5", 353 | "dom", 354 | "html", 355 | "parser", 356 | "querypath", 357 | "serializer", 358 | "xml" 359 | ], 360 | "support": { 361 | "issues": "https://github.com/Masterminds/html5-php/issues", 362 | "source": "https://github.com/Masterminds/html5-php/tree/2.7.4" 363 | }, 364 | "time": "2020-10-01T13:52:52+00:00" 365 | }, 366 | { 367 | "name": "php-webdriver/webdriver", 368 | "version": "1.11.1", 369 | "source": { 370 | "type": "git", 371 | "url": "https://github.com/php-webdriver/php-webdriver.git", 372 | "reference": "da16e39968f8dd5cfb7d07eef91dc2b731c69880" 373 | }, 374 | "dist": { 375 | "type": "zip", 376 | "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/da16e39968f8dd5cfb7d07eef91dc2b731c69880", 377 | "reference": "da16e39968f8dd5cfb7d07eef91dc2b731c69880", 378 | "shasum": "" 379 | }, 380 | "require": { 381 | "ext-curl": "*", 382 | "ext-json": "*", 383 | "ext-zip": "*", 384 | "php": "^5.6 || ~7.0 || ^8.0", 385 | "symfony/polyfill-mbstring": "^1.12", 386 | "symfony/process": "^2.8 || ^3.1 || ^4.0 || ^5.0" 387 | }, 388 | "replace": { 389 | "facebook/webdriver": "*" 390 | }, 391 | "require-dev": { 392 | "friendsofphp/php-cs-fixer": "^2.0", 393 | "ondram/ci-detector": "^2.1 || ^3.5 || ^4.0", 394 | "php-coveralls/php-coveralls": "^2.4", 395 | "php-mock/php-mock-phpunit": "^1.1 || ^2.0", 396 | "php-parallel-lint/php-parallel-lint": "^1.2", 397 | "phpunit/phpunit": "^5.7 || ^7 || ^8 || ^9", 398 | "squizlabs/php_codesniffer": "^3.5", 399 | "symfony/var-dumper": "^3.3 || ^4.0 || ^5.0" 400 | }, 401 | "suggest": { 402 | "ext-SimpleXML": "For Firefox profile creation" 403 | }, 404 | "type": "library", 405 | "autoload": { 406 | "psr-4": { 407 | "Facebook\\WebDriver\\": "lib/" 408 | }, 409 | "files": [ 410 | "lib/Exception/TimeoutException.php" 411 | ] 412 | }, 413 | "notification-url": "https://packagist.org/downloads/", 414 | "license": [ 415 | "MIT" 416 | ], 417 | "description": "A PHP client for Selenium WebDriver. Previously facebook/webdriver.", 418 | "homepage": "https://github.com/php-webdriver/php-webdriver", 419 | "keywords": [ 420 | "Chromedriver", 421 | "geckodriver", 422 | "php", 423 | "selenium", 424 | "webdriver" 425 | ], 426 | "support": { 427 | "issues": "https://github.com/php-webdriver/php-webdriver/issues", 428 | "source": "https://github.com/php-webdriver/php-webdriver/tree/1.11.1" 429 | }, 430 | "time": "2021-05-21T15:12:49+00:00" 431 | }, 432 | { 433 | "name": "psr/container", 434 | "version": "1.1.1", 435 | "source": { 436 | "type": "git", 437 | "url": "https://github.com/php-fig/container.git", 438 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" 439 | }, 440 | "dist": { 441 | "type": "zip", 442 | "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", 443 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", 444 | "shasum": "" 445 | }, 446 | "require": { 447 | "php": ">=7.2.0" 448 | }, 449 | "type": "library", 450 | "autoload": { 451 | "psr-4": { 452 | "Psr\\Container\\": "src/" 453 | } 454 | }, 455 | "notification-url": "https://packagist.org/downloads/", 456 | "license": [ 457 | "MIT" 458 | ], 459 | "authors": [ 460 | { 461 | "name": "PHP-FIG", 462 | "homepage": "https://www.php-fig.org/" 463 | } 464 | ], 465 | "description": "Common Container Interface (PHP FIG PSR-11)", 466 | "homepage": "https://github.com/php-fig/container", 467 | "keywords": [ 468 | "PSR-11", 469 | "container", 470 | "container-interface", 471 | "container-interop", 472 | "psr" 473 | ], 474 | "support": { 475 | "issues": "https://github.com/php-fig/container/issues", 476 | "source": "https://github.com/php-fig/container/tree/1.1.1" 477 | }, 478 | "time": "2021-03-05T17:36:06+00:00" 479 | }, 480 | { 481 | "name": "psr/http-client", 482 | "version": "1.0.1", 483 | "source": { 484 | "type": "git", 485 | "url": "https://github.com/php-fig/http-client.git", 486 | "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" 487 | }, 488 | "dist": { 489 | "type": "zip", 490 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", 491 | "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", 492 | "shasum": "" 493 | }, 494 | "require": { 495 | "php": "^7.0 || ^8.0", 496 | "psr/http-message": "^1.0" 497 | }, 498 | "type": "library", 499 | "extra": { 500 | "branch-alias": { 501 | "dev-master": "1.0.x-dev" 502 | } 503 | }, 504 | "autoload": { 505 | "psr-4": { 506 | "Psr\\Http\\Client\\": "src/" 507 | } 508 | }, 509 | "notification-url": "https://packagist.org/downloads/", 510 | "license": [ 511 | "MIT" 512 | ], 513 | "authors": [ 514 | { 515 | "name": "PHP-FIG", 516 | "homepage": "http://www.php-fig.org/" 517 | } 518 | ], 519 | "description": "Common interface for HTTP clients", 520 | "homepage": "https://github.com/php-fig/http-client", 521 | "keywords": [ 522 | "http", 523 | "http-client", 524 | "psr", 525 | "psr-18" 526 | ], 527 | "support": { 528 | "source": "https://github.com/php-fig/http-client/tree/master" 529 | }, 530 | "time": "2020-06-29T06:28:15+00:00" 531 | }, 532 | { 533 | "name": "psr/http-message", 534 | "version": "1.0.1", 535 | "source": { 536 | "type": "git", 537 | "url": "https://github.com/php-fig/http-message.git", 538 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 539 | }, 540 | "dist": { 541 | "type": "zip", 542 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 543 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 544 | "shasum": "" 545 | }, 546 | "require": { 547 | "php": ">=5.3.0" 548 | }, 549 | "type": "library", 550 | "extra": { 551 | "branch-alias": { 552 | "dev-master": "1.0.x-dev" 553 | } 554 | }, 555 | "autoload": { 556 | "psr-4": { 557 | "Psr\\Http\\Message\\": "src/" 558 | } 559 | }, 560 | "notification-url": "https://packagist.org/downloads/", 561 | "license": [ 562 | "MIT" 563 | ], 564 | "authors": [ 565 | { 566 | "name": "PHP-FIG", 567 | "homepage": "http://www.php-fig.org/" 568 | } 569 | ], 570 | "description": "Common interface for HTTP messages", 571 | "homepage": "https://github.com/php-fig/http-message", 572 | "keywords": [ 573 | "http", 574 | "http-message", 575 | "psr", 576 | "psr-7", 577 | "request", 578 | "response" 579 | ], 580 | "support": { 581 | "source": "https://github.com/php-fig/http-message/tree/master" 582 | }, 583 | "time": "2016-08-06T14:39:51+00:00" 584 | }, 585 | { 586 | "name": "psr/log", 587 | "version": "1.1.4", 588 | "source": { 589 | "type": "git", 590 | "url": "https://github.com/php-fig/log.git", 591 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11" 592 | }, 593 | "dist": { 594 | "type": "zip", 595 | "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", 596 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11", 597 | "shasum": "" 598 | }, 599 | "require": { 600 | "php": ">=5.3.0" 601 | }, 602 | "type": "library", 603 | "extra": { 604 | "branch-alias": { 605 | "dev-master": "1.1.x-dev" 606 | } 607 | }, 608 | "autoload": { 609 | "psr-4": { 610 | "Psr\\Log\\": "Psr/Log/" 611 | } 612 | }, 613 | "notification-url": "https://packagist.org/downloads/", 614 | "license": [ 615 | "MIT" 616 | ], 617 | "authors": [ 618 | { 619 | "name": "PHP-FIG", 620 | "homepage": "https://www.php-fig.org/" 621 | } 622 | ], 623 | "description": "Common interface for logging libraries", 624 | "homepage": "https://github.com/php-fig/log", 625 | "keywords": [ 626 | "log", 627 | "psr", 628 | "psr-3" 629 | ], 630 | "support": { 631 | "source": "https://github.com/php-fig/log/tree/1.1.4" 632 | }, 633 | "time": "2021-05-03T11:20:27+00:00" 634 | }, 635 | { 636 | "name": "ralouphie/getallheaders", 637 | "version": "3.0.3", 638 | "source": { 639 | "type": "git", 640 | "url": "https://github.com/ralouphie/getallheaders.git", 641 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 642 | }, 643 | "dist": { 644 | "type": "zip", 645 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 646 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 647 | "shasum": "" 648 | }, 649 | "require": { 650 | "php": ">=5.6" 651 | }, 652 | "require-dev": { 653 | "php-coveralls/php-coveralls": "^2.1", 654 | "phpunit/phpunit": "^5 || ^6.5" 655 | }, 656 | "type": "library", 657 | "autoload": { 658 | "files": [ 659 | "src/getallheaders.php" 660 | ] 661 | }, 662 | "notification-url": "https://packagist.org/downloads/", 663 | "license": [ 664 | "MIT" 665 | ], 666 | "authors": [ 667 | { 668 | "name": "Ralph Khattar", 669 | "email": "ralph.khattar@gmail.com" 670 | } 671 | ], 672 | "description": "A polyfill for getallheaders.", 673 | "support": { 674 | "issues": "https://github.com/ralouphie/getallheaders/issues", 675 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 676 | }, 677 | "time": "2019-03-08T08:55:37+00:00" 678 | }, 679 | { 680 | "name": "simplehtmldom/simplehtmldom", 681 | "version": "2.0-RC2", 682 | "source": { 683 | "type": "git", 684 | "url": "https://github.com/simplehtmldom/simplehtmldom.git", 685 | "reference": "3c87726400e59d8e1bc4709cfe82353abeb0f4d1" 686 | }, 687 | "dist": { 688 | "type": "zip", 689 | "url": "https://api.github.com/repos/simplehtmldom/simplehtmldom/zipball/3c87726400e59d8e1bc4709cfe82353abeb0f4d1", 690 | "reference": "3c87726400e59d8e1bc4709cfe82353abeb0f4d1", 691 | "shasum": "" 692 | }, 693 | "require": { 694 | "ext-iconv": "*", 695 | "php": ">=5.6" 696 | }, 697 | "require-dev": { 698 | "phpunit/phpunit": "^6 || ^7" 699 | }, 700 | "suggest": { 701 | "ext-curl": "Needed to support cURL downloads in class HtmlWeb", 702 | "ext-mbstring": "Allows better decoding for multi-byte documents", 703 | "ext-openssl": "Allows loading HTTPS pages when using cURL" 704 | }, 705 | "type": "library", 706 | "autoload": { 707 | "classmap": [ 708 | "./" 709 | ], 710 | "exclude-from-classmap": [ 711 | "/example/", 712 | "/manual/", 713 | "/testcase/", 714 | "/tests/", 715 | "simple_html_dom.php" 716 | ] 717 | }, 718 | "notification-url": "https://packagist.org/downloads/", 719 | "license": [ 720 | "MIT" 721 | ], 722 | "authors": [ 723 | { 724 | "name": "S.C. Chen", 725 | "role": "Developer" 726 | }, 727 | { 728 | "name": "John Schlick", 729 | "role": "Developer" 730 | }, 731 | { 732 | "name": "logmanoriginal", 733 | "role": "Developer" 734 | } 735 | ], 736 | "description": "A fast, simple and reliable HTML document parser for PHP.", 737 | "homepage": "https://simplehtmldom.sourceforge.io/", 738 | "keywords": [ 739 | "Simple", 740 | "dom", 741 | "html", 742 | "parser", 743 | "php", 744 | "simplehtmldom" 745 | ], 746 | "support": { 747 | "issues": "https://sourceforge.net/p/simplehtmldom/bugs/", 748 | "rss": "https://sourceforge.net/p/simplehtmldom/news/feed.rss", 749 | "source": "https://sourceforge.net/p/simplehtmldom/repository/", 750 | "wiki": "https://simplehtmldom.sourceforge.io/docs/" 751 | }, 752 | "time": "2019-11-09T15:42:50+00:00" 753 | }, 754 | { 755 | "name": "symfony/browser-kit", 756 | "version": "v5.3.0", 757 | "source": { 758 | "type": "git", 759 | "url": "https://github.com/symfony/browser-kit.git", 760 | "reference": "379984e25eee9811b0a25a2105e1a2b3b8d9b734" 761 | }, 762 | "dist": { 763 | "type": "zip", 764 | "url": "https://api.github.com/repos/symfony/browser-kit/zipball/379984e25eee9811b0a25a2105e1a2b3b8d9b734", 765 | "reference": "379984e25eee9811b0a25a2105e1a2b3b8d9b734", 766 | "shasum": "" 767 | }, 768 | "require": { 769 | "php": ">=7.2.5", 770 | "symfony/dom-crawler": "^4.4|^5.0" 771 | }, 772 | "require-dev": { 773 | "symfony/css-selector": "^4.4|^5.0", 774 | "symfony/http-client": "^4.4|^5.0", 775 | "symfony/mime": "^4.4|^5.0", 776 | "symfony/process": "^4.4|^5.0" 777 | }, 778 | "suggest": { 779 | "symfony/process": "" 780 | }, 781 | "type": "library", 782 | "autoload": { 783 | "psr-4": { 784 | "Symfony\\Component\\BrowserKit\\": "" 785 | }, 786 | "exclude-from-classmap": [ 787 | "/Tests/" 788 | ] 789 | }, 790 | "notification-url": "https://packagist.org/downloads/", 791 | "license": [ 792 | "MIT" 793 | ], 794 | "authors": [ 795 | { 796 | "name": "Fabien Potencier", 797 | "email": "fabien@symfony.com" 798 | }, 799 | { 800 | "name": "Symfony Community", 801 | "homepage": "https://symfony.com/contributors" 802 | } 803 | ], 804 | "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", 805 | "homepage": "https://symfony.com", 806 | "support": { 807 | "source": "https://github.com/symfony/browser-kit/tree/v5.3.0" 808 | }, 809 | "funding": [ 810 | { 811 | "url": "https://symfony.com/sponsor", 812 | "type": "custom" 813 | }, 814 | { 815 | "url": "https://github.com/fabpot", 816 | "type": "github" 817 | }, 818 | { 819 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 820 | "type": "tidelift" 821 | } 822 | ], 823 | "time": "2021-05-26T17:43:10+00:00" 824 | }, 825 | { 826 | "name": "symfony/css-selector", 827 | "version": "v5.3.0", 828 | "source": { 829 | "type": "git", 830 | "url": "https://github.com/symfony/css-selector.git", 831 | "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814" 832 | }, 833 | "dist": { 834 | "type": "zip", 835 | "url": "https://api.github.com/repos/symfony/css-selector/zipball/fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", 836 | "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", 837 | "shasum": "" 838 | }, 839 | "require": { 840 | "php": ">=7.2.5" 841 | }, 842 | "type": "library", 843 | "autoload": { 844 | "psr-4": { 845 | "Symfony\\Component\\CssSelector\\": "" 846 | }, 847 | "exclude-from-classmap": [ 848 | "/Tests/" 849 | ] 850 | }, 851 | "notification-url": "https://packagist.org/downloads/", 852 | "license": [ 853 | "MIT" 854 | ], 855 | "authors": [ 856 | { 857 | "name": "Fabien Potencier", 858 | "email": "fabien@symfony.com" 859 | }, 860 | { 861 | "name": "Jean-François Simon", 862 | "email": "jeanfrancois.simon@sensiolabs.com" 863 | }, 864 | { 865 | "name": "Symfony Community", 866 | "homepage": "https://symfony.com/contributors" 867 | } 868 | ], 869 | "description": "Converts CSS selectors to XPath expressions", 870 | "homepage": "https://symfony.com", 871 | "support": { 872 | "source": "https://github.com/symfony/css-selector/tree/v5.3.0" 873 | }, 874 | "funding": [ 875 | { 876 | "url": "https://symfony.com/sponsor", 877 | "type": "custom" 878 | }, 879 | { 880 | "url": "https://github.com/fabpot", 881 | "type": "github" 882 | }, 883 | { 884 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 885 | "type": "tidelift" 886 | } 887 | ], 888 | "time": "2021-05-26T17:40:38+00:00" 889 | }, 890 | { 891 | "name": "symfony/deprecation-contracts", 892 | "version": "v2.4.0", 893 | "source": { 894 | "type": "git", 895 | "url": "https://github.com/symfony/deprecation-contracts.git", 896 | "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" 897 | }, 898 | "dist": { 899 | "type": "zip", 900 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", 901 | "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", 902 | "shasum": "" 903 | }, 904 | "require": { 905 | "php": ">=7.1" 906 | }, 907 | "type": "library", 908 | "extra": { 909 | "branch-alias": { 910 | "dev-main": "2.4-dev" 911 | }, 912 | "thanks": { 913 | "name": "symfony/contracts", 914 | "url": "https://github.com/symfony/contracts" 915 | } 916 | }, 917 | "autoload": { 918 | "files": [ 919 | "function.php" 920 | ] 921 | }, 922 | "notification-url": "https://packagist.org/downloads/", 923 | "license": [ 924 | "MIT" 925 | ], 926 | "authors": [ 927 | { 928 | "name": "Nicolas Grekas", 929 | "email": "p@tchwork.com" 930 | }, 931 | { 932 | "name": "Symfony Community", 933 | "homepage": "https://symfony.com/contributors" 934 | } 935 | ], 936 | "description": "A generic function and convention to trigger deprecation notices", 937 | "homepage": "https://symfony.com", 938 | "support": { 939 | "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" 940 | }, 941 | "funding": [ 942 | { 943 | "url": "https://symfony.com/sponsor", 944 | "type": "custom" 945 | }, 946 | { 947 | "url": "https://github.com/fabpot", 948 | "type": "github" 949 | }, 950 | { 951 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 952 | "type": "tidelift" 953 | } 954 | ], 955 | "time": "2021-03-23T23:28:01+00:00" 956 | }, 957 | { 958 | "name": "symfony/dom-crawler", 959 | "version": "v5.3.0", 960 | "source": { 961 | "type": "git", 962 | "url": "https://github.com/symfony/dom-crawler.git", 963 | "reference": "55fff62b19f413f897a752488ade1bc9c8a19cdd" 964 | }, 965 | "dist": { 966 | "type": "zip", 967 | "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/55fff62b19f413f897a752488ade1bc9c8a19cdd", 968 | "reference": "55fff62b19f413f897a752488ade1bc9c8a19cdd", 969 | "shasum": "" 970 | }, 971 | "require": { 972 | "php": ">=7.2.5", 973 | "symfony/deprecation-contracts": "^2.1", 974 | "symfony/polyfill-ctype": "~1.8", 975 | "symfony/polyfill-mbstring": "~1.0", 976 | "symfony/polyfill-php80": "^1.15" 977 | }, 978 | "conflict": { 979 | "masterminds/html5": "<2.6" 980 | }, 981 | "require-dev": { 982 | "masterminds/html5": "^2.6", 983 | "symfony/css-selector": "^4.4|^5.0" 984 | }, 985 | "suggest": { 986 | "symfony/css-selector": "" 987 | }, 988 | "type": "library", 989 | "autoload": { 990 | "psr-4": { 991 | "Symfony\\Component\\DomCrawler\\": "" 992 | }, 993 | "exclude-from-classmap": [ 994 | "/Tests/" 995 | ] 996 | }, 997 | "notification-url": "https://packagist.org/downloads/", 998 | "license": [ 999 | "MIT" 1000 | ], 1001 | "authors": [ 1002 | { 1003 | "name": "Fabien Potencier", 1004 | "email": "fabien@symfony.com" 1005 | }, 1006 | { 1007 | "name": "Symfony Community", 1008 | "homepage": "https://symfony.com/contributors" 1009 | } 1010 | ], 1011 | "description": "Eases DOM navigation for HTML and XML documents", 1012 | "homepage": "https://symfony.com", 1013 | "support": { 1014 | "source": "https://github.com/symfony/dom-crawler/tree/v5.3.0" 1015 | }, 1016 | "funding": [ 1017 | { 1018 | "url": "https://symfony.com/sponsor", 1019 | "type": "custom" 1020 | }, 1021 | { 1022 | "url": "https://github.com/fabpot", 1023 | "type": "github" 1024 | }, 1025 | { 1026 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1027 | "type": "tidelift" 1028 | } 1029 | ], 1030 | "time": "2021-05-26T17:43:10+00:00" 1031 | }, 1032 | { 1033 | "name": "symfony/http-client", 1034 | "version": "v5.3.2", 1035 | "source": { 1036 | "type": "git", 1037 | "url": "https://github.com/symfony/http-client.git", 1038 | "reference": "d2464f48482223c7c6826cd8c6ed7929d1ce6093" 1039 | }, 1040 | "dist": { 1041 | "type": "zip", 1042 | "url": "https://api.github.com/repos/symfony/http-client/zipball/d2464f48482223c7c6826cd8c6ed7929d1ce6093", 1043 | "reference": "d2464f48482223c7c6826cd8c6ed7929d1ce6093", 1044 | "shasum": "" 1045 | }, 1046 | "require": { 1047 | "php": ">=7.2.5", 1048 | "psr/log": "^1.0", 1049 | "symfony/deprecation-contracts": "^2.1", 1050 | "symfony/http-client-contracts": "^2.4", 1051 | "symfony/polyfill-php73": "^1.11", 1052 | "symfony/polyfill-php80": "^1.15", 1053 | "symfony/service-contracts": "^1.0|^2" 1054 | }, 1055 | "provide": { 1056 | "php-http/async-client-implementation": "*", 1057 | "php-http/client-implementation": "*", 1058 | "psr/http-client-implementation": "1.0", 1059 | "symfony/http-client-implementation": "2.4" 1060 | }, 1061 | "require-dev": { 1062 | "amphp/amp": "^2.5", 1063 | "amphp/http-client": "^4.2.1", 1064 | "amphp/http-tunnel": "^1.0", 1065 | "amphp/socket": "^1.1", 1066 | "guzzlehttp/promises": "^1.4", 1067 | "nyholm/psr7": "^1.0", 1068 | "php-http/httplug": "^1.0|^2.0", 1069 | "psr/http-client": "^1.0", 1070 | "symfony/dependency-injection": "^4.4|^5.0", 1071 | "symfony/http-kernel": "^4.4.13|^5.1.5", 1072 | "symfony/process": "^4.4|^5.0", 1073 | "symfony/stopwatch": "^4.4|^5.0" 1074 | }, 1075 | "type": "library", 1076 | "autoload": { 1077 | "psr-4": { 1078 | "Symfony\\Component\\HttpClient\\": "" 1079 | }, 1080 | "exclude-from-classmap": [ 1081 | "/Tests/" 1082 | ] 1083 | }, 1084 | "notification-url": "https://packagist.org/downloads/", 1085 | "license": [ 1086 | "MIT" 1087 | ], 1088 | "authors": [ 1089 | { 1090 | "name": "Nicolas Grekas", 1091 | "email": "p@tchwork.com" 1092 | }, 1093 | { 1094 | "name": "Symfony Community", 1095 | "homepage": "https://symfony.com/contributors" 1096 | } 1097 | ], 1098 | "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", 1099 | "homepage": "https://symfony.com", 1100 | "support": { 1101 | "source": "https://github.com/symfony/http-client/tree/v5.3.2" 1102 | }, 1103 | "funding": [ 1104 | { 1105 | "url": "https://symfony.com/sponsor", 1106 | "type": "custom" 1107 | }, 1108 | { 1109 | "url": "https://github.com/fabpot", 1110 | "type": "github" 1111 | }, 1112 | { 1113 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1114 | "type": "tidelift" 1115 | } 1116 | ], 1117 | "time": "2021-06-12T10:15:17+00:00" 1118 | }, 1119 | { 1120 | "name": "symfony/http-client-contracts", 1121 | "version": "v2.4.0", 1122 | "source": { 1123 | "type": "git", 1124 | "url": "https://github.com/symfony/http-client-contracts.git", 1125 | "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" 1126 | }, 1127 | "dist": { 1128 | "type": "zip", 1129 | "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", 1130 | "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", 1131 | "shasum": "" 1132 | }, 1133 | "require": { 1134 | "php": ">=7.2.5" 1135 | }, 1136 | "suggest": { 1137 | "symfony/http-client-implementation": "" 1138 | }, 1139 | "type": "library", 1140 | "extra": { 1141 | "branch-alias": { 1142 | "dev-main": "2.4-dev" 1143 | }, 1144 | "thanks": { 1145 | "name": "symfony/contracts", 1146 | "url": "https://github.com/symfony/contracts" 1147 | } 1148 | }, 1149 | "autoload": { 1150 | "psr-4": { 1151 | "Symfony\\Contracts\\HttpClient\\": "" 1152 | } 1153 | }, 1154 | "notification-url": "https://packagist.org/downloads/", 1155 | "license": [ 1156 | "MIT" 1157 | ], 1158 | "authors": [ 1159 | { 1160 | "name": "Nicolas Grekas", 1161 | "email": "p@tchwork.com" 1162 | }, 1163 | { 1164 | "name": "Symfony Community", 1165 | "homepage": "https://symfony.com/contributors" 1166 | } 1167 | ], 1168 | "description": "Generic abstractions related to HTTP clients", 1169 | "homepage": "https://symfony.com", 1170 | "keywords": [ 1171 | "abstractions", 1172 | "contracts", 1173 | "decoupling", 1174 | "interfaces", 1175 | "interoperability", 1176 | "standards" 1177 | ], 1178 | "support": { 1179 | "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0" 1180 | }, 1181 | "funding": [ 1182 | { 1183 | "url": "https://symfony.com/sponsor", 1184 | "type": "custom" 1185 | }, 1186 | { 1187 | "url": "https://github.com/fabpot", 1188 | "type": "github" 1189 | }, 1190 | { 1191 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1192 | "type": "tidelift" 1193 | } 1194 | ], 1195 | "time": "2021-04-11T23:07:08+00:00" 1196 | }, 1197 | { 1198 | "name": "symfony/mime", 1199 | "version": "v5.3.2", 1200 | "source": { 1201 | "type": "git", 1202 | "url": "https://github.com/symfony/mime.git", 1203 | "reference": "47dd7912152b82d0d4c8d9040dbc93d6232d472a" 1204 | }, 1205 | "dist": { 1206 | "type": "zip", 1207 | "url": "https://api.github.com/repos/symfony/mime/zipball/47dd7912152b82d0d4c8d9040dbc93d6232d472a", 1208 | "reference": "47dd7912152b82d0d4c8d9040dbc93d6232d472a", 1209 | "shasum": "" 1210 | }, 1211 | "require": { 1212 | "php": ">=7.2.5", 1213 | "symfony/deprecation-contracts": "^2.1", 1214 | "symfony/polyfill-intl-idn": "^1.10", 1215 | "symfony/polyfill-mbstring": "^1.0", 1216 | "symfony/polyfill-php80": "^1.15" 1217 | }, 1218 | "conflict": { 1219 | "egulias/email-validator": "~3.0.0", 1220 | "phpdocumentor/reflection-docblock": "<3.2.2", 1221 | "phpdocumentor/type-resolver": "<1.4.0", 1222 | "symfony/mailer": "<4.4" 1223 | }, 1224 | "require-dev": { 1225 | "egulias/email-validator": "^2.1.10|^3.1", 1226 | "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", 1227 | "symfony/dependency-injection": "^4.4|^5.0", 1228 | "symfony/property-access": "^4.4|^5.1", 1229 | "symfony/property-info": "^4.4|^5.1", 1230 | "symfony/serializer": "^5.2" 1231 | }, 1232 | "type": "library", 1233 | "autoload": { 1234 | "psr-4": { 1235 | "Symfony\\Component\\Mime\\": "" 1236 | }, 1237 | "exclude-from-classmap": [ 1238 | "/Tests/" 1239 | ] 1240 | }, 1241 | "notification-url": "https://packagist.org/downloads/", 1242 | "license": [ 1243 | "MIT" 1244 | ], 1245 | "authors": [ 1246 | { 1247 | "name": "Fabien Potencier", 1248 | "email": "fabien@symfony.com" 1249 | }, 1250 | { 1251 | "name": "Symfony Community", 1252 | "homepage": "https://symfony.com/contributors" 1253 | } 1254 | ], 1255 | "description": "Allows manipulating MIME messages", 1256 | "homepage": "https://symfony.com", 1257 | "keywords": [ 1258 | "mime", 1259 | "mime-type" 1260 | ], 1261 | "support": { 1262 | "source": "https://github.com/symfony/mime/tree/v5.3.2" 1263 | }, 1264 | "funding": [ 1265 | { 1266 | "url": "https://symfony.com/sponsor", 1267 | "type": "custom" 1268 | }, 1269 | { 1270 | "url": "https://github.com/fabpot", 1271 | "type": "github" 1272 | }, 1273 | { 1274 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1275 | "type": "tidelift" 1276 | } 1277 | ], 1278 | "time": "2021-06-09T10:58:01+00:00" 1279 | }, 1280 | { 1281 | "name": "symfony/panther", 1282 | "version": "v1.0.1", 1283 | "source": { 1284 | "type": "git", 1285 | "url": "https://github.com/symfony/panther.git", 1286 | "reference": "d129434b09c3cf920618471e094c928d3d320df8" 1287 | }, 1288 | "dist": { 1289 | "type": "zip", 1290 | "url": "https://api.github.com/repos/symfony/panther/zipball/d129434b09c3cf920618471e094c928d3d320df8", 1291 | "reference": "d129434b09c3cf920618471e094c928d3d320df8", 1292 | "shasum": "" 1293 | }, 1294 | "require": { 1295 | "ext-dom": "*", 1296 | "ext-libxml": "*", 1297 | "php": ">=7.1", 1298 | "php-webdriver/webdriver": "^1.8.2", 1299 | "symfony/browser-kit": "^4.4 || ^5.0", 1300 | "symfony/dom-crawler": "^4.4 || ^5.0", 1301 | "symfony/http-client": "^4.4.11 || ^5.2", 1302 | "symfony/polyfill-php72": "^1.9", 1303 | "symfony/process": "^4.4 || ^5.0" 1304 | }, 1305 | "require-dev": { 1306 | "symfony/css-selector": "^4.4 || ^5.0", 1307 | "symfony/framework-bundle": "^4.4 || ^5.0", 1308 | "symfony/mime": "^4.4 || ^5.0", 1309 | "symfony/phpunit-bridge": "^5.2" 1310 | }, 1311 | "type": "library", 1312 | "extra": { 1313 | "branch-alias": { 1314 | "dev-main": "1.0.x-dev" 1315 | } 1316 | }, 1317 | "autoload": { 1318 | "psr-4": { 1319 | "Symfony\\Component\\Panther\\": "src/" 1320 | } 1321 | }, 1322 | "notification-url": "https://packagist.org/downloads/", 1323 | "license": [ 1324 | "MIT" 1325 | ], 1326 | "authors": [ 1327 | { 1328 | "name": "Kévin Dunglas", 1329 | "email": "dunglas@gmail.com", 1330 | "homepage": "https://dunglas.fr" 1331 | }, 1332 | { 1333 | "name": "Symfony Community", 1334 | "homepage": "https://symfony.com/contributors" 1335 | } 1336 | ], 1337 | "description": "A browser testing and web scraping library for PHP and Symfony.", 1338 | "homepage": "https://dunglas.fr", 1339 | "keywords": [ 1340 | "e2e", 1341 | "scraping", 1342 | "selenium", 1343 | "symfony", 1344 | "testing", 1345 | "webdriver" 1346 | ], 1347 | "support": { 1348 | "issues": "https://github.com/symfony/panther/issues", 1349 | "source": "https://github.com/symfony/panther/tree/v1.0.1" 1350 | }, 1351 | "funding": [ 1352 | { 1353 | "url": "https://www.panthera.org/donate", 1354 | "type": "custom" 1355 | } 1356 | ], 1357 | "time": "2021-02-03T21:52:39+00:00" 1358 | }, 1359 | { 1360 | "name": "symfony/polyfill-ctype", 1361 | "version": "v1.23.0", 1362 | "source": { 1363 | "type": "git", 1364 | "url": "https://github.com/symfony/polyfill-ctype.git", 1365 | "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" 1366 | }, 1367 | "dist": { 1368 | "type": "zip", 1369 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", 1370 | "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", 1371 | "shasum": "" 1372 | }, 1373 | "require": { 1374 | "php": ">=7.1" 1375 | }, 1376 | "suggest": { 1377 | "ext-ctype": "For best performance" 1378 | }, 1379 | "type": "library", 1380 | "extra": { 1381 | "branch-alias": { 1382 | "dev-main": "1.23-dev" 1383 | }, 1384 | "thanks": { 1385 | "name": "symfony/polyfill", 1386 | "url": "https://github.com/symfony/polyfill" 1387 | } 1388 | }, 1389 | "autoload": { 1390 | "psr-4": { 1391 | "Symfony\\Polyfill\\Ctype\\": "" 1392 | }, 1393 | "files": [ 1394 | "bootstrap.php" 1395 | ] 1396 | }, 1397 | "notification-url": "https://packagist.org/downloads/", 1398 | "license": [ 1399 | "MIT" 1400 | ], 1401 | "authors": [ 1402 | { 1403 | "name": "Gert de Pagter", 1404 | "email": "BackEndTea@gmail.com" 1405 | }, 1406 | { 1407 | "name": "Symfony Community", 1408 | "homepage": "https://symfony.com/contributors" 1409 | } 1410 | ], 1411 | "description": "Symfony polyfill for ctype functions", 1412 | "homepage": "https://symfony.com", 1413 | "keywords": [ 1414 | "compatibility", 1415 | "ctype", 1416 | "polyfill", 1417 | "portable" 1418 | ], 1419 | "support": { 1420 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" 1421 | }, 1422 | "funding": [ 1423 | { 1424 | "url": "https://symfony.com/sponsor", 1425 | "type": "custom" 1426 | }, 1427 | { 1428 | "url": "https://github.com/fabpot", 1429 | "type": "github" 1430 | }, 1431 | { 1432 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1433 | "type": "tidelift" 1434 | } 1435 | ], 1436 | "time": "2021-02-19T12:13:01+00:00" 1437 | }, 1438 | { 1439 | "name": "symfony/polyfill-intl-idn", 1440 | "version": "v1.23.0", 1441 | "source": { 1442 | "type": "git", 1443 | "url": "https://github.com/symfony/polyfill-intl-idn.git", 1444 | "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" 1445 | }, 1446 | "dist": { 1447 | "type": "zip", 1448 | "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", 1449 | "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", 1450 | "shasum": "" 1451 | }, 1452 | "require": { 1453 | "php": ">=7.1", 1454 | "symfony/polyfill-intl-normalizer": "^1.10", 1455 | "symfony/polyfill-php72": "^1.10" 1456 | }, 1457 | "suggest": { 1458 | "ext-intl": "For best performance" 1459 | }, 1460 | "type": "library", 1461 | "extra": { 1462 | "branch-alias": { 1463 | "dev-main": "1.23-dev" 1464 | }, 1465 | "thanks": { 1466 | "name": "symfony/polyfill", 1467 | "url": "https://github.com/symfony/polyfill" 1468 | } 1469 | }, 1470 | "autoload": { 1471 | "psr-4": { 1472 | "Symfony\\Polyfill\\Intl\\Idn\\": "" 1473 | }, 1474 | "files": [ 1475 | "bootstrap.php" 1476 | ] 1477 | }, 1478 | "notification-url": "https://packagist.org/downloads/", 1479 | "license": [ 1480 | "MIT" 1481 | ], 1482 | "authors": [ 1483 | { 1484 | "name": "Laurent Bassin", 1485 | "email": "laurent@bassin.info" 1486 | }, 1487 | { 1488 | "name": "Trevor Rowbotham", 1489 | "email": "trevor.rowbotham@pm.me" 1490 | }, 1491 | { 1492 | "name": "Symfony Community", 1493 | "homepage": "https://symfony.com/contributors" 1494 | } 1495 | ], 1496 | "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", 1497 | "homepage": "https://symfony.com", 1498 | "keywords": [ 1499 | "compatibility", 1500 | "idn", 1501 | "intl", 1502 | "polyfill", 1503 | "portable", 1504 | "shim" 1505 | ], 1506 | "support": { 1507 | "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" 1508 | }, 1509 | "funding": [ 1510 | { 1511 | "url": "https://symfony.com/sponsor", 1512 | "type": "custom" 1513 | }, 1514 | { 1515 | "url": "https://github.com/fabpot", 1516 | "type": "github" 1517 | }, 1518 | { 1519 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1520 | "type": "tidelift" 1521 | } 1522 | ], 1523 | "time": "2021-05-27T09:27:20+00:00" 1524 | }, 1525 | { 1526 | "name": "symfony/polyfill-intl-normalizer", 1527 | "version": "v1.23.0", 1528 | "source": { 1529 | "type": "git", 1530 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 1531 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" 1532 | }, 1533 | "dist": { 1534 | "type": "zip", 1535 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", 1536 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", 1537 | "shasum": "" 1538 | }, 1539 | "require": { 1540 | "php": ">=7.1" 1541 | }, 1542 | "suggest": { 1543 | "ext-intl": "For best performance" 1544 | }, 1545 | "type": "library", 1546 | "extra": { 1547 | "branch-alias": { 1548 | "dev-main": "1.23-dev" 1549 | }, 1550 | "thanks": { 1551 | "name": "symfony/polyfill", 1552 | "url": "https://github.com/symfony/polyfill" 1553 | } 1554 | }, 1555 | "autoload": { 1556 | "psr-4": { 1557 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 1558 | }, 1559 | "files": [ 1560 | "bootstrap.php" 1561 | ], 1562 | "classmap": [ 1563 | "Resources/stubs" 1564 | ] 1565 | }, 1566 | "notification-url": "https://packagist.org/downloads/", 1567 | "license": [ 1568 | "MIT" 1569 | ], 1570 | "authors": [ 1571 | { 1572 | "name": "Nicolas Grekas", 1573 | "email": "p@tchwork.com" 1574 | }, 1575 | { 1576 | "name": "Symfony Community", 1577 | "homepage": "https://symfony.com/contributors" 1578 | } 1579 | ], 1580 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 1581 | "homepage": "https://symfony.com", 1582 | "keywords": [ 1583 | "compatibility", 1584 | "intl", 1585 | "normalizer", 1586 | "polyfill", 1587 | "portable", 1588 | "shim" 1589 | ], 1590 | "support": { 1591 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" 1592 | }, 1593 | "funding": [ 1594 | { 1595 | "url": "https://symfony.com/sponsor", 1596 | "type": "custom" 1597 | }, 1598 | { 1599 | "url": "https://github.com/fabpot", 1600 | "type": "github" 1601 | }, 1602 | { 1603 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1604 | "type": "tidelift" 1605 | } 1606 | ], 1607 | "time": "2021-02-19T12:13:01+00:00" 1608 | }, 1609 | { 1610 | "name": "symfony/polyfill-mbstring", 1611 | "version": "v1.23.0", 1612 | "source": { 1613 | "type": "git", 1614 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1615 | "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" 1616 | }, 1617 | "dist": { 1618 | "type": "zip", 1619 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", 1620 | "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", 1621 | "shasum": "" 1622 | }, 1623 | "require": { 1624 | "php": ">=7.1" 1625 | }, 1626 | "suggest": { 1627 | "ext-mbstring": "For best performance" 1628 | }, 1629 | "type": "library", 1630 | "extra": { 1631 | "branch-alias": { 1632 | "dev-main": "1.23-dev" 1633 | }, 1634 | "thanks": { 1635 | "name": "symfony/polyfill", 1636 | "url": "https://github.com/symfony/polyfill" 1637 | } 1638 | }, 1639 | "autoload": { 1640 | "psr-4": { 1641 | "Symfony\\Polyfill\\Mbstring\\": "" 1642 | }, 1643 | "files": [ 1644 | "bootstrap.php" 1645 | ] 1646 | }, 1647 | "notification-url": "https://packagist.org/downloads/", 1648 | "license": [ 1649 | "MIT" 1650 | ], 1651 | "authors": [ 1652 | { 1653 | "name": "Nicolas Grekas", 1654 | "email": "p@tchwork.com" 1655 | }, 1656 | { 1657 | "name": "Symfony Community", 1658 | "homepage": "https://symfony.com/contributors" 1659 | } 1660 | ], 1661 | "description": "Symfony polyfill for the Mbstring extension", 1662 | "homepage": "https://symfony.com", 1663 | "keywords": [ 1664 | "compatibility", 1665 | "mbstring", 1666 | "polyfill", 1667 | "portable", 1668 | "shim" 1669 | ], 1670 | "support": { 1671 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" 1672 | }, 1673 | "funding": [ 1674 | { 1675 | "url": "https://symfony.com/sponsor", 1676 | "type": "custom" 1677 | }, 1678 | { 1679 | "url": "https://github.com/fabpot", 1680 | "type": "github" 1681 | }, 1682 | { 1683 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1684 | "type": "tidelift" 1685 | } 1686 | ], 1687 | "time": "2021-05-27T09:27:20+00:00" 1688 | }, 1689 | { 1690 | "name": "symfony/polyfill-php72", 1691 | "version": "v1.23.0", 1692 | "source": { 1693 | "type": "git", 1694 | "url": "https://github.com/symfony/polyfill-php72.git", 1695 | "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" 1696 | }, 1697 | "dist": { 1698 | "type": "zip", 1699 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", 1700 | "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", 1701 | "shasum": "" 1702 | }, 1703 | "require": { 1704 | "php": ">=7.1" 1705 | }, 1706 | "type": "library", 1707 | "extra": { 1708 | "branch-alias": { 1709 | "dev-main": "1.23-dev" 1710 | }, 1711 | "thanks": { 1712 | "name": "symfony/polyfill", 1713 | "url": "https://github.com/symfony/polyfill" 1714 | } 1715 | }, 1716 | "autoload": { 1717 | "psr-4": { 1718 | "Symfony\\Polyfill\\Php72\\": "" 1719 | }, 1720 | "files": [ 1721 | "bootstrap.php" 1722 | ] 1723 | }, 1724 | "notification-url": "https://packagist.org/downloads/", 1725 | "license": [ 1726 | "MIT" 1727 | ], 1728 | "authors": [ 1729 | { 1730 | "name": "Nicolas Grekas", 1731 | "email": "p@tchwork.com" 1732 | }, 1733 | { 1734 | "name": "Symfony Community", 1735 | "homepage": "https://symfony.com/contributors" 1736 | } 1737 | ], 1738 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", 1739 | "homepage": "https://symfony.com", 1740 | "keywords": [ 1741 | "compatibility", 1742 | "polyfill", 1743 | "portable", 1744 | "shim" 1745 | ], 1746 | "support": { 1747 | "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" 1748 | }, 1749 | "funding": [ 1750 | { 1751 | "url": "https://symfony.com/sponsor", 1752 | "type": "custom" 1753 | }, 1754 | { 1755 | "url": "https://github.com/fabpot", 1756 | "type": "github" 1757 | }, 1758 | { 1759 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1760 | "type": "tidelift" 1761 | } 1762 | ], 1763 | "time": "2021-05-27T09:17:38+00:00" 1764 | }, 1765 | { 1766 | "name": "symfony/polyfill-php73", 1767 | "version": "v1.23.0", 1768 | "source": { 1769 | "type": "git", 1770 | "url": "https://github.com/symfony/polyfill-php73.git", 1771 | "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" 1772 | }, 1773 | "dist": { 1774 | "type": "zip", 1775 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", 1776 | "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", 1777 | "shasum": "" 1778 | }, 1779 | "require": { 1780 | "php": ">=7.1" 1781 | }, 1782 | "type": "library", 1783 | "extra": { 1784 | "branch-alias": { 1785 | "dev-main": "1.23-dev" 1786 | }, 1787 | "thanks": { 1788 | "name": "symfony/polyfill", 1789 | "url": "https://github.com/symfony/polyfill" 1790 | } 1791 | }, 1792 | "autoload": { 1793 | "psr-4": { 1794 | "Symfony\\Polyfill\\Php73\\": "" 1795 | }, 1796 | "files": [ 1797 | "bootstrap.php" 1798 | ], 1799 | "classmap": [ 1800 | "Resources/stubs" 1801 | ] 1802 | }, 1803 | "notification-url": "https://packagist.org/downloads/", 1804 | "license": [ 1805 | "MIT" 1806 | ], 1807 | "authors": [ 1808 | { 1809 | "name": "Nicolas Grekas", 1810 | "email": "p@tchwork.com" 1811 | }, 1812 | { 1813 | "name": "Symfony Community", 1814 | "homepage": "https://symfony.com/contributors" 1815 | } 1816 | ], 1817 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 1818 | "homepage": "https://symfony.com", 1819 | "keywords": [ 1820 | "compatibility", 1821 | "polyfill", 1822 | "portable", 1823 | "shim" 1824 | ], 1825 | "support": { 1826 | "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" 1827 | }, 1828 | "funding": [ 1829 | { 1830 | "url": "https://symfony.com/sponsor", 1831 | "type": "custom" 1832 | }, 1833 | { 1834 | "url": "https://github.com/fabpot", 1835 | "type": "github" 1836 | }, 1837 | { 1838 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1839 | "type": "tidelift" 1840 | } 1841 | ], 1842 | "time": "2021-02-19T12:13:01+00:00" 1843 | }, 1844 | { 1845 | "name": "symfony/polyfill-php80", 1846 | "version": "v1.23.0", 1847 | "source": { 1848 | "type": "git", 1849 | "url": "https://github.com/symfony/polyfill-php80.git", 1850 | "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" 1851 | }, 1852 | "dist": { 1853 | "type": "zip", 1854 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", 1855 | "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", 1856 | "shasum": "" 1857 | }, 1858 | "require": { 1859 | "php": ">=7.1" 1860 | }, 1861 | "type": "library", 1862 | "extra": { 1863 | "branch-alias": { 1864 | "dev-main": "1.23-dev" 1865 | }, 1866 | "thanks": { 1867 | "name": "symfony/polyfill", 1868 | "url": "https://github.com/symfony/polyfill" 1869 | } 1870 | }, 1871 | "autoload": { 1872 | "psr-4": { 1873 | "Symfony\\Polyfill\\Php80\\": "" 1874 | }, 1875 | "files": [ 1876 | "bootstrap.php" 1877 | ], 1878 | "classmap": [ 1879 | "Resources/stubs" 1880 | ] 1881 | }, 1882 | "notification-url": "https://packagist.org/downloads/", 1883 | "license": [ 1884 | "MIT" 1885 | ], 1886 | "authors": [ 1887 | { 1888 | "name": "Ion Bazan", 1889 | "email": "ion.bazan@gmail.com" 1890 | }, 1891 | { 1892 | "name": "Nicolas Grekas", 1893 | "email": "p@tchwork.com" 1894 | }, 1895 | { 1896 | "name": "Symfony Community", 1897 | "homepage": "https://symfony.com/contributors" 1898 | } 1899 | ], 1900 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 1901 | "homepage": "https://symfony.com", 1902 | "keywords": [ 1903 | "compatibility", 1904 | "polyfill", 1905 | "portable", 1906 | "shim" 1907 | ], 1908 | "support": { 1909 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" 1910 | }, 1911 | "funding": [ 1912 | { 1913 | "url": "https://symfony.com/sponsor", 1914 | "type": "custom" 1915 | }, 1916 | { 1917 | "url": "https://github.com/fabpot", 1918 | "type": "github" 1919 | }, 1920 | { 1921 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1922 | "type": "tidelift" 1923 | } 1924 | ], 1925 | "time": "2021-02-19T12:13:01+00:00" 1926 | }, 1927 | { 1928 | "name": "symfony/process", 1929 | "version": "v5.3.2", 1930 | "source": { 1931 | "type": "git", 1932 | "url": "https://github.com/symfony/process.git", 1933 | "reference": "714b47f9196de61a196d86c4bad5f09201b307df" 1934 | }, 1935 | "dist": { 1936 | "type": "zip", 1937 | "url": "https://api.github.com/repos/symfony/process/zipball/714b47f9196de61a196d86c4bad5f09201b307df", 1938 | "reference": "714b47f9196de61a196d86c4bad5f09201b307df", 1939 | "shasum": "" 1940 | }, 1941 | "require": { 1942 | "php": ">=7.2.5", 1943 | "symfony/polyfill-php80": "^1.15" 1944 | }, 1945 | "type": "library", 1946 | "autoload": { 1947 | "psr-4": { 1948 | "Symfony\\Component\\Process\\": "" 1949 | }, 1950 | "exclude-from-classmap": [ 1951 | "/Tests/" 1952 | ] 1953 | }, 1954 | "notification-url": "https://packagist.org/downloads/", 1955 | "license": [ 1956 | "MIT" 1957 | ], 1958 | "authors": [ 1959 | { 1960 | "name": "Fabien Potencier", 1961 | "email": "fabien@symfony.com" 1962 | }, 1963 | { 1964 | "name": "Symfony Community", 1965 | "homepage": "https://symfony.com/contributors" 1966 | } 1967 | ], 1968 | "description": "Executes commands in sub-processes", 1969 | "homepage": "https://symfony.com", 1970 | "support": { 1971 | "source": "https://github.com/symfony/process/tree/v5.3.2" 1972 | }, 1973 | "funding": [ 1974 | { 1975 | "url": "https://symfony.com/sponsor", 1976 | "type": "custom" 1977 | }, 1978 | { 1979 | "url": "https://github.com/fabpot", 1980 | "type": "github" 1981 | }, 1982 | { 1983 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1984 | "type": "tidelift" 1985 | } 1986 | ], 1987 | "time": "2021-06-12T10:15:01+00:00" 1988 | }, 1989 | { 1990 | "name": "symfony/service-contracts", 1991 | "version": "v2.4.0", 1992 | "source": { 1993 | "type": "git", 1994 | "url": "https://github.com/symfony/service-contracts.git", 1995 | "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" 1996 | }, 1997 | "dist": { 1998 | "type": "zip", 1999 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", 2000 | "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", 2001 | "shasum": "" 2002 | }, 2003 | "require": { 2004 | "php": ">=7.2.5", 2005 | "psr/container": "^1.1" 2006 | }, 2007 | "suggest": { 2008 | "symfony/service-implementation": "" 2009 | }, 2010 | "type": "library", 2011 | "extra": { 2012 | "branch-alias": { 2013 | "dev-main": "2.4-dev" 2014 | }, 2015 | "thanks": { 2016 | "name": "symfony/contracts", 2017 | "url": "https://github.com/symfony/contracts" 2018 | } 2019 | }, 2020 | "autoload": { 2021 | "psr-4": { 2022 | "Symfony\\Contracts\\Service\\": "" 2023 | } 2024 | }, 2025 | "notification-url": "https://packagist.org/downloads/", 2026 | "license": [ 2027 | "MIT" 2028 | ], 2029 | "authors": [ 2030 | { 2031 | "name": "Nicolas Grekas", 2032 | "email": "p@tchwork.com" 2033 | }, 2034 | { 2035 | "name": "Symfony Community", 2036 | "homepage": "https://symfony.com/contributors" 2037 | } 2038 | ], 2039 | "description": "Generic abstractions related to writing services", 2040 | "homepage": "https://symfony.com", 2041 | "keywords": [ 2042 | "abstractions", 2043 | "contracts", 2044 | "decoupling", 2045 | "interfaces", 2046 | "interoperability", 2047 | "standards" 2048 | ], 2049 | "support": { 2050 | "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" 2051 | }, 2052 | "funding": [ 2053 | { 2054 | "url": "https://symfony.com/sponsor", 2055 | "type": "custom" 2056 | }, 2057 | { 2058 | "url": "https://github.com/fabpot", 2059 | "type": "github" 2060 | }, 2061 | { 2062 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2063 | "type": "tidelift" 2064 | } 2065 | ], 2066 | "time": "2021-04-01T10:43:52+00:00" 2067 | } 2068 | ], 2069 | "packages-dev": [ 2070 | { 2071 | "name": "dbrekelmans/bdi", 2072 | "version": "0.3", 2073 | "source": { 2074 | "type": "git", 2075 | "url": "https://github.com/dbrekelmans/bdi.git", 2076 | "reference": "d94d818ebe20b419a7d9f17dc21e9c66a10b171f" 2077 | }, 2078 | "dist": { 2079 | "type": "zip", 2080 | "url": "https://api.github.com/repos/dbrekelmans/bdi/zipball/d94d818ebe20b419a7d9f17dc21e9c66a10b171f", 2081 | "reference": "d94d818ebe20b419a7d9f17dc21e9c66a10b171f", 2082 | "shasum": "" 2083 | }, 2084 | "require": { 2085 | "ext-json": "*", 2086 | "ext-zip": "*", 2087 | "ext-zlib": "*", 2088 | "php": "^7.2|^8.0" 2089 | }, 2090 | "bin": [ 2091 | "bdi", 2092 | "bdi.phar" 2093 | ], 2094 | "type": "library", 2095 | "notification-url": "https://packagist.org/downloads/", 2096 | "license": [ 2097 | "MIT" 2098 | ], 2099 | "authors": [ 2100 | { 2101 | "name": "Daniël Brekelmans", 2102 | "homepage": "https://github.com/dbrekelmans" 2103 | }, 2104 | { 2105 | "name": "Contributors", 2106 | "homepage": "https://github.com/dbrekelmans/bdi/graphs/contributors" 2107 | } 2108 | ], 2109 | "description": "PHAR distribution of dbrekelmans/browser-driver-installer.", 2110 | "homepage": "https://github.com/dbrekelmans/bdi", 2111 | "keywords": [ 2112 | "browser-driver-installer" 2113 | ], 2114 | "support": { 2115 | "source": "https://github.com/dbrekelmans/bdi/tree/0.3" 2116 | }, 2117 | "time": "2020-12-13T21:43:40+00:00" 2118 | } 2119 | ], 2120 | "aliases": [], 2121 | "minimum-stability": "dev", 2122 | "stability-flags": { 2123 | "simplehtmldom/simplehtmldom": 5 2124 | }, 2125 | "prefer-stable": true, 2126 | "prefer-lowest": false, 2127 | "platform": { 2128 | "php": ">=7.4" 2129 | }, 2130 | "platform-dev": [], 2131 | "plugin-api-version": "2.0.0" 2132 | } 2133 | -------------------------------------------------------------------------------- /drivers/chromedriver: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaymoh/php_web_scraper/2b38783eea968fa879315155461ab44f19fd1411/drivers/chromedriver -------------------------------------------------------------------------------- /drivers/geckodriver: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaymoh/php_web_scraper/2b38783eea968fa879315155461ab44f19fd1411/drivers/geckodriver -------------------------------------------------------------------------------- /goutte_css_requests.php: -------------------------------------------------------------------------------- 1 | request('GET', 'https://books.toscrape.com/'); 9 | 10 | // get prices into an array 11 | $prices = []; 12 | $response->filter('.row li article div.product_price p.price_color') 13 | ->each(function ($node) use (&$prices) { 14 | $prices[] = $node->text(); 15 | }); 16 | 17 | // echo title, price, and description 18 | $priceIndex = 0; 19 | $response->filter('.row li article h3 a') 20 | ->each(function ($node) use ($prices, &$priceIndex, $httpClient) { 21 | $title = $node->text(); 22 | $price = $prices[$priceIndex]; 23 | 24 | //getting the description 25 | $description = $httpClient->click($node->link()) 26 | ->filter('.content #content_inner article p')->eq(3)->text(); 27 | 28 | // display the result 29 | echo "{$title} @ {$price} : {$description}\n\n"; 30 | 31 | $priceIndex++; 32 | }); -------------------------------------------------------------------------------- /goutte_requests.php: -------------------------------------------------------------------------------- 1 | request('GET', 'https://books.toscrape.com/'); 9 | 10 | $titles = $response->evaluate('//ol[@class="row"]//li//article//h3/a'); 11 | $prices = $response->evaluate('//ol[@class="row"]//li//article//div[@class="product_price"]//p[@class="price_color"]'); 12 | 13 | // we can store the prices into an array 14 | $priceArray = []; 15 | foreach ($prices as $key => $price) { 16 | $priceArray[] = $price->textContent; 17 | } 18 | 19 | // we extract the titles and display to the terminal together with the prices 20 | foreach ($titles as $key => $title) { 21 | echo $title->textContent . ' @ '. $priceArray[$key] . PHP_EOL; 22 | } 23 | -------------------------------------------------------------------------------- /guzzle_requests.php: -------------------------------------------------------------------------------- 1 | get('https://books.toscrape.com/'); 9 | 10 | $htmlString = (string) $response->getBody(); 11 | 12 | //add this line to suppress any warnings 13 | libxml_use_internal_errors(true); 14 | 15 | $doc = new DOMDocument(); 16 | $doc->loadHTML($htmlString); 17 | 18 | $xpath = new DOMXPath($doc); 19 | 20 | $titles = $xpath->evaluate('//ol[@class="row"]//li//article//h3/a'); 21 | $prices = $xpath->evaluate('//ol[@class="row"]//li//article//div[@class="product_price"]//p[@class="price_color"]'); 22 | 23 | foreach ($titles as $key => $title) { 24 | echo $title->textContent . ' @ '. $prices[$key]->textContent.PHP_EOL; 25 | } 26 | -------------------------------------------------------------------------------- /http_requests.php: -------------------------------------------------------------------------------- 1 | get('https://books.toscrape.com/'); 13 | 14 | // take screenshot and store in current directory 15 | $response->takeScreenshot($saveAs = 'books_scrape_homepage.jpg'); 16 | 17 | // let's display some book titles 18 | $response->getCrawler()->filter('.row li article h3 a') 19 | ->each(function ($node) { 20 | echo $node->text() . PHP_EOL; 21 | }); -------------------------------------------------------------------------------- /php_scraper.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /simplehtmldom_requests.php: -------------------------------------------------------------------------------- 1 | load('https://books.toscrape.com/'); 9 | 10 | // echo the title 11 | echo $response->find('title', 0)->plaintext . PHP_EOL . PHP_EOL; 12 | 13 | // get the prices into an array 14 | $prices = []; 15 | foreach ($response->find('.row li article div.product_price p.price_color') as $price) { 16 | $prices[] = $price->plaintext; 17 | } 18 | 19 | // echo titles and prices 20 | foreach ($response->find('.row li article h3 a') as $key => $title) { 21 | echo "{$title->plaintext} @ {$prices[$key]} \n"; 22 | } 23 | --------------------------------------------------------------------------------