├── .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 |
--------------------------------------------------------------------------------