Reader::adjustNamespaces()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 9
rs 9.6667
cc 3
eloc 5
nc 3
nop 1
1
<?php
2
3
namespace WITR\RSS;
4
5
use Illuminate\Support\Collection;
6
use GuzzleHttp\Client;
7
8
class Reader
9
{
10
11
    protected $parser;
12
13
    public static function forParser(Parser $parser)
14
    {
15
        $reader = new Reader();
16
17
        $reader->parser = $parser;
18
19
        return $reader;
20
    }
21
22
    public function get()
23
    {
24
        $results = new Collection;
25
26
        $client = new Client();
27
        $response = $client->get($this->parser->url(), [
28
            'headers' => ['User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36']
29
        ]);
30
        
31
        $xml = simplexml_load_string($response->getBody())->channel->item;
32
        foreach ($xml as $node)
33
        {
34
            $this->adjustNamespaces($node);
35
            $results[] = $this->parser->parse($node);
36
        }
37
38
        return $results;
39
    }
40
41
    private function adjustNamespaces($el)
42
    {
43
        foreach ($el->getNamespaces(TRUE) as $prefix => $ns) {
44
            $children = $el->children($ns);
45
            foreach ($children as $tag => $content) {
46
                $el->{$prefix . ':' . $tag} = $content;
47
            }
48
        }
49
    }
50
}
51