Completed
Push — master ( e09e40...2564b7 )
by Nils
02:09
created

Crawler::setSessionContainer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

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