Completed
Push — master ( db69bb...88bf51 )
by Matthijs
06:15 queued 03:23
created

CrawlerDiscoverer   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
c 1
b 0
f 0
lcom 0
cbo 4
dl 0
loc 37
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
getFilteredCrawler() 0 1 ?
A discover() 0 14 3
1
<?php
2
namespace VDB\Spider\Discoverer;
3
4
use Symfony\Component\DomCrawler\Crawler;
5
use VDB\Spider\Discoverer\DiscovererInterface;
6
use VDB\Spider\Discoverer\Discoverer;
7
use VDB\Spider\Resource;
8
use VDB\Uri\Exception\UriSyntaxException;
9
use VDB\Uri\Uri;
10
use VDB\Spider\Uri\DiscoveredUri;
11
use VDB\Uri\UriInterface;
12
13
/**
14
 * @author Matthijs van den Bos
15
 * @copyright 2013 Matthijs van den Bos
16
 */
17
abstract class CrawlerDiscoverer extends Discoverer implements DiscovererInterface
18
{
19
    /** @var string */
20
    protected $selector;
21
22
    /**
23
     * @param $selector
24
     */
25
    public function __construct($selector)
26
    {
27
        $this->selector = $selector;
28
    }
29
30
    /**
31
     * @return Crawler
32
     */
33
    abstract protected function getFilteredCrawler(Resource $resource);
34
35
    /**
36
     * @param Resource $resource
37
     * @return DiscoveredUri[]
38
     */
39
    public function discover(Resource $resource)
40
    {
41
        $crawler = $this->getFilteredCrawler($resource);
42
43
        $uris = array();
44
        foreach ($crawler as $node) {
45
            try {
46
                $uris[] = new DiscoveredUri(new Uri($node->getAttribute('href'), $resource->getUri()->toString()));
47
            } catch (UriSyntaxException $e) {
48
                // do nothing. We simply ignore invalid URI's
49
            }
50
        }
51
        return $uris;
52
    }
53
}
54