aboutsummaryrefslogtreecommitdiff
path: root/src/phinde/LinkExtractor/Atom.php
blob: bb4d90b4ae5051a81f9549caed58c19aedbddc44 (plain)
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
<?php
namespace phinde\LinkExtractor;

use phinde\LinkInfo;

class Atom
{
    public function extract(\HTTP_Request2_Response $res)
    {
        $url  = $res->getEffectiveUrl();
        $base = new \Net_URL2($url);

        $sx = simplexml_load_string($res->getBody());
        $linkInfos   = array();
        $alreadySeen = array();

        foreach ($sx->entry as $entry) {
            $linkTitle = (string) $entry->title;
            foreach ($entry->link as $xlink) {
                $linkUrl = (string) $base->resolve((string) $xlink['href']);
                if (isset($alreadySeen[$linkUrl])) {
                    continue;
                }

                if ($xlink['rel'] == 'alternate') {
                    $linkInfos[] = new LinkInfo($linkUrl, $linkTitle, $url);
                }
                $alreadySeen[$linkUrl] = true;
            }
        }

        return $linkInfos;
    }
}
?>