Completed
Push — master ( be855c...5f2aa4 )
by Nils
10:52
created

Crawler::getOccuredExceptions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
namespace whm\Smoke\Extensions\SmokeResponseRetriever\Retriever\Crawler;
4
5
use phm\HttpWebdriverClient\Http\Client\HttpClient;
6
use PhmLabs\Components\Init\Init;
7
use Psr\Http\Message\ResponseInterface;
8
use Psr\Http\Message\UriInterface;
9
use whm\Crawler\Crawler as whmCrawler;
10
use whm\Crawler\PageContainer\PageContainer;
11
use whm\Crawler\PageContainer\PatternAwareContainer;
12
use whm\Html\Uri;
13
use whm\Smoke\Extensions\SmokeResponseRetriever\Retriever\CrawlingRetriever;
14
use whm\Smoke\Extensions\SmokeResponseRetriever\RetrieverException;
15
use whm\Smoke\Scanner\SessionContainer;
16
17
class Crawler implements CrawlingRetriever
18
{
19
    private $startPage;
20
    private $httpClient;
21
    private $parallelRequests;
22
23
    private $started = false;
24
    private $filters;
25
26
    /**
27
     * @var PageContainer
28
     */
29
    private $pageContainer;
30
31
    /**
32
     * @var \whm\Crawler\Crawler
33
     */
34
    private $crawler;
35
36
    public function init(array $filters, $pageContainer, $startPage = null, $parallelRequests = 5)
37
    {
38
        $this->filters = Init::initializeAll($filters);
39
        if (!is_null($startPage)) {
40
            $this->startPage = new Uri($startPage);
41
        }
42
        $this->initPageContainer($pageContainer);
43
        $this->parallelRequests = $parallelRequests;
44
    }
45
46
    public function addPage(UriInterface $uri)
47
    {
48
        $this->pageContainer->push($uri, true);
49
    }
50
51
    private function initPageContainer($pageContainerArray)
52
    {
53
        $this->pageContainer = Init::initialize($pageContainerArray);
54
55
        // @todo this should be done inside a factory
56
        if ($this->pageContainer instanceof PatternAwareContainer) {
57
            if (array_key_exists('parameters', $pageContainerArray) && array_key_exists('pattern', $pageContainerArray['parameters'])) {
58
                foreach ($pageContainerArray['parameters']['pattern'] as $name => $pattern) {
59
                    $this->pageContainer->registerPattern($name, $pattern);
60
                }
61
            }
62
        }
63
    }
64
65
    public function getStartPage()
66
    {
67
        return $this->startPage;
68
    }
69
70
    public function setStartPage(UriInterface $startPage)
71
    {
72
        $this->startPage = $startPage;
73
    }
74
75
    public function setHttpClient(HttpClient $httpClient)
76
    {
77
        $this->httpClient = $httpClient;
78
    }
79
80
    /**
81
     * @return ResponseInterface
82
     */
83
    public function next()
84
    {
85
        if (!$this->started) {
86
            $this->started = true;
87
88
            if (is_null($this->startPage)) {
89
                throw new \RuntimeException('The crawler you are using needs a start page to work, but it is not defined. ');
90
            }
91
92
            $this->crawler = new whmCrawler($this->httpClient, $this->pageContainer, $this->startPage, $this->parallelRequests);
93
94
            foreach ($this->filters as $filter) {
95
                $this->crawler->addFilter($filter);
96
            }
97
        }
98
99
        return $this->crawler->next();
100
    }
101
102
    public function getComingFrom(UriInterface $uri)
103
    {
104
        return $this->crawler->getComingFrom($uri);
105
    }
106
107
    public function getOriginUri(UriInterface $uri)
108
    {
109
        return $uri;
110
    }
111
112
    public function setSessionContainer(SessionContainer $sessionContainer)
113
    {
114
    }
115
116
    public function getOccuredExceptions()
117
    {
118
        return [];
119
    }
120
}
121